To pierwszy z serii, drugi to Dwie drogi rozbieżne w żółtym lesie (część 2)
Wyzwanie to inspirowane jest słynnym wierszem Roberta Frosta „Droga nie podjęta”:
Dwie drogi rozchodziły się w żółtym lesie.
I przepraszam, że nie mogłem podróżować obaj
I być jednym podróżnikiem, długo stałem
I patrzyłem w dół jak najdalej,
do miejsca, gdzie zgięło się w zaroślach;Potem wziął drugą, równie sprawiedliwą,
i może mieć lepsze roszczenie,
ponieważ była trawiasta i chciała się nosić;
Chociaż z tego powodu przejazd tam
nosił je tak samo,I oboje tego ranka po równo leżeli w
liściach, żaden krok nie był zdeptany na czarno.
Och, zatrzymałem pierwszy na kolejny dzień!
Jednak wiedząc, jak droga prowadzi do drogi,
wątpiłem, czy kiedykolwiek wrócę.Będę opowiadać z westchnieniem
Gdzieś wieki i wieki stąd:
Dwie drogi rozchyliły się w lesie, a ja -
wziąłem tę mniej uczęszczaną,
i to zrobiło różnicę.
Zauważ przedostatniej linii I took the one less traveled by,
.
Twoje rzeczywiste wyzwanie
Weźmiesz dane w formie:
# ##
# ##
# ##
#
#
#
i musisz znaleźć cieńszą drogę.
Droga zaczyna się na dole od #
. Pozostałe 2 drogi, które zawsze kończą się w najwyższym rzędzie, to drogi, które musisz zbadać. Droga, która jest najgrubsza, jest najczęściej podróżowana i dlatego nie jest tym, czego chcesz. Drugi jest najmniej podróżowany i jest tym, którego chcesz.
Wynik
Twój program / funkcja musi wypisać jedną z 2 odrębnych wartości (np. 0 lub 1, prawda lub fałsz), po jednej dla każdej możliwej pozycji drogi, która nie została zajęta. Na przykład możesz podać 0, jeśli droga nie została wybrana po lewej stronie drogi, a 1 w przeciwnym razie, lub możesz wpisać ciąg „w lewo” lub „w prawo”, prawda, fałsz itp.
Przypadki testowe:
## #
## #
###
#
#
#
Może wyjść „w prawo”.
## #
## #
###
##
#
#
#
Może wyjść „w prawo”.
## #
## #
###
##
#
#
#
Może wyjść „w prawo”.
## #
## #
###
#
#
#
#
Może wyjść „w prawo”.
# ##
# ##
###
#
#
#
#
Może wyjść „w lewo”
# ##
# ##
###
#
#
#
#
Może wyjść „w lewo”
Notatki
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach
- Standardowe luki zabronione
- Musisz określić swoje wyniki dla „lewej” i „prawej” i muszą być one odrębne
- Dane wejściowe będą miały jeden duży ciąg i mogą zawierać dowolną liczbę wierszy
- Nie musisz się martwić o prawidłowe dane wejściowe.
- Droga ma zawsze kształt litery Y, więc wystarczy spojrzeć na górę.
- Jakieś pytania? Komentarz poniżej:
Najniższa liczba bajtów wygrywa!
źródło
Odpowiedzi:
CJam , 1 bajt
r
puts Pierwszy ciąg sąsiadujących znaków non-białych ze standardowego wejścia na stosie, więc to drukuje##
na lewo i#
na prawo .Wypróbuj online!
źródło
JavaScript (ES6),
1912 bajtówEdytować:
Bardziej golfowa wersja to
Zwraca
#
w prawo i miejsce w lewo.Oryginalny:
Wyjaśnienie
Nie golfowany :
Pierwszą rzeczą, którą wykonuje ta funkcja, jest usunięcie białych znaków na początku i na końcu danych wejściowych. Oznacza to, że pierwszą postacią jest zawsze
#
. Następnie sprawdzam drugi znak (JavaScript zaczyna się od 0) i sprawdzam, czy jest to#
znak. Zwraca wartość logiczną. Jeśli ścieżka będzie,right
to będzietrue
, jeśli zostanie, wrócifalse
.Jak to grałem w golfa
W ES6 istnieje anonimowa funkcja skrócona nazywana funkcją strzałki . Oznacza to, że mogę przejąć funkcję otoki i zmienić ją w:
Ze względu na reguły funkcji strzałek zwróci resztę kodu. Stamtąd konwertowane
charAt(1)
do[1]
ponieważ jest to krótsza droga, chociaż nie zaleca . Potem wziąłem===
i zamieniłem w==
. Chociaż w tym przypadku są różne , nie ma to znaczenia. Wreszcie, przemianowanyinput
naa
i usunięte wszystkie spacje.Wyjście w prawo i w lewo
Chociaż łamigłówka tak naprawdę nie potrzebuje programu do wyświetlania w prawo i w lewo, oto przykład innych wyników:
Jedyną dodaną częścią jest
?'right':'left'
. Tworzy to trójskładnikowy operator , skondensowaną instrukcję if, co oznacza, że (niestosowny) kod jest równy *:Przykład
źródło
Pyth, 2 bajty
Wyjścia
#
dla lewej i##
prawej.Wypróbuj online
Wyjaśnienie
źródło
Acc !!, 30 bajtów
Ze względu na sposób Acc !! pobiera dane wejściowe, daje dane wyjściowe po wprowadzeniu tylko jednego wiersza danych wejściowych. Ale jeśli wpiszesz wejście do pliku lub przekierujesz go z pliku, nie powinieneś zauważyć różnicy.
Pobiera dane wejściowe ze standardowego wejścia. Wywołuje,
jeśli droga po lewej jest mniej przejechana lub
#
jeśli droga po prawej jest mniej przejechana. Wypróbuj online!Wyjaśnienie
N
odczytuje wartość ASCII znaku ze standardowego wejścia za każdym razem, gdy się do niego odwołuje. Pętli, podczas gdy35-N
jest prawdą; to jest, podczas gdy35-N != 0
lubN != 35
. Dlatego po wyjściu z pętli właśnie przeczytaliśmy pierwszy#
znak w linii. Następny znak jest następnie odczytywany za pomocąN
i zapisywany z powrotem na standardowe wyjście za pomocąWrite
.źródło
Siatkówka, 5 bajtów
Wyprowadza,
1
jeśli prawo,0
jeśli lewo.Wypróbuj online
Jeśli wartości dla wyniku pozytywnego nie musiały być odrębne (5 bajtów):
Zwraca dodatnią liczbę całkowitą, jeśli jest w prawo, a zero, jeśli jest w lewo.
Wypróbuj online
źródło
Język formuły IBM / Lotus Notes,
373526 bajtówEdytuj Zawsze zapominam, że
@Like
z symbolami wieloznacznymi jest o 2 bajty tańsze niż@Contains
.Edycja 2 Właściwie nie potrzebuje tego,
@if
ponieważ po prostu drukuje1
lub w0
zależności od tego, czy formuła daje wyniki,@True
czy też@False
.Obliczona formuła pola. Po prostu weź wszystko na lewo od pierwszego
##
znalezionego w polu,a
a jeśli jest#
w nim wyjście1
dla lewej, w przeciwnym razie wyjście0
dla prawej.Dzięki @DavidArchibald, oto rozwiązanie dla 22 bajtów. Z szacunku dla rozwiązania Davidsa nie podam go jako mojej głównej odpowiedzi.
Ten wychodzi
1
na prawo i0
na lewo.źródło
Pip ,
86 bajtówPobiera dane wejściowe jako argument wiersza polecenia (który będzie wymagał cytowania i zmiany znaczenia nowych wierszy, gdy zostanie uruchomiony z rzeczywistego wiersza polecenia). Wywoływane,
#
jeśli droga po lewej jest mniej przejechana, a##
droga po prawej jest mniej przejechana. Wypróbuj online!Wyjaśnienie
Wykorzystuje to ostatnio dodany operator wyrażenia regularnego Pip.
Proste rozwiązanie wyrażenia regularnego (port odpowiedzi Retina mbomb007 ) ma 9 bajtów:
źródło
a
aq
i zamiast tego uzyskać dane wejściowe ze standardowego wejścia.Chip , 7 bajtów
Wypróbuj online!
Wyjścia
0x0
dla lewej i0x1
prawej. (TIO zawiera flagę,-v
dzięki czemu można zobaczyć wartości binarne w stderr. Aby zobaczyć wynik w ASCII,e*f
można dołączyć na końcu pierwszego wiersza.)Chip działa na pojedynczych bitach w strumieniu bajtów, co w rzeczywistości czyni go całkiem dobrym w tym konkretnym problemie.
A
jest najmniej znaczącym bitem bajtu wejściowego, a „#” jest jedynym znakiem wejściowym, dla którego ten bit jest ustawiony. Kiedy ten bit jest pierwszy raz napotkany, osiągnęliśmy pierwsze „#” pierwszego wiersza.Z
opóźnia ten sygnał o jeden cykl, abyśmy teraz patrzyli na następną postać.t
jest teraz aktywowany, co oznacza zakończenie wykonywania po zakończeniu tego cyklu. Nie musimy patrzeć dalej niż szerokość pierwszej drogi.~S
pomija moc wyjściową dla wszystkich cykli oprócz ostatniego. Gdyby tego tu nie było, otrzymywalibyśmy dane wyjściowe w każdym cyklu.a
podaje aktualną wartość swoich sąsiadów (tylkoA
w tym przypadku) na najmniej znaczący bit bajtu wyjściowego.Wszystko to oznacza, że otrzymujemy „
0x1
jeśli” po pierwszym „#” bezpośrednio następuje kolejne „#”, i w0x0
przeciwnym razie.źródło
C, 35 bajtów
Taki sam pomysł, jak odpowiedź PragmaticProgrammer : znajdź pierwszą
#
i wypisz to, co nastąpi po niej -#
dla „właściwej” i<space>
dla „lewej”.C (luka), 16 bajtów
Według przypadków testowych wygląda na to, że lewa droga zawsze ma dokładnie jedno pole od lewego marginesu. Więc...
źródło
Partia, 46 bajtów
Odczytuje jeden wiersz ze STDIN, dzieli go na spacje i drukuje pierwsze słowo, więc wypisuje
#
dla lewej i##
prawej. Jeśli tablica cytowanych parametrów wiersza polecenia jest dopuszczalna, to dla 36 bajtów:Cytuje pierwszy argument, aby został podzielony na spacje i wypisał pierwsze słowo.
źródło
Python 2, 21 bajtów
Wypróbuj online
Wyjście
#
dla lewej i##
prawej stronyźródło
Siatkówka , 5 bajtów
Wypróbuj online!
Alternatywne rozwiązanie 5-bajtowe. Drukuje
#
dla lewej i##
prawej strony. Chodzi o to, aby dopasować wszystkie przebiegi#
s (#+
) i print (!
) tylko do pierwszego z nich (1
).źródło
Haskell, 21 bajtów
lub w stylu bez punktów:
„#” oznacza w prawo, a „” oznacza w lewo
Funkcja po prostu przyjmuje ciąg znaków, upuszcza spacje początkowe, a następnie przyjmuje drugi znak (spacja, jeśli lewa strona jest chuda, a #, jeśli lewa jest gruba)
EDYCJA: Oszczędź trzy bajty dzięki Laikoni i nimi!
źródło
(!!2).dropWhile(' '==)
wystarczy jako odpowiedź.!!1
dla drugiego elementu. Możesz skrócić test do<'!'
. W wersji pointfree, można zastąpićdropWhile
przezsnd.span
.Brainfuck, 32 bajty
Nie golfowany:
Wydruki
#
dla prawej ilewej strony.
Wypróbuj online!
źródło
Perl 5 , 8 + 1 = 9 bajtów
Wypróbuj online!
Biegnij z
-a
(1 bajtowa kara).Dane wyjściowe to (gdzie nazwa pliku jest nazwą pliku skryptu), jeśli lewa droga jest mniej uczęszczana lub jeśli prawa droga jest mniej uczęszczana.
# at filename line 1, <> line 1
## at filename line 1, <> line 1
Wyjaśnienie
-a
Opcja automatycznie odczytuje dane wejściowe i dzieli go na kolumny wokół spacji, ignorując wiodącą spacje. Jako taki potrzebujemy pierwszego układu danych wejściowych; To$F[0]
. To także umieszcza program w niejawnej pętli, której nie chcemy. Jednak użyciedie
pozwala na wyjście łańcucha i wyjście z niejawnej pętli w tym samym czasie (i przy nie większej liczbie znaków niżsay
w zwykłym sposobie drukowania łańcucha).źródło
C 54 bajtów
C ++ 58 bajtów
Ponieważ OP określił, może to być „program / funkcja” Wybrałem, aby napisać funkcję zapisywania znaków. Jednak nadal uwzględniam instrukcję „#include” i towarzyszący jej podział wiersza w liczbie znaków, ponieważ są one wymagane do kompilacji funkcji.
Wynik
Zwraca znak spacji
" "
wskazujący na lewo lub skrót"#"
wskazujący prawy.Wyjaśnienie
Funkcja strchr () prowadzi dany ciąg znaków i zwraca wskaźnik do pierwszego wystąpienia określonego znaku. Ma przeciążenie, które akceptuje liczbę całkowitą jako drugi argument w przeciwieństwie do znaku, który oszczędza mi 1 znak. Np. „#” Można zastąpić 35. Następnie dodaję jeden do wskaźnika zwróconego z funkcji, aby uzyskać znak zaraz po nim, i odznaczam go, a następnie zwracam wynikowy znak.
Uwaga
Chciałbym również skorzystać z okazji, aby formalnie wyrazić irytację podczas automatycznego formatowania kodu w programie Visual Studio podczas gry w golfa (╯ ° □ °) ╯︵ ┻━┻.
Edycja: Podziękowania dla Raya za wskazanie pewnych różnic w C i C ++ i gdzie mogłem zapisać znaki <3.
źródło
#include <string.h>\n
zchar*strchr();
zaoszczędzisz 6 bajtów, a jednocześnie jest całkowicie legalne. (A jeśli wolisz C ++ z jakiegokolwiek powodu, można zastąpić#include <string.h>
z#include <cstring>
zaoszczędzisz 1 bajt).JavaScript (ES6), 37 bajtów
Wyjaśnienie:
p
jest funkcją, która zwracatrue
jeśli droga, po której mniej się porusza, znajduje się po lewej stronie, a fałsz w przeciwnym razie. To jest moja pierwsza odpowiedź na tej stronie, więc prawdopodobnie mogłaby być bardziej golfa (może regex.)Działa, biorąc górną linię danych wejściowych i sprawdzając, czy pasuje do wyrażenia regularnego
/^ *#( |$)/
(początek łańcucha, dowolna liczba spacji, # oraz spacja lub koniec łańcucha).Ma to na celu wyjaśnienie ludziom formatu i generowanie pomysłów. Jestem pewien, że można go dalej pokonać i grać w golfa. Miłej gry w golfa!
źródło
[^#]
Japt , 3 bajty
(2 bajty dla
-g1
flagi) Wyjścia#
dla prawej i spacja dla lewej. Na podstawie odpowiedzi JavaScript autorstwa Davida Archibalda.Wypróbuj online!
źródło
Excel, 17 bajtów
Zakłada wejście w komórce
A1
.Zwraca
##
dla prawej i#
(#
i spacji) dla lewej.źródło
Dyvil , 12 bajtów
Wyjaśnienie:
Stosowanie:
Zwraca
(białe znaki) dla lewej i
#
prawej.źródło
Java 7,
16666635243 bajtyWyjścia
35
dla prawej i32
lewej strony.Na podstawie @Clashsoft „s Dyvil odpowiedź .
Wyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
Wynik:
źródło
Befunge 98, 11 bajtów
Wypróbuj online!
Drukuje
32
dla lewej i35
prawej strony, zarówno z jedną spacją końcową.Wyjaśnienie
Jedną sztuczką, której użyłem, było postawienie
-!jv
pierwszej, mimo że nic nie zrobiła. Pozwoliło mi to zarówno pozbyć się miejsca po'
i zaoszczędzić trochę wypełnienia. W tym ostatnim kod byłbyna 15 bajtów.
źródło
Ruby, 20 bajtów
Zwraca true dla lewej, false dla prawej.
źródło