Historia
Poznaj mojego przyjaciela Jimmy'ego:
/o\
Jimmy to mała postać, która lubi stać na platformach. Oto Jimmy bezpiecznie stojący na platformie:
/o\
-------------
Teraz Jimmy ma dobre wyczucie równowagi, dzięki czemu może bezpiecznie stać z jedną nogą poza platformą, w ten sposób:
/o\
-------------------
Chociaż jeśli stanie z dwiema lub więcej częściami ciała poza platformą, spadnie. Oba są przykładami, w których Jimmy upadnie:
/o\ /o\
---------- ----------------------
Wyzwanie
Twoim wyzwaniem jest napisanie programu określającego, biorąc pod uwagę ciąg z platformą i pozycją Jimmy'ego, czy Jimmy może stać na platformie bez upadku.
Dane wejściowe: Dwie linie pokazujące pozycję Jimmy'ego i pozycję platformy pod nim. Może to być z dwóch osobnych danych wejściowych, pojedynczego wejścia lub jakiegoś rodzaju tablicy.
- Możesz przyjmować dane wejściowe w dowolnej rozsądnej formie, włączając funkcje i standardowe dane wejściowe. Stosuj kodowanie tylko wtedy, gdy Twój język nie obsługuje innych metod wprowadzania.
Dane wyjściowe: wartości logiczne prawda i fałsz lub liczby całkowite 1 lub 0 reprezentują odpowiednio wartość prawda / fałsz.
- Wartość logiczna zależy od tego, czy Jimmy może pozostać na platformie, czy nie - prawda, jeśli Jimmy może pozostać na platformie, lub fałsz, jeśli spadnie.
Rozmiar platformy jest dowolny i można go dowolnie zmieniać. Twój program powinien to uwzględnić.
Platforma nie może mieć długości zero, a platforma musi być kompletna (brak otworów w platformie).
Pamiętaj, że Jimmy odpada, gdy dwie jego części ciała zwisają z platformy. Część ciała to jedna postać ASCII jego ciała.
Końcowe białe znaki na końcu platformy nie są wymagane, ale twój program powinien uwzględniać obie sytuacje, w których po platformie są białe znaki, a gdzie nie.
Uważaj na standardowe luki, które są zabronione.
Przypadki testowe
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
Punktacja
To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów.
Tabela liderów
Możesz wyświetlić tabelę wyników dla tego postu, rozwijając widżet / fragment kodu poniżej. Aby Twój post znalazł się w rankingu, potrzebujesz nagłówka ( # header text
) z następującymi informacjami:
Nazwa języka (zakończ go przecinkiem
,
lub myślnikiem-
), a następnie ...Liczba bajtów, jako ostatnia liczba wyświetlana w nagłówku.
Na przykład JavaScript (ES6), 72 bytes
jest poprawny, ale Fortran, 143 bytes (8-bit)
jest nieprawidłowy, ponieważ liczba bajtów nie jest ostatnią liczbą w nagłówku (twoja odpowiedź zostanie rozpoznana jako 8 bajtów - nie wykorzystuj tego).
<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github --> <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187586" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
Odpowiedzi:
Galaretka , 6 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
S
sumuje kolumny zamiast wierszy? : S Jeśli poprawnie spojrzałem na wiki, kod:n⁶
sprawdza dla każdego znaku, czy nie jest on równy spacji (tj.['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
lista sum (ale z jakiegoś powodu sumuje kolumny zamiast wierszy ... więc[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
policz ilość 2s;Ẓ
sprawdź, czy jest to liczba pierwsza (tak 2 lub 3), po niejawnym wyniku. Ale spodziewałbym[[1,1,1],[0,1]]
się podsumować[3,1]
...S
jest równoważne0;+/Ɗ
, to znaczy redukuje przez dodanie (które wektoryzuje) o wartości początkowej0
.§
robi to, czego się spodziewałeśS
.JavaScript (ES6), 38 bajtów
Pobiera dane wejściowe jako0 lub 1 .
(a)(b)
. ZwracaWypróbuj online!
W jaki sposób?
Szukamy pozycji środkowej części
"o"
ciała Jimmy'ego w pierwszym sznurku i testujemy, czy w drugim sznurku w tej samej pozycji jest kreska.Jedynym przypadkiem, w którym Jimmy byłby niebezpieczny w tej sytuacji, jest platforma z pojedynczym myślnikiem:
Dlatego dodatkowo upewniamy się, że platforma ma szerokość co najmniej2) :
JavaScript (ES6), 36 bajtów
Wersja alternatywna, jeśli założymy, że pod Jimmy'm zawsze są kreski lub spacje (tzn. Wejście jest prostokątne).
Wypróbuj online!
Wykorzystuje fakt, że przymus wartości liczbowej wynosi0 dla spacji i NaN dla myślnika.
źródło
"/o\\\n__"
Excel,
674544 bajtówUmieść Jimmy'ego
A1
na platformie wA2
.Sprawdzono 2 warunki:
o
) jest na platformie?-
?źródło
<>
na>
Python 3,
8843 bajtówDane wejściowe są podawane w postaci listy zawierającej dwa ciągi: pierwszy ciąg jest pierwszym wierszem; drugi ciąg jest drugą linią.
Wypróbuj online!
Inna wersja, wiążąca dla 43 bajtów (nie byłem w stanie uzyskać jej krótszej niż 43):
Wypróbuj online!
Zmniejszone o 42 bajty dzięki wskazówce Jo Kinga.
Stara wersja:
-2 bajty dzięki Sriotchilism O'Zaic.
Działa to poprzez przyjęcie dwóch osobnych danych wejściowych, a następnie parowanie odpowiednich liter. Liczy liczbę par, w których żaden znak nie jest spacją, a następnie zwraca wartość True, jeśli liczba ta jest większa niż 1.
źródło
Perl 6 , 18 bajtów
Wypróbuj online!
Pobiera dwa parametry i zwraca wartość logiczną, czy Jimmy pozostanie na platformie. Działa to poprzez połączenie XOR dwóch linii razem i sprawdzenie, czy którakolwiek część Jimmy'ego nadal znajduje się na platformie.
Wyjaśnienie:
źródło
Python 2 ,
4237 bajtówWypróbuj online!
5 bajtów dzięki minus siedem
źródło
"--"in [...]
dla -5 bajtówHaskell , 34 bajty
Wypróbuj online!
Mam ten, łącząc moją poniższą technikę z drugą odpowiedzią haskell .
Haskell , 45 bajtów
Wypróbuj online!
To zlicza liczbę części ciała (znaków spacji), które są na platformie, a następnie sprawdza, czy jest większa niż 1. Powodem, dla którego liczymy części ciała na platformie, a nie części ciała, jest to, że
zipWith
odetnie górną linię ma długość dna i tym samym może odciąć części ciała Jimmy'ego. To uniemożliwia nam zrobienie czegoś takiego jakcycle" "
uzupełnienie listy.źródło
MathGolf ,
614 bajtówWypróbuj online!
8 bajtów musiało zostać dodane, aby uwzględnić przypadek na krawędzi prezentowany przez Nicka Kennedy'ego.
Sprawdza, czy
"-o-"
jest podciągiem spakowanego ciągu obu linii i spakowanego ciągu, w którym w pierwszym wierszu wejściowym usunięto pierwszy znak. Pobiera dane wejściowe jako dwa osobne ciągi, z tą jedyną zmianą, że znak jest wprowadzany jako/o\\
, ponieważ\\
jest to poprawny sposób wprowadzania odwrotnego ukośnika w ciągu w MathGolf.Wyjaśnienie
źródło
05AB1E (starsza wersja) ,
987 bajtów-1 bajt dzięki @ Mr.Xcoder z podejściem
ðм2ù
.Wprowadź jako listę dwóch ciągów.
Działa tylko w starszej wersji 05AB1E, ponieważ
ζ
może transponować listę ciągów, a także listę znaków 2D, podczas gdyζ
w nowej wersji 05AB1E działa tylko z listą znaków 2D.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
bytes
do strony kodowej, abyś wiedział, że nie jest zakodowany w UTF-8, ale zamiast tego używa niestandardowego kodowania. ;) Jeśli chcesz, mogę edytować moją odpowiedź, aby umieścić kodowanie poniżej tytułu, ale szczerze mówiąc, kod liderów powinien być w stanie obsłużyć go imho.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
aby 7 był ostatnim numerem bez unieważnienia adresu URL?Rubinowy , 28 bajtów
Wypróbuj online!
źródło
Dyalog APL Extended,
11108 bajtówWypróbuj online!
Wyjaśnienie:
-2 dzięki Adámowi.
źródło
2≤1⊥∧⌿⍤<
Excel, 36 bajtów
Jimmy w
A1
, na platformie wA2
.Znajduje pozycję Jimmy'ego, bierze 3 bajty platformy i przycina spacje. Jeśli wynikowa długość platformy jest wystarczająco długa, Jimmy stoi.
źródło
EXCEL,
9471 bajtów.VBA (Excel), 87 bajtówA1
= Jimmy,A2
= platforma-23 bajty. Dziękuję @Wernisch.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
źródło
trim
zamiastlen(replace
?/// ,
85 9387 bajtówWypróbuj online!
Wyjście to 1, jeśli Jimmy jest bezpieczny. W przeciwnym razie nic nie wyprowadza. (Unary 1 i 0.) Ponieważ nie ma innego sposobu na wejście w ///, musi być na stałe zakodowany:
Na przykład:
( Wypróbuj online! )
Zwróć uwagę na miejsce po
<INPUT HERE>
.Wyjaśnienie:
UWAGA! Nie można uruchomić kodu wyjaśniającego z powodu komentarzy. Komentarze są ujęte w nawiasy klamrowe. Również oryginalny kod używa golfa, w którym
//
jest zastąpiony~
. Ten kod został pominięty w objaśnieniu.///
sztuczki golfowej.źródło
R , 35 bajtów
Wypróbuj online!
Na podstawie doskonałej odpowiedzi na galaretkę @ EriktheOutgolfer, więc proszę też głosować za nią!
Dane wejściowe to macierz 2-d znaków.
źródło
Haskell, 59 bajtów
Wypróbuj online!
Funkcja nazywa się tak:
f "/o\\ " " -- "
Jak to działa (dla
f "/o\\" " -"
):b++cycle" "
- Dodaje nieskończoną liczbę spacji po,b
aby zapewnić, że Jimmy zawsze jest powyżej a-
lub(
" -"
→" - ..."
zip a$b++cycle" "
- Zipuje dwa ciągi razem ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- Dla każdej pary na spakowanej liście[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Generuje listę1
s, której długość jest liczbą par spełniających warunki:elem p"/o\\"
- Postać w górnym szeregu jest jedną z części ciała Jimmy'ego. (Zadowolony przez wszystkie trzy pary w tym przykładzie)q==' '
- Znak w dolnym ciągu jest spacją. (Zadowolony przez('/', ' ')
i('\\', ' ')
)Tak więc para musi być tą, w której jedna z części ciała Jimmy'ego znajduje się nad przestrzenią.
Ponieważ w tym przykładzie dwie pary spełniają oba warunki, lista jest następująca
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Weź sumę tych1
liczb (tj. Długość listy), która w tym przykładzie jest2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Sprawdź, czy liczba części ciała nad przestrzenią jest mniejsza niż 2. W tym przykładzie tak nie jest, więc Jimmy spadnie. :(źródło
C (gcc) , 73 bajty
Wypróbuj online!
źródło
index()
zamiaststrchr()
Kotlin, 60 bajtów
Wyjaśnienie:
źródło
/// , 57 bajtów
Wypróbuj online!
Dołącz dane wejściowe na końcu programu, aby uruchomić. Zwraca pusty ciąg, jeśli Jimmy spadnie z platformy, w przeciwnym razie ciąg wykrzykników.
/|/\/\//
zastępuje|
z//
, co sprawia, że kod zarówno krótsze i bardziej czytelne (|
służy do wytyczą każdej wymianie)/\/o\\/J| J/J*/
zamienia Jimmy'egoJ
na zwięzłość i zmienia przestrzeń po lewej stronie na*
na prawo od niego/* /| -/ | //
anuluje*
si z odstępem po lewej stronie platformy. Jeśli pozostały dwa lub więcej miejsc, Jimmy spada w lewo, a platforma jest usuwana. Ta część usuwa również wszelkie białe spacje po prawej stronie platformy./*-/|--/!/
anuluje*
si z długością platformy. Jeśli pozostały co najmniej dwa-
, Jimmy nie spada w prawo, więc są zastępowane przez!
./-/|*/|J//
usuwa każdą pozostałą postać, która nie jest!
źródło
Japt , 8 bajtów
Spróbuj
źródło
Retina 0.8.2 , 16 bajtów
Wypróbuj online! Link zawiera pakiet testowy. Wyjaśnienie:
Chociaż w pierwszym wierszu nadal znajduje się spacja, a oba wiersze mają więcej niż jeden znak, usuń spację i pierwszy znak następnego wiersza. Uwaga: Zakłada się, że po Jimmieym nie ma końcowej spacji. Potrzebny jest +1 bajt, jeśli trzeba dopuścić końcowe miejsce.
Sprawdź, czy pod Jimmy są co najmniej dwa elementy platformy.
źródło
Perl 5
-pl
, 42 bajtówWypróbuj online!
źródło
Ruby 2.5.3, 44 bajty
Dane wejściowe są traktowane jako dwie tablice. Zdecydowanie nie jest to najbardziej przyjazne podejście do gry w golfa (patrz odpowiedź GB), ale podoba mi się każda wymówka, aby skorzystać z tej
zip
funkcji.źródło
PowerShell ,
63..5553 bajty-1 bajt dzięki mazzy
Wypróbuj online!
Pobiera dane wejściowe jako dwa wiersze.
Rozwinięty:
źródło
C # (interaktywny kompilator Visual C #) ,
444039 bajtów-4 bajty dzięki Jo Kingowi
Wypróbuj online!
źródło
Python 3.7 ,
7156 bajtówBardzo prosta wersja i najkrótsza, jaką mogłem pomyśleć o zastosowaniu tego podejścia. Dane wejściowe
s
to lista dwóch ciągów, pierwszy dla wiersza Jimmy'ego, drugi dla platformy. Zapakuj znaki, które znajdują się nad sobą, a następnie sprawdź, czy-
znajduje się poniżej części Jimmy'ego w co najmniej dwóch przypadkach.EDYCJA: Zmniejszona o kilka bajtów dzięki Blue!
źródło
s
powinny to być dwie listy, jedna dla Jimmy i jedna dla platformy?). Ponadto istnieje kilka miejsc, w których można zapisać bajty: zamiast sumowania listy można zsumować nieprzetworzony iterator (usunąć nawiasy kwadratowe); zamiast sprawdzania>=2
sprawdź>1
; możesz zsumowaćTrue
iFalse
polubić 1 i 0, bez potrzeby if-else. Na koniec, zanim opublikujesz nową odpowiedź w tym samym języku, powinieneś spojrzeć na poprzednie, aby sprawdzić, czy możesz poprawić.Chevron,
8487 bajtówTo całkiem nowy język mojego autorstwa - interpreter prototypów, dokumentacja i przykładowe programy można znaleźć na stronie https://github.com/superloach/chevron .
Wyjaśnienie:
>^__>^j
- weź Jimmy'ego jako wejście TXT^i<<0
- zainicjować indeks na 0^i<<^i+1
- wskaźnik przyrostu^h<^i>^j
- uzyskaj charakter Jimmy na indeksie->+2??^h=/
- wyskocz z pętli na lewą nogę Jimmy'ego->-3
- wskocz z powrotem na początek pętli>^__>^p
- weź platformę jako wejście TXT^q<^i|2>^p
- wytnij 3 znaki pod Jimmy->+2??^q<--
- jeśli 2 kreski pod Jimmy, przeskocz do prawdziwego wyjścia><0
- wyjście falsy><1
- prawdziwe wyjścieźródło
C (gcc), 103 bajty
Wypróbuj online!
Byłby znacznie krótszy ( 75 bajtów ), gdyby można było założyć, że po platformie występują końcowe białe znaki.
źródło
Japt
-¡
, 9 bajtów-1 bajt, jeśli dane wejściowe można odwrócić.
Wypróbuj online
źródło
V , 18 bajtów
Wypróbuj online!
Wyjście białych znaków tylko wtedy, gdy Jimmy Fall platformy. Wypisuj coś innego niż białe znaki, jeśli Jimmy pozostaje na platformie.
źródło