Kolejne wyzwanie Jimmy'ego przez jego pierwotnego ojca. Zobacz inne piękne wyzwania .
Jak wszyscy wiecie, ostatnio widzimy wyzwania związane z Jimmy'm na platformach. Jimmy jest akrobatą, jak wspomniałem wcześniej, i ma inne sztuczki w rękawie.
Jedną z tych sztuczek jest zawieszenie na linach. Oto przykład liny, z której Jimmy mógłby powiesić:
||
||
||
||
||
||
Kiedy Jimmy wisi na linie, wygląda to tak:
||
||
/o\
||
||
||
Może powiesić po lewej lub prawej stronie liny, więc to:
||
||
||
/o\
||
||
jest również ważny. Ale nie może zawiesić tylko jednej części ciała, więc coś takiego:
||
||
||
/o\|
||
||
jest nieważny. Zwróć uwagę, że gdy wisi na jednej części ciała, druga połowa liny jest widoczna, ponieważ Jimmy tego nie zakrywa.
Jimmy nie lubi też wisieć na dnie liny - to go przeraża - więc to:
||
||
||
||
||
/o\
jest nieważny.
Wyzwanie
Weź udział w sytuacji Jimmy'ego, jak te powyżej, i wypowiedz, czy Jimmy zawiesi się na linie, czy nie, używając wartości prawdziwej lub fałszywej.
Specyfika
Napisz program, który pobiera dane wejściowe. Może to nastąpić przez funkcję lub dowolną inną odpowiednią metodę wprowadzania.
- Wkładem powinna być scena jednego Jimmy'ego i liny, jak na przykładzie powyżej.
Program powinien wypisać na konsolę prawdziwą lub fałszywą wartość na podstawie tego, czy Jimmy może zawiesić się na linie, czy też spadnie z niej odpowiednio.
Kryteria, które Jimmy może zawiesić na linie:
Dwie jego części ciała są na linie.
Nie ma go na dnie liny.
Nie unosi się w powietrzu.
Możesz założyć, że lina będzie prosta, złożona z
||
segmentów i będzie dłuższa niż jedna postać wysokości.Możesz założyć jedną całą linę i jednego osobliwego Jimmy'ego na twojej scenie, nie więcej i nie mniej.
Możesz założyć, że na dole liny nie będzie żadnych nowych linii.
Przed liną i po niej musisz pokryć dowolną liczbę wiodących lub tylnych miejsc.
Przypadki testowe
||
||
|| TRUTHY
/o\
||
||
||
||
/o\| FALSY
||
||
||
/o\ TRUTHY
||
||
/o\ FALSY
/o\
|| TRUTHY
||
||
/o\ || FALSY
||
||
Punktacja
To jest golf golfowy , więc najniższy wynik w bajtach wygrywa po około tygodniu.
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 @ozewski on Github. --> <iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=187759" 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:
Japt , 5 bajtów
Myślę, że to prawda; Pracuję od 16 godzin bez przerwy i ledwo znam swoje imię, więc nie byłbym zaskoczony, gdyby tak nie było!
Spróbuj
źródło
Python 2 lub 3 ,
3330 bajtów-3 dzięki Maxwell
Nienazwana funkcja akceptująca listę linii
Wypróbuj online!
W jaki sposób?
Jimmy musi ukryć odcinek liny, który nie jest dolny.
źródło
lambda l:'o'in map(max,l[:-1])
Python 2, 28 bajtów
Wypróbuj online!
Jak to działa? Pobiera dane wejściowe jako listę ciągów, a zip dołącza do ciągu. Jimmy pozostaje na linie, jeśli jest „|” poniżej „o”, więc ten kod łączy wszystkie wiersze i sprawdza, czy występuje „o”, a po nim „|”.
Kod z adnotacjami:
(Stara odpowiedź) Python 2 lub 3, 39 bajtów
Funkcja, która przyjmuje dane wejściowe jako listę ciągów, przy czym każdy ciąg jest inną linią.
-11 bajtów dzięki xnor! -2 bajty dzięki Jonathanowi Allanowi!
Wypróbuj online! (Jeśli chcesz wypróbować więcej przypadków testowych, po prostu wstaw „.” Po każdym zestawie wierszy w polu wprowadzania.)
Jak to działa? Cóż, jeśli Jimmy jest w pełni na linie, to na tej linii nie będzie żadnych „|” postacie. Dlatego możemy sprawdzić każdą linię i jeśli znajdziemy ją bez „|” postaci, to wiemy, że Jimmy może pozostać na linie. Jimmy nie może jednak utrzymać się na dnie liny; dlatego nie uwzględniamy ostatniej linii w naszym czeku. Jeśli ostatnia linia jest tylko kolejną częścią liny, to nie będzie miało znaczenia, ponieważ nadal znajdziemy prawidłowy rząd wyżej, ale jeśli ostatnią linią jest ta z Jimmy, to nie znajdzie linii bez „|” gdziekolwiek, i zwróci False.
źródło
lambda x:1-all("|"in i for i in x[:-1])
Galaretka ,
9 76 bajtówMonadyczny link akceptujący listę linii
Wypróbuj online!
W jaki sposób?
Jimmy musi ukryć odcinek liny, który nie jest dolny.
źródło
Note that all other characters are [less than '|']
”?Brud , 5 bajtów
Wypróbuj online!
Właściwe narzędzie do pracy.
źródło
pieprzenie mózgu,
7964 bajtówWypróbuj online!
Wysyła bajt 0x01 dla prawdy i nic dla fałszu.
źródło
Stax , 6 bajtów
Uruchom i debuguj
Transponuje dane wejściowe, a następnie wyszukuje „o |”.
źródło
05AB1E , 5 bajtów
Wypróbuj online!
Jedynymi znakami, które mogą pojawić się na wejściu, są
\o/ |
odpowiednie punkty kodowe 92, 111, 47, 32, 124 (nie ma znaków nowej linii, ponieważ wybraliśmy wejście jako tablicę linii). Możliwe wyniki przez modulowanie dwóch z tych liczb to 0, 13, 15, 17, 19, 28, 30, 32, 45, 47, 92, 111. 111 jest największym z nich, a także jedynym, który kończy się na 1 , więc kod wyświetli prawdę, jeśli i tylko jeśli 111 jest na liście (tylko 1 jest prawdą w 05AB1E). 111 to 111 (o
)% 124 (|
), a więc występuje tylko wtedy, gdy na wejściu jest wartośćo
powyżej a|
.źródło
APL (Dyalog Unicode) , 8 bajtów SBCS
Anonimowa funkcja ukrytego przedrostka, przyjmująca jako argument macierz znaków.
Wypróbuj online!
⍉
transponować'o|'⍷
o
natychmiast pojawia się maska dla każdego|
1∊
czy ktoś jest jego członkiem?źródło
Dyalog APL Extended,
1413119 bajtówWypróbuj online!
źródło
3∊¯1+/⍤↓<
JavaScript,
3933 bajtówDzięki @Daniil Tutubalin za grę w golfa z 2 bajtów
To pasuje do każdej linii, która nie jest linią, na której pokazuje się jego lewe ramię i żadna z lin nie pokazuje.
Wypróbuj online!
źródło
/^ *.o. *\n/
?/// ,
5350 bajtówWypróbuj online!
Ponieważ nie ma innego sposobu na wejście w ///, jest on zakodowany na stałe:
Wyjaśnienie:
Ogólne podejście polega na zastąpieniu Jimmy'ego jedną jednostką, a następnie usunięciu go ze wszystkich sytuacji, w których grozi mu niebezpieczeństwo. Jeśli przeżyje, zostanie wyrzucony. Jeśli nie, to nic nie jest. W
~
kodzie są zamienniki//
, które umożliwiają skrócenie kodu o 3 bajty. Pominięto je w objaśnieniu.Wypróbuj online!
źródło
Ruby 2.5.5, 22 bajty
Oczekuje tablicy linii. Wymaga co najmniej wersji 2.5.5, ponieważ właśnie wtedy
Array#all?(pattern)
został dodany.Ze względu na ograniczenia, że wejście zawsze będzie prawidłową sceną Jimmy'ego i liny, sprowadza się do tego, czy którakolwiek z linii przed ostatnią linią ma zaciemnioną linę.
źródło
Kotlin ,
9384 bajtówWypróbuj online!
źródło
JavaScript,
3837 bajtówWypróbuj online!
źródło
Siatkówka , 9 bajtów
Wypróbuj online!
Teraz nigdy wcześniej nie programowałem w Retinie, ale o ile wiem, to działa. Jest to wyrażenie regularne, które znajduje ciąg zawierający (1) początek danych wejściowych, (2) brak „|” znaki i (3) nowy wiersz.
Osoby bardziej zaznajomione z wyrażeniami regularnymi lub Retiną zachęcane są do oferowania sugestii. -2 bajty dzięki Neilowi!
źródło
\n
ponieważ nowa linia nie jest a,|
a więc i tak będzie pasować, a ostatnia^
wystarcza, aby upewnić się, że faktycznie dopasowałeś nową linię. 2) Użyj pilcrowa¶
zamiast\n
i usuń końcowe^
(ponieważ zawsze tak jest po nowej linii w trybie multilinii).Perl 5
-p
, 26 bajtówWypróbuj online!
źródło
Befunge-98 (PyFunge) ,
2624 bajtówWypróbuj online!
Wyjście z kodem powrotu 3, jeśli
\n
napotkano, a ostatni wiersz zawierał 3 znaki spacji, w przeciwnym razie wychodzi z kodem powrotu 0 na EOF. Opiera się więc na ostatnim wierszu niezawierającym nowej linii.Rozcięty
źródło
05AB1E (starsza wersja) , 6 bajtów
Port odpowiedzi Japt Shaggy'ego .
Wprowadź jako listę linii.
Wypróbuj online.
Wyjaśnienie:
źródło
Wiąz 0,19, 68 bajtów
Pobiera dane wejściowe jako listę linii. Pomijając ostatnią linię, sprawdza, czy nie ma
'|'
w niej żadnej linii - co oznacza, że lina jest w pełni pokryta przez Jimmy'ego.Zweryfikować wszystkie przypadki testowe tutaj .
źródło
PowerShell , 26 bajtów
Odpowiedź Portu Maxwella dla Retiny .
Wypróbuj online!
Wyjaśnienie:
true
gdyby:|
false
Inaczej.źródło
Pyth , 9 bajtów
Zestaw testowy!
źródło
Pyret, 79 bajtów
Oczekuje tablicy wierszy jako ciągów. Tworzy kopię, w
link(0,l)
której wszystkie rzędy przesunęły się o jeden. Przechodzi przez każdy wierszr
in
gdzie n jest rzędem poniżej r. Sprawdza, czy jeśli ciało Jimmy'ego"o"
jest w jakiejś pozycji, to w rzędzie pod nim znajduje się rura (tj. Jimmy wisi na linie i nie ma go na dole).źródło