Wszyscy prawdopodobnie znają następującą piosenkę , która jest rundą muzyczną :
tło
Mniej osób może sobie przypomnieć, jak próbowała śpiewać czteroosobową wersję tego utworu z kilkoma przyjaciółmi i nie udało się. Przesunięcie tekstu piosenki o różnych harmonijnych tonach znane jest jako śpiewanie „rundy” i właśnie tutaj jesteśmy tutaj, aby przeprowadzać symulację za pomocą wyjścia statycznego. Oto przykład kogoś, kto faktycznie wykonuje utwór (link do audio / wideo, będzie miał dźwięk) .
Wyzwanie
Wyzwanie polega na wyświetleniu tekstu w następujący sposób:
Row, row, row your boat, |-----------------------------------|-----------------------------------|-----------------------------------
Gently down the stream. |Row, row, row your boat, |-----------------------------------|-----------------------------------
Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat, |-----------------------------------
Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat,
-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream.
-----------------------------------|-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,
-----------------------------------|-----------------------------------|-----------------------------------|Life is but a dream.
Zasady
- Końcowe białe znaki są dopuszczalne, ale nie są wymagane, w tym znaki nowej linii.
- Łączniki i słupki są częścią wymaganej wydajności, tak.
- Wymagane są przecinki, kropki, wielkie litery i wszystkie elementy składniowe związane z gramatyką.
To jest golf golfowy , zwycięzca otrzymuje kod o najniższej liczbie bajtów bez użycia standardowych luk.
code-golf
kolmogorov-complexity
Urna Magicznej Ośmiornicy
źródło
źródło
Odpowiedzi:
05AB1E ,
8077 bajtówWypróbuj online!
Praca w toku.
źródło
ª
? Bez względu na zdanie, genialne.vy
może byćʒ
zapisanie bajtu.V ,
139, 128 bajtówJednowarstwowy! (sortof: P)
Wypróbuj online!
Hexdump:
Czy dostaję punkty bonusowe za lądowanie dokładnie na
2^7
?Wymyślenie tego zajęło trochę czasu. Mam nadzieję, że mogę grać w golfa jak moja odpowiedź ASCII na klawiaturze, ale nie jestem pewien. Zobaczymy. Są to bardzo podobne wyzwania (i oba bardzo zabawne: D)
Początkowo próbowałem tego (180):
Wypróbuj online!
Który wstawia to:
a następnie dokonuje substytucji, aby ją rozwinąć. Ale budowanie go w stylu ascii-art jest znacznie krótsze (i bardziej zabawne TBH)
źródło
0^(2^7)
punkty bonusowe za lądowanie na2^7
haha. Ciekawe pierwsze przemyślenie na temat wersji 180.Partia,
292288275 bajtówEdycja: Zapisano 13 bajtów, przepisując kod, aby użyć wersji podciągu, której użyłem w odpowiedzi Retina. Dogodnie mogę zapętlić sześć razy, a następnie wpaść na siódmą iterację korpusu pętli, co oznacza, że cytowanie potrzebne do wyjścia
|
s nie staje się zbyt uciążliwe, jednak muszę uważać, aby wziąć^
pod uwagę s przy wyborze podłańcucha .źródło
Python 3,
252235208206205 bajtówDobrze dobrze. Oto mniej nudna odpowiedź:
Stara odpowiedź, 252 bajty:
Nudna odpowiedź, a druga odpowiedź w języku Python jest krótsza, ale pomyślałem, że spróbuję, jeśli to podejście jest krótsze. Python 3 pomimo oszczędności w ciąg bajtów / 2-3 różnicy, ponieważ oba
gzip
ibase64
są shittier w Pythonie 2.źródło
PowerShell ,
224207202 bajtówWypróbuj online! (wynik jest zawijany, jeśli ekran nie jest wystarczająco szeroki)
Żałoba, ta generacja tablic jest brzydka, ale zaoszczędziła 17 bajtów, więc ...
Pętli od
0
do6
. Każdej iteracji indeksujemy do tablicy(0,1,2,3,4,4,4)
. Indeksowanie opiera się na bieżącej cyfrze, bieżącej cyfrze+6
, tamtej-1
, a następnie tamtej-1
. Każdy z nich jest następnie zasilany przez pętlę, w której modulujemy%7
. Na przykład, jeśli jesteśmy w0
zewnętrznej0..6
pętli, to byłyby to0,6,5,4
, więc każda%7
, więc0,6,5,4
. To jest indeksowane do(0,1,2,3,4,4,4)
tablicy, więc wynik jest0,4,4,4
. Do danych wejściowych1
otrzymujemy1,7,6,5
wtedy,1,0,6,5
która daje1,0,4,4
. I tak dalej. (byłoby znacznie łatwiej, gdybyśmy mieli.clamp
funkcję)Są to jednorazowe splunięcia w pętlę
|%{}
. Każdej iteracji indeksujemy do odpowiedniego miejsca w tablicy piosenek-tekstów i zostawiamy ten ciąg w kolejce. Te ciągi są następnie-join
edytowane razem w|
celu sformatowania linii wyjściowej. Te ciągi są pozostawione w potoku, a dane wyjściowe są niejawne.Oszczędność niektórych bajtów dzięki Value Ink.
źródło
$a
zapisałeś już 11 spacji, możesz zmienić czwartą linię na$a
plus 4 spacje zamiast$(' '*15)
na -3 bajty, tak?JavaScript (ES8),
285256240231229217214213211210 bajtówZaoszczędził kilka bajtów, pożyczając sztuczkę z odpowiedzi Arnaulda
Spróbuj
źródło
'0444,1044,2104,3210,4321,4432,4443'.split
,.map
oszczędza Ci 10 bajtów. PonadtopadEnd
nie jest częścią ES6, a nawet ES7.PHP, 191 bajtów
Wypróbuj online!
Rozszerzony
źródło
Python 2 , 199 bajtów
Wypróbuj online!
Dzięki @mathjunkie za zapisanie 14 bajtów
źródło
'Merrily, merrily, merrily, merrily,'
może mieć('merrily, '*4).capitalize()
rację? Czy to nie jest Python?'Merrily,'+' merrily,'*3
CJam ,
128122 bajtówWypróbuj online!
Wyjaśnienie
źródło
SOGL , 83 bajty
Pierwsza część
┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘
to skompresowany ciąg znaków, w wyniku czegoSą to linie odwrócone (ponieważ drukuje się je linia po linii), z częścią „wesoło” wyciętą do zastąpienia w programie.
Reszta programu:
źródło
/// , 200 bajtów
Wypróbuj online!
Prosty, wykorzystuje typowe zdarzenia jako zamienniki.
źródło
PHP, 179 bajtów:
bez golfa
źródło
JavaScript (ECMAScript 2017),
191187182 bajtówZaoszczędź 3 bajty dzięki Shaggy
źródło
'Merrily,'+' merrily,'.repeat(3)
oszczędza bajt.padEnd
nie ma go w ES7, nie mówiąc już o ES6.M${s='errily, '}m${s}m${s}m
zamiastM${s='errily,'} m${s} m${s} m
oszczędzać 2 bajty"Merrily,"+(s=" merrily,")+s+s
.Serwer Microsoft Sql, 421 bajtów
Sprawdź to online
źródło
C (GCC),
231230 bajtów-1 bajt dzięki pułapkowi cat!
Całkiem proste. Najpierw buduje tablicę ciągów 7 linii, część za pomocą makra, aby rozdzielić część „wesoło”, a następnie linie myślników są wypełniane znakiem
memset
. Następnie linie są drukowane z odpowiednim przesunięciem i separatorami.Wypróbuj online!
źródło
MATLAB, 280 bajtów
Indeksowanie macierzy komórek jest dość kosztowne, co wydaje się najłatwiejszym miejscem do odrzucenia niektórych bajtów (jeśli to możliwe).
źródło
Siatkówka ,
153150 bajtówWypróbuj online!
Próbowałem kodowania w
$1$*$2
sposób ciągły, ale nie robię tego, co chcę, a powtarzanie ciągów okazało się zbyt trudne. Edycja: Zapisano 2 bajty, kodującerrily,
i 1 bajt, usuwając niepotrzebne^
.źródło
Python 2, 225 bajtów
Wypróbuj online!
źródło
Perl 5 , 215 bajtów
Wypróbuj online!
źródło
Szybki ,
416406405380372307 bajtówMożesz spróbować tutaj .
Dzięki @Mr. Xcoder dla oszczędności 65 bajtów!
źródło
f
następującym:var f=String.init(repeating:count:)
co oszczędza tonę bajtów: 30print(o())
, powinieneś po prostu zadzwonić,o()
ponieważ masz wprint
środku instrukcję, która daje()
na końcu wynikuT-SQL,
296 277276 bajtówPrzerwania linii na początku są częścią oryginalnego ciągu, przerwy linii pod koniec służą wyłącznie do celów wyświetlania i nie są liczone do sumy bajtów.
Zainspirowany głównie odpowiedzią Conrade SparklePony . Inna technika niż odpowiedź SQL Andrei Odegov .
Całkiem prosta wymiana wielu elementów, ale kilka rzeczy, które pomagają zaoszczędzić bajty:
Gdybym tylko mógł
REPLACE
wszystkieREPLACE
z czymś krótszym. Hmm ....źródło
Japt
-R
,99959492908987 bajtówSpróbuj
źródło
Rubin, 162 bajty
źródło
Java, 295 bajtów /
272259 bajtówz nowymi wierszami co 4 kolumny (295b)
Wypróbuj online
brak wersji nowej linii (259b):
Wypróbuj online
źródło
Japt ,
158157 bajtówWypróbuj online!
źródło
Stax , 63 bajty
Uruchom i debuguj
źródło
Perl 5 , 163 bajtów
Wypróbuj online!
źródło
Runiczne Zaklęcia , 292 bajty
Wypróbuj online!
Zasadniczo nie wykonuję wyzwań związanych ze złożonością Kołmogorowa , ale układ był taki, z którym mogłem pracować bez większych problemów. Runiczna nie ma dobrych sposobów na kompresowanie dowolnych ciągów, więc wszystko, z czym musimy pracować, to powtarzalne części.
Wyjaśnienie:
Lekko dekompresujący:
Pierwsze 5 wierszy działa jako funkcje do budowania każdej części utworu (gdzie pierwszy wiersz generuje 35
-
dla odstępu przy użyciu wartości dziesiętnej w#
celu zaoszczędzenia 2 bajtów ponad3X5+
). Instrukcja return znajduje się na początku wiersza, aby upewnić się, że wszystkie adresy IP, które wchodzą do funkcji, opuszczą również tę funkcję po tej samej liczbie cykli, aby uniknąć scalenia adresów IP (co powoduje brak linii wyników), ponieważ programy są prostokątnymi i pustymi komórkami są niejawne.Następne cztery wiersze odpowiadają za wydruk pierwszych czterech wierszy wydruku
Piąty wiersz wypisuje następnie 3 ostatnie wiersze wyniku. Ze względu na to, że wszystkie trzy linie muszą zaczynać się od co najmniej jednej zwrotki zwrotki zwrotnej, nie jest możliwe użycie 3 oddzielnych adresów IP (ponieważ potrzebowałyby one opóźnień, aby uniknąć scalenia).
>
,y
,@
, A koszt nowej linii więcej bajtów (4) niż0[...]
(3 bajty), gdzie...
jest arbitralne instrukcje (np. Inny wiersz wyjścia).Natomiast zamiana
>
i@
używanie pojedynczego adresu IP wymaga więcej bajtów.Wreszcie, połączenie wszystkich pięciu linii punktu wejścia do drugiej linii pozwala zaoszczędzić 5 bajtów nowych linii. Musimy tylko upewnić się, że instrukcja
B͍
ranch-return przesuwa się najpierw na koniec linii, zachowując funkcjonalność funkcji.źródło