Tugas Anda adalah menulis sebuah program yang mencetak empat ayat berikut diekstraksi dari lirik dari lagu 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
TAPI
Satu-satunya masukan yang Anda boleh gunakan untuk membangun empat ayat ini adalah daftar token ini:
"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"
Perhatikan bahwa beberapa token memiliki ruang yang didahului dan bahwa tanda kutip yang dilampirkan bukan bagian dari token. Anda bebas menggunakan format apa pun untuk daftar dan mengatur ulang urutan token.
Output yang Anda hasilkan harus sama persis dengan keempat ayat di atas. Catatan yang \n
digunakan untuk baris baru dan baris baru tambahan ditambahkan setelah setiap ayat. Anda dapat menggunakan file ini (MD5:) 4551829c84a370fc5e6eb1d5c854cbec
untuk memeriksa keluaran Anda.
Anda dapat menggunakan diagram kereta api berikut untuk memahami struktur ayat-ayat (setiap elemen mewakili token):
Kode terpendek dalam byte menang. Selamat bermain golf.
sumber
Jawaban:
Jelly , 42 byte
Cobalah online!
Versi hardcoding.
Memasukkan:
sumber
JavaScript (ES6), 108 byte
Cobalah online!
Versi alternatif, 114 byte
Kompresi yang sedikit lebih baik, tetapi sayangnya hancur oleh kode dekompresi yang lebih besar.
Cobalah online!
sumber
m
flag tidak diperlukan untuk literal templat multi-baris. Menarik.Ruby +
-p
,177136120118115109 byte (program penuh)Cobalah online!
-41 byte: Beralih dari menggunakan variabel ke menggunakan karakter sebagai indeks array
-16 byte: Beralih ke format input yang lebih nyaman
-1 byte: Tidak ada ruang yang dibutuhkan antara
puts
dan"abv...
-1 byte: Gunakan
$/
global alih-alih?\n
literal-3 byte: Gunakan
gsub(/./)
sebagai ganti.chars.map
-6 byte: Panggil dengan
-p
dan manfaatkan$_
. Pavel terima kasih !Setiap karakter dalam string ajaib mewakili indeks ke dalam array input.
Saya perlu variabelz
sehingga saya hanya membaca dari STDIN sekali.Saya bisa menghemat biaya dari IO dengan menulis lambda menerima array dan mengembalikan string. Ini membutuhkan ekstra
v
di akhir, karena tidak mendapatkan baris gratis dari-p
.Ruby ,
162110108105 byte (fungsi)Cobalah online!
sumber
String#unpack
untuk menjadi lebih pendek daripada.chars
dengan.ord-97
, tetapi mungkin ada satu.-p
dan$_
Java 8,
241233141140138 bytePenjelasan:
Cobalah online.
Itu pada dasarnya mengkonversi karakter ASCII
0
(48) melaluiE
(69) ke indeks diindeks 00
melalui21
dengani-48
.sumber
Python 3,
162147144142138127 byteCobalah secara Online
Terima kasih khusus kepada user202729 dan Pavel .
sumber
05AB1E ,
142686665 byteCobalah online!
-74 byte berkat EriktheOutgolfer, menggunakan string terkompresi base-255.
-2 byte dengan membalikkan string yang dikompresi untuk mencegah harus menggabungkan tiga 0
-1 byte berkat EriktheOutgolfer, dengan beralih dua item dalam array input untuk menghindari 0 terkemuka, dan dengan demikian menghilangkan Reverse R perintah.
sumber
Retina 0.8.2 , 115 byte
Cobalah online! Mengambil input sebagai daftar string yang dibatasi baris baru.
sumber
Stax ,
5958 byteJalankan dan debug itu
Representasi ascii yang sesuai dari program yang sama adalah ini.
`ORIpY$T&z{m6Y=>mR)_ .VQ)eN70e[:0yO8j$^RN[ Bp{IN/$|"3^;G#^&lv!`
adalah literal terkompresi dengan nilai"CDBGBLNOBQRSVWBBCEBHIJBMNPBQRUVWBBCFBHKJBLNOBQRSVWBBCDBGBLNPBQRTUVBB"
. Karakter mewakili indeks ke dalam tabel token. Program ini menambahkan token lain untuk mewakili baris baru. Itu tidak ada dalam input, tetapi ditambahkan selama eksekusi. Sisa dari program ini bekerja seperti ini.sumber
Fungsi C (gcc), 139 byte
Cobalah online!
sumber
printf
infor
Merah , 133 byte
Cobalah online!
Tidak disatukan
t
adalah blok dengan daftar tokensumber
D , 166 byte
Cobalah online!
sumber
Mathematica, 102 byte
Fungsi murni. Mengambil daftar string sebagai input dan mengembalikan string sebagai output. Cukup enkode semua indeks token, mirip dengan jawaban lainnya.
sumber
Ruby , 97 byte
Cobalah online!
Menyimpan beberapa byte dengan pendekatan berbeda untuk sebagian besar jawaban lainnya.
Jumlah kemungkinan token di setiap baris adalah sebagai berikut
String sihir berisi satu karakter per baris, yang ditafsirkan sebagai bitmap yang hingga 7 token yang tersedia harus dicetak untuk masing-masing dari 16 baris lagu.
a[i%7-1+i%28/7*5]
iterates melalui token setiap baris, bergeser 5 untuk setiap baris baru, dan dengan offset 1 untuk memperhitungkan fakta bahwa baris pertama hanya memiliki 4 token.Untuk baris 1-3, hanya bit 64 hingga 4 yang digunakan - tidak menggunakan bit 2 dan 1 yang menghindari token pencetakan dari baris berikutnya. untuk baris 4, semua 7 bit dari 64 hingga 1 digunakan.
sumber