Tulis sebuah program yang menghasilkan lirik hingga 99 Bottles of Beer, dalam sesedikit mungkin byte .
Lirik:
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.
96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.
95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.
....
3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer on the wall.
2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.
1 bottle of beer on the wall, 1 bottle of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
Aturan:
- Program Anda harus masuk ke STDOUT atau alternatif yang dapat diterima, atau dikembalikan dari fungsi (dengan atau tanpa baris baru).
- Program Anda harus merupakan program atau fungsi yang lengkap dan dapat dijalankan.
Bahasa yang ditulis khusus untuk mengirimkan jawaban 0-byte untuk tantangan ini diizinkan, hanya saja tidak terlalu menarik.
Perhatikan bahwa harus ada penerjemah agar pengajuan dapat diuji. Diperbolehkan (dan bahkan dianjurkan) untuk menulis sendiri penerjemah ini untuk bahasa yang sebelumnya tidak diterapkan.
- Ini berbeda dari output oleh HQ9 + atau 99. Setiap jawaban yang ditulis dalam bahasa ini akan dihapus.
Karena ini adalah tantangan katalog, ini bukan tentang menemukan bahasa dengan solusi terpendek untuk ini (ada beberapa program yang melakukan trik) - ini adalah tentang menemukan solusi terpendek dalam setiap bahasa. Karenanya, tidak ada jawaban yang akan ditandai sebagai diterima.
Katalog
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 64198; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 36670; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Jawaban:
C #,
285298289 Bytes(Upaya pertama saya di golf Kode ...)
Sedikit tidak ungolfed:
sumber
" bottle"
dengan argumen format meskipun saya yakin ada cara yang lebih baik, memiliki 3 contoh botol menyakiti mata saya ...b==1
dapat diganti denganb<2
.for(int b = 100; b--> 1;)
Kode Mesin Motorola MC14500B , 46612 byte
Untuk alasan panjang, saya tidak dapat memposting program di sini. Namun, ini dapat ditemukan di sini dalam heksadesimal , dan di sini dalam biner (diisi dengan
0
s).Ini adalah program terpendek yang mungkin dalam kode mesin Motorola MC14500B. Ini terdiri dari hanya
1000
dan1001
(8
dan9
, masing-masing); satu opcode untuk setiap bit output.Menggunakan 93.224 opcode setengah-byte, dan menampilkan lirik lagu satu per satu. Ini adalah satu-satunya metode output yang mungkin.
Bagi mereka yang tertarik, output menuju ke pin # 3 (dari 16), pin I / O.
Penjelasan
Daftar dimulai pada
0
.Kode Trivia
The heksadesimal adalah 93.224
8
s dan9
s panjang.The biner adalah 745.792
1
s dan0
s panjang.Saya menggunakan kode Python 2 di bawah ini untuk menghasilkan kode. Input
0
untuk biner dan1
heksadesimal.sumber
Vitsy, 0 Bytes
Serius tidak punya apa-apa pada saya. (@Mego, saya minta maaf.;))
Cobalah online! (Tekan saja "Lari")
sumber
Serius , 1 byte
Jika tumpukan kosong (yang pada awalnya),
N
tekan lirik. Kemudian mereka dicetak secara implisit di EOF.Terima kasih kepada @Mego karena telah memperbaiki juru bahasa Serius.
sumber
N
:)JavaScript ES6,
230218198196192188185 byteHanya memangkas beberapa byte sambil tetap membuatnya tampak bersih dan mudah dimengerti.
3 revisi terbaru:
sumber
x=99;w=" on the wall";e=" of beer";o=" bottle";b=o+"s";for(z="Go to the store and buy some more, "+x+b;0<x;)console.log(x+(2>x?o:b)+e+w+", "+x+(2>x?o:b)+e+".\n"+(1>--x?z:"Take one down and pass it around, "+x+(2>x?o:b))+e+w+".")
JavaScript ES6,
328318307305 byteMerupakan fungsi anonim. Tambahkan
f=
di awal untuk membuat fungsi danf()
untuk mengeksekusi.sumber
,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
C,
197196 byteSaya pikir saya telah mencapai batas pendekatan ini.
sumber
"%d bottles of beer on the wallTake one down and pass it aroundGo to the store and buy some more,.\n"main(){for(;;)printf();}
sendiri adalah 126 byte, sehingga mewakili batas bawah yang keras kecuali seseorang menemukan cara untuk kompres atau menggunakan kembali bagian dari string tanpa overhead yang signifikan. Saya menduga Anda mungkin telah mencapai batas pendekatan secara umum, plus atau minus beberapa byte.Java
304301300295 BytesPertama kali memposting jawaban. Saya mendengar kami dapat menggunakan enum tetapi tidak dapat menemukan caranya.
Tidak disatukan
Terima kasih
quartata
,J Atkin
danBenjamin Urquhart
sumber
i<2
di tempati==1
dani>2
di sini:i!=2
.99 bottle
dan bukan99 bottles
Template Dianggap Berbahaya , 667 byte
Semacam diperluas:
sumber
Haskell,
228223 byteFunction
f
mengembalikan string dengan lirik.sumber
/// , 341 byte
Diperlukan 99 tahun untuk menulis penjelasan yang tepat tentang kode ini.
Saya mungkin hanya akan memasukkan hasil dari setiap tahap ...
Pada dasarnya, ini memampatkan lirik berulang kali (seperti setiap jawaban di /// ).
Cobalah online!
Setiap langkah dekompresi
Karena penggantian diikuti oleh penggantian akan memiliki string
//
, itu akan sering muncul.Tampaknya cukup sering bahwa saya memutuskan untuk kompres
//
ke dalam-
.Ketika ini didekompresi, hasilnya adalah sebagai berikut:
Tali
bottle
hanya muncul tiga kali, tetapi saya memadatkannya+
:Kemudian,
)
berkorespondensi/&/</
diikuti oleh baris baru, dan(
berkorespondensi dengan//?/
, yang merupakan pola yang akan sering digunakan nanti:Sekarang, kami akan mendekompres beberapa string yang berguna:
>
terdekompresi menjadibottles of beer
^
terdekompresi menjadibottles of beer on the wall
!
dekompresi ke^,
, di mana^
yang di atas.$
dekompresi ke>.\n
, di mana>
aturan pertama dan\n
merupakan baris baru.@
dekompresi$
diikuti olehTake one down and pass it around,
, di mana$
aturan di atas.Kode yang didekompresi sekarang menjadi:
sumber
Vim, 139 byte
Disimpan 6 byte karena xsot .
Ini adalah upaya pertama saya untuk bermain golf perintah Vim, meskipun tampaknya itu cukup populer . Saya telah memasukkan final
ZZ
dalam hitungan byte (tulis ke file dan keluar) karena tampaknya menjadi norma yang diterima.Catatan tambahan: misi tercapai .
Penjelasan
sumber
i99 bottles of beer on the wall.<ESC>Yqa3P$r,J5wDr.+<CAN>YITake one down and pass it around, <ESC>o<ESCjq98@aiGo to the store and buy some more, <ESC>kdk?s<LF>xnxnxZZ
/
dan?
.JavaScript ES6,
237 217 208 203 195 193 189186 byteSemakin sulit untuk bermain golf ini ...
Sunting 1: Seseorang benar-benar mengalahkan saya, sepertinya saya harus berusaha lebih keras jika saya ingin mendapatkan jawaban Javascript terbaik.
Sunting 2: Saya benar-benar tidak percaya bahwa saya berhasil bermain golf sebanyak itu!
Apakah saya mengacaukan suatu tempat? Saya juga minta maaf karena menggunakan
alert
, jika Anda ingin menguji kode saya, ganti denganconsole.log
.Saat ini, ada satu jawaban Javascript terkenal lainnya: "99 Botol Bir" . Saksikan berikut ini! : D
sumber
JavaScript ES6,
210209205199198196 byteIni adalah terjemahan kasar dari pengiriman C saya. Saya sebenarnya tidak tahu javascript jadi pasti ada ruang untuk perbaikan.
Sunting: Rapi, saya menemukan backticks
sumber
console.log
denganalert
dan Anda dapat menggunakan `alih-alih". Kemudian Anda dapat mengganti \ n dengan baris baru. (Kutu digunakan untuk string templat, string tersebut dapat memiliki baris baru ...) Juga, selamat untuk mengalahkan saya!console.log
lebih mudah untuk menguji. Ngomong-ngomong, terima kasih telah mengekspos saya untuk backticks!console.log
, dan kemenangan saya akan berkurang menjadi apa-apa .. XD)%d bottle%s of beer%s%s
. Indeks setiap ayat (jumlah botol) dihitungi/3|0
sementara indeks masing-masing substring sederhanai%3
.Brainfuck, 743 byte
Cobalah online!
Di atas menggunakan sel pembungkus di beberapa tempat untuk menyimpan instruksi. Saya juga membuat versi non-pembungkus dalam 755 instruksi .
Tidak terkompresi
Berikut ini adalah polyglot dalam Brainfuck Annotation Language .
sumber
Python 2, 204 byte
Spesifikasinya kurang spesifik dalam hal spasi putih, jadi di sini saya berasumsi bahwa baris terakhir perlu memiliki satu baris tambahan. Jika spesifikasi menjelaskan sebaliknya, saya akan memperbarui jawaban ini.
Saya cukup senang dengan ini, tetapi melihat golf anarki saya merasa seperti ini masih bisa bermain golf, mungkin dengan pendekatan yang berbeda.
sumber
Labyrinth ,
11951190932 bytesIni agak berlebihan ...
Sementara Labyrinth tidak terlalu pandai mencetak string (karena Anda perlu mendorong semua kode karakter), saya pikir itu mungkin untuk melakukan yang lebih baik dari ini dengan menggunakan lebih banyak tetapi garis-garis panjang yang lebih pendek dan semakin gila dengan rotasi grid.
Karena saya pikir perbaikan golf apa pun akan secara substansial mengubah struktur kode ini, saya akan menunggu dengan penjelasan sampai saya kehabisan ide bagaimana cara golf lebih jauh.
sumber
Python 2, 195
Mengambil
i/2
ide dari jawaban Sp3000 .sumber
Windows Batch, 376 byte
Sangat sangat panjang dan jelek:
sumber
Python, 254 byte
Cukup mudah, tetapkan beberapa frasa yang paling umum, cetak setiap bit dari 99 menjadi 3, lalu cetak baris terakhir dengan menambahkan bersama variabel dan beberapa string.
sumber
Julia,
227215213 byteIni menggunakan interpolasi string (
"$variable"
) dan terner untuk membangun output dan mencetaknya ke STDOUT.Disimpan 14 byte berkat Glen O!
sumber
(n>1?" bottles":" bottle")" of beer"
, gunakan" bottle""s"^(n>1)*" of beer"
- perhatikan bahwa*
setelah itu diperlukan(n<1)
karena jika tidak ia mencoba untuk menerapkan(n>1)" of beer"
sebagai kekuatan. Juga, apakah ada manfaat menggunakanwhile n>0
lebihfor n=99:-1:1
(yang memungkinkan kondisi pada akhirnya menjadi lebih sederhana, dan menghindari kebutuhan terpisah untukn=99
)?\n
dan alihkan bagian tengah ke interpolasi (bukan",n>1?...","
, gunakan$(n>1?...")
) untuk menyimpan karakter, dan pindahkan bagian,
dalam kondisional ke sebelum bagian berikutnya, sehingga hanya perlu ditulis sekali.JavaScript ES6, 214 byte
Munculan terbatas:
Diperluas:
@commenters: Terima kasih atas gagasan fungsi panah, menyimpan 15 byte
Untuk bir tanpa batas, gunakan saja kode ini di sini, 212 byte
sumber
+o'
seperti yang kemudian diubah menjadi+o+'
. Juga melihat peluang untuk mengubah perulangan dan jawaban. Akan memeriksa fungsi panah sekarang :)b=a=>a+" bottle"+(1<a?"s":"");for(i=100;100>--i;)l="\n",p="."+l,o=" of beer",e=o+" on the wall",alert(l+b(i)+e+", "+b(i)+o+p+(1<i?"Take one down and pass it around, "+b(i-1)+e:"Go to the store and buy some more, "+b((i=100)-1)+e)+p)
while
loop saya dan saya akan segera memposting kode yang dihasilkan. Terima kasih atas ulasan kode! :)CJam,
149148146144138137134 byteHexdump di atas dapat dibalik dengan
xxd -r
. Cobalah online di juru bahasa CJam .Dengan biaya 9 byte tambahan, dengan total 143 byte , kita dapat menghindari karakter yang tidak patut:
Bagaimana itu bekerja
sumber
base
dua kali sudah menambahkan 8 byte di GolfScript ...C,
303299297 byteKompilasi dengan
gcc -std=c99 -w
.sumber
GolfScript, 143 byte
Mungkin masih ada ruang untuk perbaikan.Mendekat dengan revisi akhir, saya pikir.sumber
Mathematica,
238226222224 byteDisimpan beberapa byte berkat Martin Büttner.
sumber
Brainfuck, 4028 byte
Ini sangat mengerikan. Banyak duplikasi, dan sangat tidak efisien, sehingga tidak akan memenangkan hadiah apa pun. Namun, saya memulainya, dan bertekad untuk menyelesaikannya.
Saya mungkin mencoba dan memperbaiki ini, tetapi mungkin tidak, karena terus terang, otak saya kacau.
Golf
Tidak disatukan
Keluaran:
Coba sendiri di sini!OK, jadi sepertinya URL terlalu panjang untuk disertakan di sini, jadi Anda perlu menyalin / menempel untuk mencobanya sendiri.
Saya mengujinya menggunakan juru bahasa ini .
sumber
PHP, 251 byte
Ini menjelaskan masalah jamak / tunggal.
Dapat dibaca:
sumber
Beam ,
11411109 byteSaya masih memiliki banyak ruang untuk bermain golf ini lebih jauh dengan semua ruang kosong, tetapi semakin sulit untuk mengikuti dan istirahat dengan mudah :) Ini sangat mirip dengan yang saya posting untuk pertanyaan ini , kecuali ia pergi ke toko sebelum bir mencapai 1 dan sel-sel yang digunakan untuk parameter telah bergeser. Saya juga sangat mengubah tata letak. Saya akan mencoba dan melakukan penjelasan setelah saya mencoba beberapa layout lagi.
Cobalah di tumpukan tumpukan di sini
sumber
PHP,
250246244233228 byteSaya percaya ini adalah yang terkecil sejauh ini. Ini didasarkan pada bidikan 247, dengan beberapa modifikasi untuk meminimalkan lebih lanjut.
Diperkecil
Diperluas
sumber
php -r
yang setaraperl -e
dan serupa, dapat diterima untuk menghilangkan tag pembuka. Lihat diskusi terkait di Menjalankan PHP dengan-r
alih - alih tag kode .while($b)
bekerja dengan baik.