Oto (dość przerażająca) piosenka Five little ducks (nie jest długa):
Five little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only four little ducks came back.
Four little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only three little ducks came back.
Three little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only two little ducks came back.
Two little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only one little duck came back.
One little duck went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but none of the little ducks came back.
Mother duck herself went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
and all of the little ducks came back.
Twoim zadaniem nie jest wydanie tej piosenki. Powinieneś wziąć werset i wypisać następny werset (następny werset ostatniego wersetu to pierwszy werset).
Zasady
- Poproszę o brak standardowych luk.
- Wejścia / wyjścia będą pobierane za pomocą naszych standardowych metod wejścia / wyjścia.
- Dokładny wiersz musi być wyprowadzany, i nie powinno być żadnych różnic w porównaniu do tekstów piosenek. Dane wejściowe nie będą się różnić w porównaniu z tekstami piosenek.
Przykłady
Mother duck herself went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
and all of the little ducks came back.
Spodziewany:
Five little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only four little ducks came back.
Three little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only two little ducks came back.
Spodziewany:
Two little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only one little duck came back.
Odpowiedzi:
Stax ,
115111 bajtówUruchom i debuguj
Wszystkie wiersze jako przypadki testowe
źródło
JavaScript (ES9), 227 bajtów
Jest to podobne do poniższej wersji Węzła, ale wykorzystuje formułę opartą na
parseInt()
zamiastBuffer()
do identyfikacji wersetu wejściowego.To jest ES2018 (alias ES9), ponieważ używamy wyrażenia regularnego z
/s
flagą ( dotAll ).Wypróbuj online!
W jaki sposób?
W tej wersji analizujemy cały wiersz wejściowy jako bazę 30 (
0
dot
) i wykonujemy bitowe AND z 7. Parsowanie zatrzymuje się na pierwszym nieprawidłowym znaku, co prowadzi do:JavaScript (Node.js) ,
233 231227 bajtówZaoszczędzono 2 bajty dzięki @Shaggy
Wypróbuj online!
W jaki sposób?
Trzeci znak każdego wiersza wejściowego może być użyty jako unikalny identyfikator. Biorąc jego kod ASCII modulo 9, otrzymujemy:
Wersety wyjściowe są kodowane za pomocą następujących szablonów:
Gdzie każdą cyfrę zastępuje się ciągiem zgodnie z następującą tabelą:
Gdy wyrażenie regularne
/ w.*\n/s
wyodrębnia tę wspólną część z danych wejściowych:W końcu dodajemy ostatnie 11 znaków wejścia, czyli
" came back."
.źródło
exec
kiedy strona została ponownie załadowana. Świetne umysły ... !Python 3 ,
267 263254 bajtów4 bajty zapisane dzięki @ovs
Wypróbuj online!
Działa poprzez zastąpienie odpowiednich części odpowiednimi częściami następnego wersetu.
Po wstępnej inicjalizacji
T
jest['8', '9', 'and all of the little ducks', 'One little duck', 'but none of the little ducks', 'Two little ducks', 'but only one little duck', 'Three little ducks', 'but only two little ducks', 'Four little ducks', 'but only three little ducks', 'Five little ducks', 'but only four little ducks', 'Mother duck herself']
.Alternatywny Python 2 , 252 bajty
przez @ovs
Wypróbuj online!
źródło
for a in zip(T,T[-2:]+T):s=s.replace(*a)
dla 264 bajtów.lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)
do 262 bajtów w Pythonie 2.T[2:]
zamiastT[-2:]
QuadR ,
257242 bajtów-14 dzięki Black Owl Kai, -1 dzięki Kevin Cruijssen
Wypróbuj online!
źródło
Java 10, 347 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
T-SQL,
407 390 388382 bajtówVARCHAR(MAX)
Po kilku zapisanych bajtach
REPLACE
s wykonuje następujące czynności jako dynamiczny SQL:Używa
CASE
instrukcji iSTUFF
poleceń do wstawiania / zastępowania znaków w wymienionych pozycjach.EDYCJE :
LEFT
zamiastSUBSTRING
i eliminując spacjęCHAR
i przenosząc dodatkową literę na drugąREPLACE
(dzięki, @CDC!)Oto moja pierwsza wersja, wykorzystująca inną metodę (po wymianie, sformatowana):
STRING_SPLIT
iPARSENAME
służą do dzielenia łańcucha na wiersze i kolumny przez-
i.
separatory.Pierwsza kolumna jest kluczowym znakiem, który jest porównywany z trzecią literą wiersza wejściowego (dzięki za pomysł, @ Night2). Drugi i trzeci to zastąpienia dokonywane dla tego wersetu.
źródło
Python 2 , 1034 bajty
To jest mój kod! Wykorzystuje prosty słownik. Po uruchomieniu tego kodu możesz wprowadzić dowolny wiersz, a wyświetli on następny wiersz.
PS: Jestem nowy na tym kanale i to jest mój pierwszy post. Naprawdę podobało mi się to wyzwanie, więc postanowiłem spróbować. Prosimy o poprawienie mnie.
źródło
x
Luba
) 2) Python jest dość liberalny z białymi spacjami, więc spróbowałbym również usunąć trochę twojej białej spacji. Na przykład nie potrzebujesz spacji w pobliżu=
. Wreszcie mamy stronę do gry w golfa w pythonie, którą możesz odwiedzić, aby ulepszyć swoją grę.sys
, np.raw_input()
Skracając klawisz słownika itp. Zdecydowanie powinieneś wyjąć powtarzające się sekcje piosenki i dodać je osobnoPHP (7.4),
253247 bajtów-6 bajtów poprzez ulepszenie budowy tablicy zamienników dzięki dodatkowej pomocy z „Rozpakowywania wewnątrz tablic”.
Wypróbuj online!
To tworzy tablicę każdego możliwego zamiennika (12 używanych + 2 nieużywane) w
key=>value
formacie. Przykład:['Mother duck herself' => 'Five little ducks', etc...]
a następnie po prostu zastępuje te, które używają strtr .Jedyną interesującą rzeczą jest moje pierwsze użycie „Rozpakowywanie wewnątrz tablic”, które jest nową funkcją w PHP 7.4.
PHP , 264 bajty
Wypróbuj online!
W tablicy zapisałem różne słowa każdego wersetu. Odnajduję, który wiersz używa trzeciego znaku wejścia, ponieważ jest on unikalny (
vuroet
). Następnie po prostu zastępuję różne słowa tego wersetu innymi słowami następnego wersetu.źródło
Czysty , 352 bajtów
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 262 bajty
Wypróbuj online!
źródło
PowerShell ,
356343340336 bajtówWypróbuj online .
Bardziej czytelna wersja:
źródło
PowerShell ,
265263255251246 bajtówWypróbuj online!
Użyłem brutalnej siły, by znaleźć wyraz
+"$args"[2]*37%724%7
.Dzięki @Arnauld za
3rd char
.źródło
Japt v2.0a0, 143 bajty
Próbowałem zakodować pojedynczy werset z zamiennikami, ale ostatecznie dostosowanie rozwiązania Arnaulda okazało się krótsze. Mam inny pomysł, który, mam nadzieję, może się powtórzyć krócej, ale nie wiem, kiedy go wypróbuję.
Spróbuj - zawiera wszystkie wiersze
źródło
Bash ,
373355 bajtówNie ma tu nic szalonego. Łatwą redukcją kilku bajtów byłoby zastąpienie zmiennych dwuznakowych (a1, a2, a3, e1..e6) zmiennymi jednoznakowymi.
Wypróbuj online!
Wypróbuj online!źródło
05AB1E , 134 bajty
Wypróbuj online!
Ponieważ jestem stosunkowo nowy w 05AB1E, to może być dużo golfa
źródło
Perl 6 , 247 bajtów
Wypróbuj online!
Zdecydowanie do gry w golfa, zwłaszcza ostatnie 5 elementów na liście w formularzu
"num $l num-1"
lub wyrażenie regularne pasujące do właściwych części starego wejścia.źródło
Węgiel drzewny , 156 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Spójrz na trzeci znak pierwszego wiersza, aby ustalić, którego wersu chcemy.
Wyjście pierwsza część pierwszej linii przez indeksowanie do listy ciągów
Five
,Four
,Three
,Two
,One
,Mother duck herself
. Następnie wydrukujlittle duck
i,s
stosownie do przypadku, a następnie ostatnie 18 znaków wiersza wprowadzania (które są zawsze takie same w każdym wierszu).Dwie środkowe linie są zawsze takie same na każdym wersecie.
W ostatnim wierszu okazuje się, że golfistą jest z jakiegoś powodu dołączenie
little ducks
do listy alternatyw, ale ostatnie 11 znaków jest nadal kopiowanych z wejścia.źródło
atrament , 353 bajty
Wypróbuj online!
Po pierwsze, zastosowania podciąg kontrole, aby dowiedzieć się, co jesteśmy w wers - to dość łatwe dzięki kapitalizacji numerów na początku -
F
,T
iO
nie występują w innych miejscach, a można wyróżnić drugi i czwarty werset z pierwszy i trzeci, również sprawdzając odpowiednioFi
iTh
.Następnie robimy to, co atrament najlepiej, i drukujemy zwykły tekst z tekstem warunkowym. Na początku próbowałem użyć instrukcji switch, ale chociaż wyglądało to ładniej, tak naprawdę zakończyło się to dłużej.
Można by pomyśleć, że
Quack
s byłoby dobrym miejscem do używania zmiennych, co przy ciągach powtarzanych jako pęczek, ale zmienne mają wystarczająco dużo narzutów, że za każdym razem, gdy próbowałem to zrobić, kod był dłuższy. Może to znak, że nie powinienem grać w atrament.źródło