Tantangan
Tulis program yang menghasilkan lirik hingga 99 Bottles of Beer, tetapi alih-alih "beer", output "fizz" jika jumlah botol di dinding adalah kelipatan 3, "buzz" jika kelipatan 5, dan "fizzbuzz" jika kelipatan 3 dan kelipatan 5. Jika jumlah botol di dinding bukan kelipatan 3 atau 5, cukup keluaran "bir" seperti biasa.
Lirik
99 bottles of fizz on the wall, 99 bottles of fizz.
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 fizz on the wall.
96 bottles of fizz on the wall, 96 bottles of fizz.
Take one down and pass it around, 95 bottles of buzz on the wall.
95 bottles of buzz on the wall, 95 bottles of buzz.
Take one down and pass it around, 94 bottles of beer on the wall.
....
3 bottles of fizz on the wall, 3 bottles of fizz.
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 fizz on the wall.
Ini adalah kode-golf , jadi pengiriman terpendek di setiap bahasa akan menang.
code-golf
string
kolmogorov-complexity
musicman523
sumber
sumber
Jawaban:
Python 2 ,
263253245 byteCobalah online!
sumber
['ab','cd'][x]
dapat ditulis ulang sebagai'acbd'[x::2]
, hanya untuk menghemat beberapa byteC (GCC),
276274 byteTerima kasih kepada Neil untuk menghemat dua byte!
Siapa yang tidak suka tanda kurung dalam ekspansi makro?
Tidak Disatukan:
Lihat langsung di Coliru!
Versi alternatif (276 byte)
sumber
#define w" on the wall"
ke*w=" on the wall"
.#define w
dengan*w=
untuk menyimpan byte di sana. Jujur saya tidak terlalu terbiasa dengan golf C, tapi dugaan saya adalah ia membuatw
karakter global * yang didefinisikan secara implisit.#define
dw
adalah string literal, yang secara otomatis ditempel dengan string literal yang berdekatan. Jikaw
variabel, saya harus menggunakan format string yang sebenarnya di dalamprintf
.Röda , 273 byte
Cobalah online!
Akan bermain golf lebih jauh di pagi hari.
sumber
PHP, 242 Bytes
Cobalah online!
PHP, 244 Bytes
Cobalah online!
gunakan fungsi strtr
PHP, 245 Bytes
Cobalah online!
menggunakan fungsi Anonim dalam string untuk mendapatkan penopang tergantung dari integer
Diperluas
sumber
function x($n){return"$n bottle".($n-1?s:'')." of ".(($n%3?'':fizz).($n%5?'':buzz)?:beer);}$y=" on the wall";for($b=99;$b;){$c=x($b);echo"$c$y, $c.↵",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.↵↵";}
. :)use
dalam kombinasi dengan fungsi anonim yang menghemat 1 Byte dalam versi ini05AB1E ,
151146143 byteCobalah online!
sumber
SOGL ,
136135134133131 bytePertama-tama, fungsi ke-3:
Fungsi pertama:
Fungsi kedua:
Dan bagian utama:
Kehilangan beberapa byte karena bug yang
O
menempatkan baris baru sebelum dan sesudahnya (Dan entah bagaimana ini kembali ke V0.9 (ini adalah kode V0.11))sumber
Java,
344340339 byte(-4 byte setelah bermain golf fizzbuzz; -1 byte menghapus spasi kosong)
Sedikit tidak diubah (menggunakan lekukan 1-ruang untuk menghilangkan pengguliran horizontal):
sumber
JavaScript (ES6),
316309 byteIni adalah program lengkap daripada fungsi. Tidak ada yang sangat kreatif, itu hanya pendekatan naif (maka bytecount!). Saya menggunakan
console.log()
bukanalert()
karena banyak browser memiliki batasan pada jumlah karakter yang dapat ditampilkan menggunakanalert()
. Perhatikan bahwa semua spasi putih dan baris baru diperlukan.Tidak Disatukan:
Ini Cuplikannya:
BTW, dengan jawaban ini, saya telah mendapatkan lencana perunggu dalam kode-golf ! Tidak pernah terpikir saya akan mencapai ini selamanya (bukan berarti itu pencapaian besar.)!
sumber
d
fungsi tidak memerlukan()
s karena?:
benar-asosiatif, tetapi Anda benar-benar dapat menyimpan lebih banyak byte menggunakand=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer"
.Retina , 230 byte
Cobalah online! Penjelasan:
Sisipan 99
_
s.Mengubah semua kecuali yang terakhir
_
ke stringTake one down and pass it around, $.'#.¶¶$.'#, $.'.¶
, di mana¶
adalah baris baru dan$.'
merupakan hitungan dari garis bawah yang tersisa. Ini secara efektif menghitung mundur dari 98 menjadi 1.Menambahkan baris pertama dari ayat pertama dalam format "kompak".
Menambahkan baris kedua dari ayat terakhir. Mengapa saya perlu melompat melalui lingkaran untuk menggunakan
_
Saya tidak tahu, tetapi$
tampaknya cocok dua kali, jadi saya tidak bisa menggunakannya. Sosok pergi.Mengganti string yang muncul beberapa kali dalam ayat tersebut.
Ini cocok dengan bilangan bulat dalam ayat-ayat, dan sufiks botol yang sesuai dari, dan mengembang kembali ke unary lagi, dalam persiapan untuk memilih minuman. (Saya menyimpan 1 byte pada
99
s dengan cara ini.)Ganti kelipatan tepat dengan minuman yang sesuai.
sumber
sed ,
468459456 bytesCobalah online!
Membutuhkan
-r
bendera.Penjelasan
Hold space memegang pola dua garis berulang, dengan angka diwakili
[A-I][0-9]
(digit terpisah untuk puluhan dan satu) dan jenis minuman diwakili sebagaiX*Y*Z
, di manaX
melacak-N mod 3
, danY
dari-N mod 5
.Pada setiap iterasi berikutnya, angkanya akan dikurangi dan angka
X
s danY
s diperbarui. Kemudian ruang pegang disalin ke ruang pola, diubah menjadi garis-garis lagu, dan dicetak.sumber
C,
349345344 byteNah, begitulah. Butuh satu jam.
Cobalah online!
sumber
Javascript (ES6),
236234233232 byteDemo
Tidak disatukan
sumber
Ruby , 261 byte
Cobalah online!
sumber
shortC ,
314312 byteMaaf tidak ada penjelasan, tapi saya benar-benar lupa cara kerjanya.
sumber
Arang ,
307297 byteCobalah online!
YA KITA BISA! Tautan ke versi verbose, ini bisa banyak bermain golf, saya yakin.
sumber
⁺
s terlihat mencurigakan ...tcl, 298
demo
sumber