Podczas gdy próbowałem (i nie udawało mi się) przekonać mojego małego syna do zjedzenia obiadu, próbowałem mu śpiewać. W połowie tej piosenki zdałem sobie sprawę, że ta formuła może się dobrze przydać do gry w golfa!
Zadanie polega na napisaniu programu lub funkcji, która nie przyjmuje danych wejściowych i generuje następujący tekst:
There's a hole in the bottom of the sea
There's a hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
Zasady konkursu:
- Tekst można wydrukować lub zwrócić jako wynik funkcji
- Każdy werset jest oddzielony pojedynczą pustą linią
- Końcowe białe znaki są OK, o ile nie zmieniają układu (więc nie ma wiodących białych znaków ani dodatkowych spacji między słowami)
- Znaki końcowe również są w porządku.
- Brak wiodących nowych linii.
- Wszystkie języki są mile widziane, a to jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach dla każdego języka!
gzip -5
kompresuje go do 186 bajtów (bzip2
ixz
wydaje się, że gorzej).Odpowiedzi:
SOGL ,
1039493 bajtyWypróbuj tutaj!
źródło
Stax ,
908775 bajtówUruchom i debuguj
Rozpakowane, niepolowane i skomentowane to wygląda tak.
Uruchom ten
źródło
Perl 5,
158154 bajtów154 bajty
158 bajtów
źródło
There's a bottom of the sea
. Fakty sprawdź, +1There's a sea
ale jest dłuższaPython 2 ,
202190187185183182181 bajtówWypróbuj online!
Stare alternatywy dla
'io'['g'in s]
(13 bajtów):'oi'[s[5]<'n']
'io'[len(s)>30]
,'ioo'[len(s)%3]
,'ooi'[len(s)%4]
, i'io'[w[1]=='o']
Zapisano:
źródło
"hole, t%shole\n"%a[1:]
zapisuje bajt'oi'[s[5]<'n']
będzie również starą alternatywą: gościnnie'io'['g'in s]
!C (gcc) ,
261246236 bajtów-15 bajtów, dzięki Daniel Schepler
-10 bajtów, dzięki pułapkowi cat
Wypróbuj online!
źródło
,*b="_TH<0$\31\r"
zamiast tego napisać ?05AB1E ,
1031009997969392 bajtyOszczędność bajtu dzięki Kevinowi Cruijssenowi
Wypróbuj online!
Wyjaśnienie
“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v
uruchamia pętlę na liście["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]
. Słowa są kompresowane przy użyciu słownika 05AB1E.Na każdym z nich wykonujemy:
źródło
õ
, ponieważ najwyraźniej domyślnie wyświetla pusty ciąg, gdys
używany jest wap bez stosu na stosie . Nie mogłem znaleźć nic innego do gry w golfa; bardzo ładna odpowiedź!PowerShell ,
194188185180174 bajtówWypróbuj online!
Wydaje się, że nie można złapać Pythona ...Zasadniczo ustawia kilka wspólnych ciągi
$h
,$a
,$z
, i$b
, a następnie przechodzi pętlą przez każdy z elementów (hole
,log
...flea
,smile
), każda iteracja wyprowadzania odpowiedni werset. W!$j++
środku jest trochę logiki, aby wyjaśnić, co się dzieje z przełącznikiemin
/on
. W przeciwnym razie wszystkie ciągi zostaną po prostu w potoku, a ustawienie domyślneWrite-Output
daje nam nowe wiersze za darmo.-6 bajtów dzięki Arnauldowi.
-3 bajty dzięki mazzy.
-5 bajtów dzięki Veskah.
-6 bajtów dzięki mazzy.
źródło
-split
dość często używam słów.JavaScript (ES6),
201 194 189 188187 bajtówZaoszczędzono 1 bajt dzięki @Shaggy
Wypróbuj online!
JavaScript (ES6), 235 bajtów
Po prostu RegPack'ed .
Wypróbuj online!
źródło
Bash,
168160 bajtów160 bajtów
168 bajtów
Przetłumaczone z mojej innej odpowiedzi w Perlu.
źródło
Japt
-Rx
,126116113112111109107 bajtówOkazuje się, że gra w golfa wyzwaniem kompresji struny podczas gdy w telefonie jest pijak, jest niezwykle trudna - kto by pomyślał ?!
Sprawdź to
źródło
XML,
719673603514493486 bajtówMożesz go „wykonać” za pomocą
xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>
.Byłoby to o wiele łatwiejsze, gdyby XML nie był tak szczegółowy, ale z drugiej strony jest to mniej niż 25% wielkości oryginalnego tekstu.
źródło
Siatkówka 0.8.2 , 150 bajtów
Wypróbuj online! Wyjaśnienie:
Wstaw ostatni wiersz.
Oblicz wszystkie wersety.
Ułóż wiersze we właściwej kolejności.
Uzupełnij każdy wiersz i dodaj refren.
Rozwiń niektóre symbole zastępcze.
źródło
R ,
237231 bajtówWypróbuj online!
źródło
PHP,
180178 bajtówUruchom
-nr
lub wypróbuj online .Daje ostrzeżenia w PHP 7.2; Aby to naprawić, umieścić w cudzysłowie
elementów tablicy
io
,hole
a dwa samodzielneT
.źródło
C (gcc) ,
334328307299 bajtówWypróbuj online!
źródło
Perl 6 , 166 bajtów
Wypróbuj online!
źródło
Japt
-R
, 142 bajtyWypróbuj online!
źródło
Partia, 267 bajtów
t
zawiera ciąg powtórzony w refrenie,s
zawiera większość wiersza wiersza, a jednocześnier
wybiera pomiędzyin the
ion the
. We wersetacht
potrzeba tylko pierwszych 11 znaków , podczas gdy w pierwszej linii refrenu druga kopiat
maT
małą literę, a druga linia refrenu używa ostatnich 25 znakóws
.źródło
Rubinowy ,
173170 bajtówWypróbuj online!
źródło
Haskell ,
243215 bajtówZmniejszony do 215 bajtów z wielką pomocą nich
Wypróbuj online!
(Stara wersja 243 bajtów jest tutaj ).
Całkiem proste rozwiązanie.
źródło
s
tylko raz, więc możesz to wstawić. b) zawsze poprzedzić i dołączyć cośt
, dzięki czemu można zrobić to funkcja (infix)t#u=t:"here's a "++u
. c) budowy dużego listę w funkcjil
zemap(++" on the ")(words"smile flea ..."
jest krótszy. Ponadto: przenieś wszystko dołączone do tej listy do samej listy. d) lista liczb do upuszczenia biegnie teraz od8
zera do0
(liczby jednocyfrowe!) e) teraz wstawianiei
również zapisuje niektóre bajty. f) nie trzeba podawać nazwy głównej funkcji. Zgodnie z naszą metą wartości Haskella są uważane za prawidłowe funkcje, więc upuśćv=
.>>=
(concatMap) z listy monada iconcat
funkcji inlinel
. Wypróbuj online!JavaScript (węzeł Babel) , 239 bajtów
-7 bajtów od @Oliver
*.*
Wypróbuj online!
źródło
T
w trzeciej linii każdego wersetu powinien być pisany małymi literami.Python 3 ,
213 206 198193 bajtówWypróbuj online!
-15 bajtów dzięki @Sara
-5 bajtów dzięki @ ASCII-only
Prawdopodobnie trochę bardziej golfowy, ale niewiele.
źródło
o=e=
wywarłoby obao
ie
dotyczyłoby tego samego przedmiotu. Myślałem również, że podział będzie dłuższy.o
ie
nie odnoszą się do tego samego obiektu ... tylko że ciągi są niezmienne w Pythonie tak rzeczy, jak+=
utworzy nową kopię zamiast mutacji istniejącegoCzysty , 267 bajtów
Wypróbuj online!
źródło
cQuents ,
238219 bajtówWypróbuj online!
To wyzwanie sprawiło, że w końcu wdrożyłem listy i ciągi znaków w moim języku. Ten język jest zbudowany dla sekwencji całkowitych, więc całkiem nieźle!
Wyjaśnienie
źródło
Perl 5 , 194 bajtów
@ Tylko ASCII ogolił 6 bajtów dosłownie znakami nowej linii i
\l
sztuczką, o której zapomniałemWypróbuj online!
źródło
\l
wcześniej, ale nigdy nie miałem powodu, aby z niego korzystać, więc nigdy o tym nie myślałem.Węgiel drzewny ,
115106 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisałem 9 bajtów, kopiując mój kod partii dla ostatniego wiersza refrenu. Wyjaśnienie:
Zapisz ciąg
There's a hole
, który jest używany dwa razy tak, jak jest, trzeci raz małymi literami, a także czwarty raz, ale tylko pierwsze 10 znaków.Podziel ciąg
bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile o
nax
s.Zapętlaj 9 wierszy, biorąc pierwsze
i+2
elementy tablicy, odwracając je, łącząc jen the
i poprzedzającThere's a
wynikiem.Rozwiń każdą linię na wiersz, powielając ją i konstruując refren. Każdy wiersz wersetu jest następnie domyślnie drukowany na każdej własnej linii, a każdy wiersz jest domyślnie oddzielony pustą linią.
źródło
V ,
184170 bajtówWypróbuj online!
Wyjaśnienie:
4iThere's a hole in the bottom of the sea<\n><esc>
Wstaw „Tam” dziurę w dnie morza 4 razy.kk
Przejdź do trzeciej liniiy5w
skopiuj „Jest dziura”5eá,
wstaw przecinek po „Jest dziura”lp
wklej po przecinkuD
usuń resztę wiersza5brt
mała litera druga T.Hj4yy
skopiuj 4 linie z drugiej liniiGp
Wklej wszystko po pierwszej linii4w8ion the <esc>
(na końcu pierwszego wiersza) przejdź do pierwszej „dziury” w drugim wierszu i wstaw „” na „8 razy”2briilog <esc>
przejdź do ostatniego „on”, zamień o na i, a następnie wstaw „log”3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc>
Przejdź do tyłu przez linię, wstawiając odpowiednie słowa między każdym „na”7ñ4yykp4wd3wñ
wykonać4yykp4wd3w
7 razy4yykp
zduplikuj werset przed tym4wd3w
przejdź do pierwszego słowa po „Jest dziura” i usuń 3 słowa8ñÄ5jñ
zduplikuj pierwszy wiersz każdego wersetu po pierwszym (jest ich 8 do zrobienia)źródło
/// , 216 bajtów
Wypróbuj online!
Tego rodzaju zadanie jest jedyną rzeczą, w której /// jest dość dobry. : D Hej, wynik jest krótszy niż C, C # lub Java!
Dane wyjściowe z tego programu kończą się dwoma podziałami linii końcowej; mam nadzieję, że to nie jest przełom.
W każdym razie nie ma tu żadnej sprytności. Po prostu zidentyfikowałem powtarzające się ciągi i zdefiniowałem dla nich jednoznakowe skróty i powtarzałem, dopóki nie zobaczyłem więcej powtarzających się ciągów. Zrobiłem to w sposób mniej lub bardziej naiwny i chciwy. Celowo zdefiniowałem jednak skrót „uśmiech na pchły na ... morzu”, a następnie „pchła w locie na ... morzu” i tak dalej, aby utworzyć łańcuch skrótów . Rezultat jest taki, że cała sekwencja nowych rzeczowników jest wyraźnie widoczna w kodzie i uważam to za całkiem przyjemne. :)
Po zastąpieniu V i U mamy następujący, bardziej czytelny kod:
źródło
LaTeX, 265
268znakówkompiluje się w fajny plik PDF z wcięciami akapitów i wszystkim innym.
Nie golfił i skomentował:
Produkcji:
źródło
C # (interaktywny kompilator Visual C #) , 220 bajtów
Wypróbuj online!
-5 bajtów dzięki @ASCIIOnly i -2 bajtów dzięki @someone!
Mam małe dziecko i zapewniam, że ta piosenka jest w równym stopniu chwytliwa i denerwująca.
źródło
.Any()
->!=""
?in
wforeach
> _>