Semua orang mungkin akrab dengan lagu berikut , yang merupakan babak musikal :
Latar Belakang
Lebih sedikit orang mungkin ingat mencoba menyanyikan versi 4-orang ini dengan beberapa teman dan gagal. Mengimbangi lirik lagu dengan nada harmonis yang berbeda dikenal sebagai menyanyikan "putaran" dan itulah yang akan kita simulasikan hari ini menggunakan output statis. Berikut adalah contoh seseorang yang benar-benar melakukan karya tersebut (tautan ke audio / video, akan bersuara) .
Tantangan
Tantangan ini adalah untuk menampilkan teks sebagai berikut persis seperti berikut:
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.
Aturan
- Trailing whitespace dapat diterima, tetapi tidak wajib, ini termasuk baris baru.
- Tanda hubung dan bilah adalah bagian dari output yang diperlukan, ya.
- Diperlukan koma, titik, huruf besar, dan semua elemen sintaksis terkait tata bahasa.
Ini adalah kode-golf , kode byte-hitung terendah tanpa menggunakan celah standar adalah pemenangnya.
code-golf
kolmogorov-complexity
Guci Gurita Ajaib
sumber
sumber
Jawaban:
05AB1E ,
8077 byteCobalah online!
Bekerja dalam proses.
sumber
ª
? Tidak masalah, kalimatnya tegas, brilian.vy
bisaʒ
untuk menyimpan byte.V ,
139, 128 byteSatu garis! (sortof: P)
Cobalah online!
Hexdump:
Apakah saya mendapatkan poin bonus untuk pendaratan tepat
2^7
?Butuh beberapa saat untuk mencari tahu. Saya berharap saya bisa bermain golf seperti jawaban seni ASCII keyboard saya, tapi saya tidak yakin. Kita lihat saja nanti. Mereka adalah tantangan yang sangat mirip (dan keduanya sangat menyenangkan: D)
Awalnya saya mencoba ini (180):
Cobalah online!
Yang menyisipkan ini:
dan kemudian melakukan substitusi untuk memperluasnya. Tetapi membangunnya sebagai seni- gaya jauh lebih pendek (dan TBH lebih menyenangkan)
sumber
0^(2^7)
poin bonus untuk pendaratan di2^7
haha. Pikiran pertama yang menarik meskipun pada versi 180.Batch,
292288275 byteSunting: Disimpan 13 byte dengan menulis ulang kode untuk menggunakan versi trik substring yang saya gunakan dalam jawaban Retina saya. Mudah saya dapat mengulang enam kali dan kemudian jatuh untuk iterasi ketujuh dari loop body, yang berarti kutipan yang diperlukan untuk output
|
tidak terlalu berat, namun saya harus berhati-hati untuk memperhitungkan nilai^
ketika memilih substring .sumber
Python 3,
252235208206205 byteBaiklah baiklah. Inilah jawaban yang tidak terlalu membosankan:
Jawaban lama, 252 byte:
Jawaban membosankan, dan jawaban Python lainnya lebih pendek, tapi saya pikir saya akan mencoba jika pendekatan ini lebih pendek. Python 3 meskipun penghematan dalam byte / string 2-3 perbedaan karena keduanya
gzip
danbase64
lebih shittier di Python 2.sumber
PowerShell ,
224207202 byteCobalah online! (output dibungkus jika layar Anda tidak cukup lebar)
Astaga, pembuatan array ini jelek, tetapi menghemat 17 byte, jadi ...
Kami beralih dari
0
ke6
. Setiap iterasi, kami mengindeks ke dalam array(0,1,2,3,4,4,4)
. Pengindeksan didasarkan pada digit saat ini+6
, digit saat ini , itu-1
, dan kemudian itu-1
. Masing-masing mereka kemudian makan melalui loop di mana kita modulo dengan%7
. Sebagai contoh, jika kita berada di loop0
luar0..6
, maka ini akan menjadi0,6,5,4
, maka masing-masing%7
, jadi0,6,5,4
. Itu diindeks ke dalam(0,1,2,3,4,4,4)
array, jadi hasilnya0,4,4,4
. Untuk input1
kita dapatkan1,7,6,5
kemudian1,0,6,5
yang menghasilkan1,0,4,4
. Dan seterusnya. (Hal-hal akan jauh lebih mudah jika kita memiliki.clamp
fungsi)Itu adalah meludah satu per satu menjadi satu lingkaran
|%{}
. Setiap iterasi, kami indeks ke tempat yang tepat di larik-lirik-lagu, dan meninggalkan string itu di pipeline. String-string tersebut kemudian-join
diedit bersama|
untuk memformat garis output. String-string tersebut ditinggalkan di jalur pipa dan hasilnya tersirat.Menyimpan beberapa byte berkat Value Ink.
sumber
$a
menyimpan hingga 11 spasi, Anda dapat mengubah baris keempat menjadi berakhir dengan$a
ditambah 4 spasi alih-alih$(' '*15)
dengan -3 byte, ya?JavaScript (ES8),
285256240231229217214213211210 byteMenyimpan beberapa byte dengan meminjam trik dari jawaban Arnauld
Cobalah
sumber
'0444,1044,2104,3210,4321,4432,4443'.split
,.map
menghemat 10 byte. Juga,padEnd
bukan bagian dari ES6, atau bahkan ES7.PHP, 191 Bytes
Cobalah online!
Diperluas
sumber
Python 2 , 199 byte
Cobalah online!
Terima kasih kepada @mathjunkie karena telah menghemat 14 byte
sumber
'Merrily, merrily, merrily, merrily,'
mungkin('merrily, '*4).capitalize()
benar? Atau bukankah itu Python?'Merrily,'+' merrily,'*3
CJam ,
128122 byteCobalah online!
Penjelasan
sumber
SOGL , 83 byte
Bagian 1
┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘
adalah string terkompresi yang menghasilkanIni adalah garis yang dibalik (karena ini mencetaknya baris demi baris), dengan bagian "riang" dipotong untuk diganti dalam program.
Sisa program:
sumber
/// , 200 byte
Cobalah online!
Sederhana, menggunakan kejadian umum sebagai pengganti.
sumber
PHP, 179 byte:
ungolfed
sumber
JavaScript (ECMAScript 2017),
191187182 byteDisimpan 3 byte berkat Shaggy
sumber
'Merrily,'+' merrily,'.repeat(3)
menghemat satu byte.padEnd
tidak ada dalam ES7, apalagi ES6.M${s='errily, '}m${s}m${s}m
bukannyaM${s='errily,'} m${s} m${s} m
menyimpan 2 byte"Merrily,"+(s=" merrily,")+s+s
.Microsoft Sql Server, 421 byte
Periksa secara Online
sumber
C (GCC),
231230 byte-1 byte berkat ceilingcat!
Cukup mudah. Pertama itu membangun 7 baris string array, bagian melalui makro untuk memfaktorkan keluar bagian "riang", maka garis-garis garis diisi dengan
memset
. Kemudian garis-garis dicetak dengan offset dan separator yang memadai.Cobalah online!
sumber
MATLAB, 280 byte
Pengindeksan array sel cukup mahal, yang sepertinya merupakan tempat termudah untuk membuang beberapa byte (jika mungkin).
sumber
Retina ,
153150 byteCobalah online!
Saya mencoba encoding sewenang-wenang sewenang-wenang tetapi
$1$*$2
tidak melakukan apa yang saya inginkan dan mengulangi string terbukti terlalu rumit. Sunting: Disimpan 2 byte dengan pengodeanerrily,
dan 1 byte dengan menghapus yang tidak perlu^
.sumber
Python 2, 225 Bytes
Cobalah online!
sumber
Perl 5 , 215 byte
Cobalah online!
sumber
Swift ,
416406405380372307 byteKamu bisa mencobanya sini .
Terima kasih untuk @Mr. Xcoder untuk menyelamatkan saya 65 byte!
sumber
f
sebagai berikutvar f=String.init(repeating:count:)
print(o())
, Anda hanya perlu menelepono()
karena Anda memilikiprint
pernyataan di dalamnya, yang memberikan()
pada akhir outputT-SQL,
296 277276 byteJeda baris di awal adalah bagian dari string asli, jeda baris di dekat akhir hanya untuk tujuan tampilan, dan tidak dihitung terhadap total byte.
Terinspirasi sebagian besar oleh jawaban Conrade SparklePony . Teknik yang berbeda dari jawaban SQL Andrei Odegov .
Multi-penggantian yang cukup mudah, tetapi beberapa hal yang membantu menghemat byte:
Kalau saja saya bisa
REPLACE
semuaREPLACE
dengan sesuatu yang lebih pendek. Hmm ....sumber
Japt
-R
,99959492908987 byteCobalah
sumber
Ruby, 162 byte
sumber
Java, 295 byte /
272259 bytedengan baris baru setiap 4 kolom (295b)
Cobalah secara Online
tidak ada versi baris baru (259b):
Cobalah secara Online
sumber
Japt ,
158157 byteCobalah online!
sumber
Stax , 63 byte
Jalankan dan debug itu
sumber
Perl 5 , 163 byte
Cobalah online!
sumber
Pesona Rise , 292 byte
Cobalah online!
Saya biasanya tidak melakukan tantangan kolmogorov-kompleksitas , tetapi tata letak adalah salah satu yang bisa saya kerjakan tanpa terlalu banyak kesulitan. Runic tidak memiliki cara yang baik untuk mengompresi string yang arbitrer, jadi yang harus kita kerjakan hanyalah bagian yang berulang.
Penjelasan:
Tanpa kompresi sedikit:
5 baris pertama berfungsi sebagai fungsi untuk membangun setiap bagian dari lagu (di mana baris pertama menghasilkan 35
-
untuk spacer menggunakan nilai desimal#
untuk menyimpan 2 byte lebih3X5+
). Instruksi pengembalian ada di awal baris untuk memastikan bahwa semua IP yang masuk fungsi juga akan pergi fungsi setelah jumlah siklus yang sama untuk menghindari penggabungan IP (menghasilkan garis output yang hilang), karena program adalah sel empat persegi dan kosong tersirat.Empat baris berikutnya bertanggung jawab untuk mencetak empat baris pertama dari output
Baris kelima kemudian mencetak 3 baris output terakhir. Karena ketiga baris perlu mulai dengan setidaknya satu stanza-spacer, tidak layak untuk menggunakan 3 IP terpisah (karena mereka akan membutuhkan penundaan untuk menghindari penggabungan).
>
,y
,@
, Dan biaya newline lebih byte (4) dari0[...]
(3 bytes) di mana...
merupakan petunjuk sewenang-wenang (yaitu. Baris lain dari output).Sebaliknya mengganti
>
dan@
menggunakan IP tunggal membutuhkan lebih banyak byte.Akhirnya, menggabungkan kelima garis titik masuk ke baris ke-2 menghemat baris baru sebesar 5 byte. Kita hanya harus memastikan bahwa
B͍
instruksi ranch-return bergerak ke akhir barisnya terlebih dahulu, menjaga fungsi fungsinya.sumber