Twoim zadaniem jest napisanie programu, który wydrukuje cztery wiersze wyodrębnione z tekstu piosenki The Beatles „Hey Jude” (© Sony / ATV Music Publishing LLC):
Hey Jude, don't make it bad\n
Take a sad song and make it better\n
Remember to let her into your heart\n
Then you can start to make it better\n
\n
Hey Jude, don't be afraid\n
You were made to go out and get her\n
The minute you let her under your skin\n
Then you begin to make it better\n
\n
Hey Jude, don't let me down\n
You have found her, now go and get her\n
Remember to let her into your heart\n
Then you can start to make it better\n
\n
Hey Jude, don't make it bad\n
Take a sad song and make it better\n
Remember to let her under your skin\n
Then you'll begin to make it\n
\n
ALE
Jedynym wejściem, którego możesz użyć do skonstruowania tych czterech wersetów, jest lista tokenów:
"Hey Jude, don't"
" make it bad"
" be afraid"
" let me down"
"Take a sad song and make it better"
"You"
" were made to go out"
" and get her"
" have found her, now go"
"Remember to"
"The minute you"
" let her"
" into your heart"
" under your skin"
"Then"
" you"
" can start"
"'ll"
" begin"
" to make it"
" better"
Zauważ, że niektóre tokeny mają spacje poprzedzone i że cytaty nie są ich częścią. Możesz użyć dowolnego formatu listy i zmienić kolejność tokenów.
Wygenerowany wynik musi dokładnie odpowiadać powyższym czterem wersetom. Zauważ, że \n
jest używany do nowych wierszy, a po każdym wersecie jest dodawana nowa linia . Możesz użyć tego pliku (MD5:), 4551829c84a370fc5e6eb1d5c854cbec
aby sprawdzić dane wyjściowe.
Możesz użyć następującego schematu kolei, aby zrozumieć strukturę wierszy (każdy element reprezentuje token):
Najkrótszy kod w bajtach wygrywa. Wesołego golfa.
źródło
Odpowiedzi:
Galaretka , 42 bajty
Wypróbuj online!
Wersja na stałe.
Wkład:
źródło
JavaScript (ES6), 108 bajtów
Wypróbuj online!
Wersja alternatywna, 114 bajtów
Nieco lepsza kompresja, ale niestety zrujnowana większym kodem dekompresyjnym.
Wypróbuj online!
źródło
m
flaga nie jest wymagana w przypadku literałów szablonów zawierających wiele wierszy. Ciekawy.Ruby +
-p
,177136120118115 115bajtów (pełny program)Wypróbuj online!
-41 bajtów: Przełącz z używania zmiennych na używanie znaków jako indeksów tablic
-16 bajtów: Przełącz na wygodniejszy format wejściowy
-1 bajt: nie potrzeba miejsca między
puts
i"abv...
-1 bajt: użyj
$/
globalnego zamiast?\n
literalnego-3 bajty: użyj
gsub(/./)
zamiast.chars.map
-6 bajtów: Dzwoń
-p
i używaj$_
. Dzięki, Pavel !Każdy znak w magicznym ciągu reprezentuje indeks w tablicy wejściowej.
Potrzebuję zmiennej,z
aby odczytać ze STDIN tylko raz.Mógłbym zaoszczędzić trochę na IO, pisząc lambda akceptując tablicę i zwracając ciąg znaków. Wymaga to
v
na końcu dodatkowego , ponieważ nie otrzymuje darmowej nowej linii-p
.Ruby ,
162110108105 bajtów (funkcja)Wypróbuj online!
źródło
String#unpack
na bycie krótszym niż.chars
z.ord-97
, ale może być jeden.-p
i$_
Java 8,
241233141140138 bajtówWyjaśnienie:
Wypróbuj online.
Zasadniczo konwertuje znaki ASCII
0
(48) doE
(69) na indeksy 0 indeksowane0
za21
pomocąi-48
.źródło
Python 3,
162147144142138127 127 bajtówWypróbuj online
Specjalne podziękowania dla user202729 i Pavel .
źródło
05AB1E ,
142686665 bajtówWypróbuj online!
-74 bajty dzięki EriktheOutgolfer, przy użyciu skompresowanego ciągu base-255.
-2 bajty poprzez odwrócenie skompresowanego łańcucha, aby uniknąć konieczności połączenia trzech zer
-1 bajt dzięki EriktheOutgolfer przełączając dwie pozycje w tablicy wejściowego w celu uniknięcia cyfrę 0, a tym samym zmniejsza odwrotnej R polecenie.
źródło
Retina 0.8.2 , 115 bajtów
Wypróbuj online! Pobiera dane wejściowe jako listę ciągów rozdzielanych znakiem nowej linii.
źródło
Stax ,
5958 bajtówUruchom i debuguj
Odpowiada to reprezentacji ascii tego samego programu.
`ORIpY$T&z{m6Y=>mR)_ .VQ)eN70e[:0yO8j$^RN[ Bp{IN/$|"3^;G#^&lv!`
jest skompresowanym literałem o wartości"CDBGBLNOBQRSVWBBCEBHIJBMNPBQRUVWBBCFBHKJBLNOBQRSVWBBCDBGBLNPBQRTUVBB"
. Znaki reprezentują indeksy w tabeli tokenów. Ten program dodaje kolejny token do reprezentowania nowej linii. Nie ma go na wejściu, ale jest dodawany podczas wykonywania. Reszta programu działa w ten sposób.źródło
Funkcja C (gcc), 139 bajtów
Wypróbuj online!
źródło
printf
wfor
Czerwony , 133 bajty
Wypróbuj online!
Nie golfił
t
jest blokiem z listą tokenówźródło
D , 166 bajtów
Wypróbuj online!
źródło
Mathematica, 102 bajty
Czysta funkcja. Pobiera listę ciągów jako dane wejściowe i zwraca ciąg jako dane wyjściowe. Po prostu koduje wszystkie indeksy tokenów, podobnie jak inne odpowiedzi.
źródło
Ruby , 97 bajtów
Wypróbuj online!
Zapisano kilka bajtów z innym podejściem do większości innych odpowiedzi.
Liczba możliwych tokenów w każdej linii jest następująca
Magiczny ciąg zawiera po jednym znaku w wierszu, co jest interpretowane jako mapa bitowa, z której można wydrukować do 7 dostępnych tokenów dla każdego z 16 wierszy utworu.
a[i%7-1+i%28/7*5]
przechodzi przez tokeny każdej linii, przesuwając o 5 dla każdej nowej linii, z przesunięciem o 1, aby uwzględnić fakt, że pierwsza linia ma tylko 4 tokeny.W przypadku linii 1-3 używane są tylko bity od 64 do 4 - nieużywanie bitów 2 i 1 pozwala uniknąć drukowania tokenów z następnej linii. dla linii 4 używane są wszystkie 7 bitów od 64 do 1.
źródło