“99 Botol Bir”

71

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 Nukuran 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

GamrCorps
sumber
13
Siapa pun yang memilih ini, yang lain adalah kontes popularitas ...
TheDoctor
21
Ini adalah subtugas dari golf Create a HQ9 + Interpreter .
Geobit
4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Saya belum VTCd, masih memutuskan bagaimana perasaan saya tentang itu. Either way, saya pikir beberapa jawaban (atau potongan dari mereka) dari yang lain dapat langsung disalin / ditempelkan sambil tetap kompetitif , yang merupakan tes biasa untuk penipuan.
Geobits
13
Perhatikan bahwa quartata sudah melakukan sandbox katalog 99BB beberapa minggu lalu dan berencana untuk mempostingnya.
Alex A.
13
@GamrCorps Harap jangan mengubah aturan secara tidak perlu setelah tantangan dimulai. Tak satu pun dari karakter dalam output harus opsional.
feersum

Jawaban:

43

C #, 285 298 289 Bytes

(Upaya pertama saya di golf Kode ...)

class d{static void Main(){for(int b=99;b>0;)System.Console.Write("{0}{6}{1}{2}, {0}{6}{1} of beer. {3}, {4}{6}{5}{2}.{7}",b,b==1?"":"s"," of beer on the wall",b==1?"Go to the store and buy some more":"Take one down and pass it around",b==1?99:b-1,b==2?"":"s"," bottle",b--<2?"":"\n\n");}}

Sedikit tidak ungolfed:

class d{
    static void Main(){
        for(int b = 99; b > 0;){
            System.Console.Write("{0}{6}{1}{2}, {0}{6}{1} of beer.\n{3}, {4}{6}{5}{2}.{7}", b, b==1 ? "" : "s", " of beer on the wall", b == 1 ? "Go to the store and buy some more" : "Take one down and pass it around", b == 1 ? 99 : b-1, b== 2 ? "" : "s", " bottle", b--<2 ? "" : "\n\n");
        }
    }
}
Florian Bach
sumber
10
tip - gunakan var sebagai ganti string :)
Belfield
2
2 byte dari mengganti " bottle"dengan argumen format meskipun saya yakin ada cara yang lebih baik, memiliki 3 contoh botol menyakiti mata saya ...
Sven Writes Code
4
b==1dapat diganti dengan b<2.
LegionMammal978
2
Untuk loop Anda dapat ditulis seperti inifor(int b = 100; b--> 1;)
Yassin Hajaj
2
Maka mungkin kita harus menunggu penulis tantangan untuk memutuskan apakah sebuah trailing newline diperbolehkan atau tidak.
Florian Bach
31

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 0s).


Ini adalah program terpendek yang mungkin dalam kode mesin Motorola MC14500B. Ini terdiri dari hanya 1000dan 1001( 8dan 9, 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

8    Store the register's value
9    Store the logical complement of the register's value

Daftar dimulai pada 0.


Kode Trivia

  • The heksadesimal adalah 93.224 8s dan 9s panjang.

  • The biner adalah 745.792 1s dan 0s panjang.

  • Saya menggunakan kode Python 2 di bawah ini untuk menghasilkan kode. Input 0untuk biner dan 1heksadesimal.

    a,b=["8","9"]if input()else["00001000","00001001"]
    f="""99 Bottles of Beer lyrics"""
    print''.join(b if int(i)else a for i in''.join((8-len(bin(i)[2:]))*'0'+bin(i)[2:]for i in bytearray(f)))
Zach Gates
sumber
4
Tolong beritahu saya Anda tidak hanya pergi dan menulis ini semua tanpa semacam generator string ...: c
Addison Crump
1
Lihat bagian "Kode Trivia" baru: P @VoteToClose
Zach Gates
Tautannya
Saya akan memperbaikinya ketika saya kembali ke rumah. Maaf tentang itu): @ETHproductions
Zach Gates
28

Vitsy, 0 Bytes



Serius tidak punya apa-apa pada saya. (@Mego, saya minta maaf.;))

Cobalah online! (Tekan saja "Lari")

Addison Crump
sumber
7
o_o Saya perlu sesuatu yang menarik bagi Simplex untuk dilakukan dalam nol byte: P
Conor O'Brien
4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Saya pikir maksud Anda, "Saya perlu sesuatu yang berguna bagi Simplex untuk dilakukan dalam nol byte."
Martin Ender
3
@VoteToClose - Bagaimana cara kerjanya? Jujur saya tidak tahu, saya bukan pegolf kode, tapi saya senang datang ke sini dan melihat orang-orang dan bahasa melakukannya. Tapi saya tidak bisa memahami ini. +1 karena terlihat mengesankan!
Jonnny
1
@Jonnny Klik di sini untuk melihat file handler juru bahasa. Penangan file akan melihat bahwa file berisi nol byte, dan, jika demikian, cetak liriknya. c:
Addison Crump
1
@ Johnny Ya - ini pekerjaan yang sedang berjalan, suatu hari, itu akan lebih baik daripada Serius. Tetapi untuk sekarang ... Kami menunggu. Jika Anda ingin bahasa golf yang baik, lihat jawaban Serius, ada beberapa hal gila di dalamnya.
Addison Crump
27

Serius , 1 byte

N

Jika tumpukan kosong (yang pada awalnya), Ntekan lirik. Kemudian mereka dicetak secara implisit di EOF.

Terima kasih kepada @Mego karena telah memperbaiki juru bahasa Serius.

lirtosiast
sumber
22
Martin berkata dalam tantangan Hello World, "> tolong jangan downvote jawaban membosankan (tetapi valid) dalam bahasa di mana tidak ada banyak golf - ini masih berguna untuk pertanyaan ini karena mencoba untuk menyusun katalog selengkap mungkin. Namun, lakukan sebagian besar upvote jawaban dalam bahasa di mana penulis benar-benar harus berusaha golf kode Jawaban ini tidak menarik, tetapi ini adalah solusi yang valid dan terpendek.
lirtosiast
1
Saat membaca pertanyaan saya tidak sabar melihat Anda memposting jawaban Serius. Tapi sepertinya aku bahkan tidak perlu menunggu. :)
Hexaholic
8
Seriusly ????????
Vajura
1
Saya berharap dapat melihat solusi Anda tanpa menggunakan N:)
Mego
1
Ya - Saya memiliki empat suara turun dan jawaban saya valid. Saya setuju dengan apa yang dikatakan di komentar teratas di sini.
Addison Crump
19

JavaScript ES6, 230 218 198 196 192 188 185 byte

for(x=99,z=(a=' on the wall')=>`${x||99} bottle${1-x?'s':''} of beer`+a;x;)alert(z()+', '+z`.
`+(--x?'Take one down and pass it around, ':'Go to the store and buy some more, ')+z()+'.')

Hanya memangkas beberapa byte sambil tetap membuatnya tampak bersih dan mudah dimengerti.

3 revisi terbaru:

for(x=99,z=a=>`${x||99} bottle${1-x?'s':''} of beer${a||' on the wall'}`;x;)alert(z()+', '+z(`.
`)+(--x?'Take one down and pass it around, ':'Go to the store and buy some more, ')+z()+'.')

for(x=99,z=a=>(x||99)+' bottle'+(1-x?'s':'')+' of beer',w=' on the wall';x;)alert(z()+w+', '+z()+(--x?`.
Take one down and pass it around, `:`.
Go to the store and buy some more, `)+z()+w+'.')

for(x=99,o=' bottle',q=b=o+'s',e=' of beer',w=e+" on the wall";x;)alert(x+b+w+', '+x+b+e+(--x?`.
Take one down and pass it around, `+x:`.
Go to the store and buy some more, 99`)+(b=1-x?q:o)+w+'.')
Adam Dally
sumber
1
2 byte disimpan dengan meletakkan variabel di luar kontrol loop: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+".")
Generic User
Bukan itu yang menyimpan 2 byte itu dalam kode Anda. Ini sebenarnya penghapusan kurung sekitar (--x <1). Untuk saat ini saya akan meninggalkan variabel di dalam pernyataan for untuk tujuan keterbacaan agar semuanya tetap bersama.
Adam Dally
1
@Stefnotch Jika Anda bertanya-tanya, saya menemukan suntingan ini dengan memeriksa panggilan fungsi saya ... tapi saya rasa ini bukan maksud Anda. Saran Anda masih relevan sebagai upaya terakhir.
Adam Dally
1
@ Paŭlo Ebermann Ia mengeksekusi peringatan untuk setiap ayat, tetapi Anda bebas untuk mengubahnya ke console.log untuk dieksekusi di konsol, yang akan membuatnya 194 byte. Selain itu, mengingatkan seluruh lirik dalam sekali jalan tidak berfungsi di Firefox, setidaknya ... itu memotong 5-10 ayat yang bagus.
Adam Dally
1
@Stnotnotch. Nah, 1-x terbukti bermanfaat saat ini.
Adam Dally
18

JavaScript ES6, 328 318 307 305 byte

Merupakan fungsi anonim. Tambahkan f=di awal untuk membuat fungsi dan f()untuk mengeksekusi.

x=>eval('s=o=>v=(o?o:" no more")+" bottle"+(1==o?"":"s");for(o="",i=99;i>0;)o+=`${s(i)}@ on the wall, ${v}@.\nTake one down, pass it around, ${s(--i)}@ on the wall.\n`;o+`No more bottles@ on the wall, no more bottles@.\nGo to the store and buy some more, 99 bottles@ on the wall.`'.replace(/@/g," of beer"))
Conor O'Brien
sumber
2
Cukup akan jauh lebih menarik jika itu lebih dari sekadar satu rangkaian senar panjang
Sp3000
9
Mengapa seni ASCII acak disalin dari situs lain?
feersum
7
Terutama karena itu tidak berfungsi, itu mengingatkan:,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
Generic User
14

C, 197 196 byte

main(i){for(i=299;i--/3;printf("%d bottle%s of beer%s%s",i/3?:99,"s"+5/i%2,i%3?" on the wall":i^3?".\nTake one down and pass it around":".\nGo to the store and buy some more",~i%3?", ":".\n\n"));}

Saya pikir saya telah mencapai batas pendekatan ini.

xsot
sumber
1
"%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.
Ray
12

Java 304 301 300 295 Bytes

Pertama kali memposting jawaban. Saya mendengar kami dapat menggunakan enum tetapi tidak dapat menemukan caranya.

interface A{static void main(String[]a){String b=" of beer",c=" on the wall",n=".\n",s;for(int i=100;i-->1;s=" bottle"+(i>1?"s":""),System.out.println(i+s+b+c+", "+i+s+b+n+(i<2?"Go to the store and buy some more, 99":"Take one down and pass it around, "+(i-1))+" bottle"+(i!=2?"s":"")+b+c+n));}}

Tidak disatukan

interface A {
    static void main(String[] a) {
        String b = " of beer", c = " on the wall", n = ".\n", s;
        for (int i = 100; i-- > 1; s = " bottle" + (i > 1 ? "s" : ""), System.out.println(i + s + b + c + ", " + i + s + b + n + (i < 2 ? "Go to the store and buy some more, 99" : "Take one down and pass it around, " + (i - 1)) + " bottle" + (i != 2 ? "s" : "") + b + c + n));
    }
}

Terima kasih quartata, J AtkindanBenjamin Urquhart

Yassin Hajaj
sumber
Anda dapat menyimpan 2 bytes dengan menggunakan i<2di tempat i==1dan i>2di sini: i!=2.
J Atkin
@JAtkin Terima kasih. Untuk yang pertama tidak apa-apa, output tetap sama. Tetapi untuk yang kedua, jika saya melakukan perubahan, baris terakhir akan dicetak 99 bottledan bukan99 bottles
Yassin Hajaj
1
Ternyata, ini bagus untuk java, tetapi ini tidak berfungsi dengan baik untuk groovy (213 vs 245 byte).
J Atkin
1
Tidak juga, asyik adalah salah satu bahasa JVM. Untuk sebagian besar aplikasi kode asyik lebih pendek dari kode java yang melakukan hal yang sama. goovy-lang.org
J Atkin
1
@BenjaminUrquhart Hebat! Dimodifikasi!
Yassin Hajaj
11

Template Dianggap Berbahaya , 667 byte

Ap<Fun<Ap<Fun<Cat<Cat<Cat<Cat<Ap<A<1,1>,A<1>>,A<2,1>>,St<44,32>>,Ap<A<1,1>,A<1>>>,If<A<1>,Cat<Cat<Cat<Cat<St<46,10,84,97,107,101,32,111,110,101,32,100,111,119,110,32,97,110,100,32,112,97,115,115,32,105,116,32,97,114,111,117,110,100,44,32>,Ap<A<1,1>,Sub<A<1>,T>>>,A<2,1>>,St<46,10,10>>,Ap<A<0>,Sub<A<1>,T>>>,Cat<Cat<Cat<St<46,10,71,111,32,116,111,32,116,104,101,32,115,116,111,114,101,32,97,110,100,32,98,117,121,32,115,111,109,101,32,109,111,114,101,44,32>,Ap<A<1,1>,I<98>>>,A<2,1>>,St<46>>>>>,I<98>>>,Fun<Cat<Cat<Cat<Add<A<1>,T>,St<32,98,111,116,116,108,101>>,If<A<1>,St<'s'>,St<>>>,St<32,111,102,32,98,101,101,114>>>,St<32,111,110,32,116,104,101,32,119,97,108,108>>

Semacam diperluas:

Ap<
    Fun<
        Ap<
            Fun<
                Cat<
                    Cat<Cat<Cat< Ap<A<1,1>,A<1>> , A<2,1> >, St<44,32> >, Ap<A<1,1>,A<1>> >,
                    If<A<1>,
                        Cat<Cat<Cat<Cat< St<46,10,84,97,107,101,32,111,110,101,32,100,111,119,110,32,97,110,100,32,112,97,115,115,32,105,116,32,97,114,111,117,110,100,44,32> , Ap<A<1,1>,Sub<A<1>,T>> >, A<2,1> >, St<46,10,10> >, Ap<A<0>,Sub<A<1>,T>> >,
                        Cat<Cat<Cat< St<46,10,71,111,32,116,111,32,116,104,101,32,115,116,111,114,101,32,97,110,100,32,98,117,121,32,115,111,109,101,32,109,111,114,101,44,32> , Ap<A<1,1>,I<98>> >, A<2,1> >, St<46> >
                    >
                >
            >,
            I<98>
        >
    >,
    Fun< Cat<Cat<Cat< Add<A<1>,T> , St<32,98,111,116,116,108,101> >, If<A<1>,St<'s'>,St<>>  >, St<32,111,102,32,98,101,101,114> > >,
    St<32,111,110,32,116,104,101,32,119,97,108,108>
>
feersum
sumber
11

Haskell, 228 223 byte

o=" of beer on the wall"
a n=shows n" bottle"++['s'|n>1]
b 1="Go to the store and buy some more, "++a 99
b n="Take one down and pass it around, "++a(n-1)
f=[99,98..1]>>= \n->[a n,o,", ",a n," of beer.\n",b n,o,".\n\n"]>>=id

Function fmengembalikan string dengan lirik.

nimi
sumber
10

/// , 341 byte

/-/\/\///+/ bottle-)/\/&\/<\/
-(/\/\/?\/ ->/+s of beer-^/> on the wall-!/^,-$/>.
-@/$Take one down and pass it around,-#/^.
-*/?1@?0#<0!?0@-%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!-&/?9#
%*-</
9(9/%*/</
8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0-
0/
- 0/ /#/1+s/1+/
% 01$Go to the store and buy some more, 099^.

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:

/+/ bottle//)/\/&\/<\/
//(/\/\/?\/ //>/+s of beer//^/> on the wall//!/^,//$/>.
//@/$Take one down and pass it around,//#/^.
//*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9#
%*//</
9(9/%*/</
8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0//
0/
// 0/ /#/1+s/1+/
% 01$Go to the store and buy some more, 099^.

Tali bottlehanya muncul tiga kali, tetapi saya memadatkannya +:

/)/\/&\/<\/
//(/\/\/?\/ //>/ bottles of beer//^/> on the wall//!/^,//$/>.
//@/$Take one down and pass it around,//#/^.
//*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9#
%*//</
9(9/%*/</
8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0//
0/
// 0/ /#/1 bottles/1 bottle/
% 01$Go to the store and buy some more, 099^.

Kemudian, )berkorespondensi /&/</diikuti oleh baris baru, dan (berkorespondensi dengan //?/ , yang merupakan pola yang akan sering digunakan nanti:

/>/ bottles of beer//^/> on the wall//!/^,//$/>.
//@/$Take one down and pass it around,//#/^.
//*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9#
%*//</
9//?/ 9/%*/</
8//?/ 8/&/</
7//?/ 7/&/</
6//?/ 6/&/</
5//?/ 5/&/</
4//?/ 4/&/</
3//?/ 3/&/</
2//?/ 2/&/</
1//?/ 1/&/</
0//?/ 0//
0/
// 0/ /#/1 bottles/1 bottle/
% 01$Go to the store and buy some more, 099^.

Sekarang, kami akan mendekompres beberapa string yang berguna:

  • > terdekompresi menjadi bottles of beer
  • ^ terdekompresi menjadi bottles of beer on the wall
  • !dekompresi ke ^,, di mana ^yang di atas.
  • $dekompresi ke >.\n, di mana >aturan pertama dan \nmerupakan baris baru.
  • @dekompresi $diikuti oleh Take one down and pass it around,, di mana $aturan di atas.

Kode yang didekompresi sekarang menjadi:

/*/?1 bottles of beer.
Take one down and pass it around,?0 bottles of beer on the wall.
<0 bottles of beer on the wall,?0 bottles of beer.
Take one down and pass it around,//%/99 bottles of beer on the wall,?9 bottles of beer.
Take one down and pass it around,?8 bottles of beer on the wall.
<8 bottles of beer on the wall,?8 bottles of beer.
Take one down and pass it around,?7 bottles of beer on the wall.
<7 bottles of beer on the wall,?7 bottles of beer.
Take one down and pass it around,?6 bottles of beer on the wall.
<6 bottles of beer on the wall,?6 bottles of beer.
Take one down and pass it around,?5 bottles of beer on the wall.
<5 bottles of beer on the wall,?5 bottles of beer.
Take one down and pass it around,?4 bottles of beer on the wall.
<4 bottles of beer on the wall,?4 bottles of beer.
Take one down and pass it around,?3 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 bottles of beer on the wall.
<1 bottles of beer on the wall,//&/?9 bottles of beer on the wall.

%*//</
9//?/ 9/%*/</
8//?/ 8/&/</
7//?/ 7/&/</
6//?/ 6/&/</
5//?/ 5/&/</
4//?/ 4/&/</
3//?/ 3/&/</
2//?/ 2/&/</
1//?/ 1/&/</
0//?/ 0//
0/
// 0/ / bottles of beer on the wall.
/1 bottles/1 bottle/
% 01 bottles of beer.
Go to the store and buy some more, 099 bottles of beer on the wall.
Biarawati Bocor
sumber
9

Vim, 139 byte

Disimpan 6 byte karena xsot .

i, 99 bottles of beer on the wall.<ESC>YIGo to t<SO> store and buy some more<ESC>qa
3P2xgJX$12.+<CAN>YITake one down a<SO> pass it around<ESC>o<ESC>q98@adk?s
xn.n.ZZ

Ini adalah upaya pertama saya untuk bermain golf perintah Vim, meskipun tampaknya itu cukup populer . Saya telah memasukkan final ZZdalam hitungan byte (tulis ke file dan keluar) karena tampaknya menjadi norma yang diterima.

Catatan tambahan: misi tercapai .


Penjelasan

Command                                    Effect
-------------------------------------------------------------------------------------------
i, 99 bottles of beer on the wall.<ESC>    insert text at cursor
Y                                          copy this line into buffer
IGo to t<SO> store and buy some more<ESC>  insert text at beginning of line
                                           auto-complete "the" (<Ctrl-N>, searches forward)
qa                                         begin recording macro into "a"
<LF>                                       move down one line (if present)
3P                                         paste 3 times before cursor
2x                                         delete 2 characters at cursor
gJ                                         join this line with next (without space between)
X                                          delete character before cursor
$                                          move to last non-whitespace character of line
12.                                        repeat the last edit command (X) 12 times
+                                          move to column 0 of next line
<CAN>                                      numeric decrement (<Ctrl-X>)
Y                                          copy this line into buffer
ITake one down a<SO> pass it around<ESC>   insert text at beginning of line
                                           auto-complete "and" (<Ctrl-N>, searches forward)
o<ESC>                                     insert text on new line
q                                          stop recording macro
98@a                                       repeat macro "a" 98 times
dk                                         delete upwards (this line and the one above it)
?s<LF>                                     move to previous /s/
x                                          delete character at cursor
n.n.                                       repeat last match and delete 2 times
ZZ                                         write to file and exit
primo
sumber
1
Perbaikan sedikit: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
xsot
@ xsot terima kasih untuk itu. Saya entah bagaimana sepenuhnya diabaikan /dan ?.
primo
tapi mungkin untuk mencapai 153 anagol dengan peningkatan ini
xsot
@ xsot mengerti;)
primo
8

JavaScript ES6, 237 217 208 203 195 193 189 186 byte

Semakin 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!

for(i=99,Y=" on the wall",o=k=>k+(i||99)+` bottle${i==1?'':'s'} of beer`;i;)alert(o``+Y+o`, `+o(--i?`.
Take one down and pass it around, `:`.
Go to the store and buy some more, `)+Y+`.`)

Apakah saya mengacaukan suatu tempat? Saya juga minta maaf karena menggunakan alert, jika Anda ingin menguji kode saya, ganti dengan console.log.

Saat ini, ada satu jawaban Javascript terkenal lainnya: "99 Botol Bir" . Saksikan berikut ini! : D

Stefnotch
sumber
Saya akan memeriksa kembali kondisi Anda dan Anda harus dapat memotong beberapa byte. Upaya bagus terus dilakukan!
Adam Dally
@Adamally Ok !! : D Tapi saya tidak suka menyalin barang orang lain ... (Saya akan merasa bersalah jika saya hanya menyalin kode Anda ... meskipun itu akan "dapat diterima", jika saya menemukan beberapa peningkatan): D
Stefnotch
@Adamally Yay, saya mengacaukan fungsi saya dan saya menyimpan banyak byte! (Garis dicoret semakin lama dan semakin lama ..)
Stefnotch
Luar biasa! Kecuali ada beberapa jalan alternatif yang benar-benar saya abaikan, saya merasa kita berdua hampir mendekati akhir.
Adam Dally
7

JavaScript ES6, 210 209 205 199 198 196 byte

s=""
for(i=299;--i>1;s+=`${i/3|0||99} bottle${5/i^1?"s":""} of beer`+(i%3?" on the wall":i^3?`.
Take one down and pass it around`:`.
Go to the store and buy some more`)+(~i%3?", ":`.

`));alert(s)

Ini adalah terjemahan kasar dari pengiriman C saya. Saya sebenarnya tidak tahu javascript jadi pasti ada ruang untuk perbaikan.

Sunting: Rapi, saya menemukan backticks

xsot
sumber
Anda dapat mengganti console.logdengan alertdan 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!
Stefnotch
1
Saya pikir saya akan meninggalkan output sendirian kecuali orang lain mengalahkan saya karena console.loglebih mudah untuk menguji. Ngomong-ngomong, terima kasih telah mengekspos saya untuk backticks!
xsot
Wohoo, mengalahkan milikmu! Juga, terima kasih telah menggunakan || dalam kode Anda, itu pasti berguna ... (Meh, Anda dapat mengubah console.log, dan kemenangan saya akan berkurang menjadi apa-apa .. XD)
Stefnotch
1
Anda terbukti menantang untuk bersaing! Sayangnya, akan menarik untuk melihat rincian kode Anda.
Adam Dally
1
@AdamDally Pada dasarnya, setiap ayat dibagi menjadi 3 bagian dengan struktur sebagai berikut: %d bottle%s of beer%s%s. Indeks setiap ayat (jumlah botol) dihitung i/3|0sementara indeks masing-masing substring sederhana i%3.
xsot
7

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 .

; byte sequence
; \n _ _ _ _ c \n comma space d t o l T G
++++++++++>>
--->++++>------>-->>++>+>>+>->++
[[>+++++++[>++>+>+<<<-]<-]+<+++]
>>>>>-->>-->>++>->+++[<]

c = 0
n = 100

>
while(n)
[
  n = n minus 1
  -<<
  N = str(n)
  ; first time \n _ becomes 9 9
  +[<->-----]<---[<[<]>[->]<]
  +<[>-]>[-<++++++++++<->>>]
  -[<->-----]<+++[<[<]>[+>]<]

  <->>>
  if(c)
  [
    >
    if(n)
    [
      'Take one down and'
      [>]<<<<.<<<<---.>>>-.<<<++++.<.>>>.-.<<.<.>-.>>+.<+++.>-.<<<.>---.>>.<<+++.
      ' pass it around' comma space
      <.>>>++.<<---.>----..<<.>>>>--.+++<<+.<<.>.>--.>-.<+++.->-.+<<+++.<<.>.<<<<-<
    ]>
    else
    [
      'Go to the store and'
      [>]<<<-.<<<.<<<.>>.>.<<<.>>.<++++.---.<.>>-.+.>.<--.<.<.>----.>>-.<<+++.
      ' buy some more' comma space
      <.>--.>+++.++++.<<.>>------.>+.--.<<+++.<.>>>.++.<-.++<.-<<.>.<<<<-
      N = '9'
      N
      <<<+++++++++.>>>
    ]
    <+>
  ]

  c = c plus 2
  <++

  while(c)
  [
    N
    <<[<]>[.>]>>>
    ' bottle'
    >>>.>--.>>.<..->>.<<<+++.<<<<
    if(n minus 1) 's'
    -[>>>>>.[<]]<[>]>+
    ' of beer'
    >>>.>>>.<<+.<.>----.+++..->-.++

    [<<]<-
    if(c minus 1)
    [
      ' on the wall'
      >>>>>.>>>.-.+<<<.>>.<++++.---.<.>>+++.---<----.+++>>>..[<<]
    ]

    <<[>]>-
    if(c minus 2)
    [
      period newline
      >>>>++.--<.<<<+
      if(c minus 1) newline
      [>>>.<<<<]>[>]<-<
    ]>>
    else
    [
      comma space
      >>.>.<<<<
    ]

    if(not n) c = c minus 2
    >[<<++>]

    c = c minus 1
    <[>]<-
  ]

  c = 1
  >+>
]
primo
sumber
6

Python 2, 204 byte

n=198
while n:s="bottle%s of beer"%"s"[:n^2>1];print n%2*"GToa kteo  otnhee  dsotwonr ea nadn dp absusy  isto maer omuonrde,,  "[n>1::2]+`n/2or 99`,s,"on the wall"+[", %d %s."%(n/2,s),".\n"[:n]][n%2];n-=1

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.

Sp3000
sumber
6

Labyrinth , 1195 1190 932 bytes

"{"9"
^ }
 ""
 <
 713.101.801..:611.111.89.23}!:({.23.44.001.011.711.111.411.79.23.611.501.23..:511.79.211.23.001.011.79.23.011.911.111.001.23.101.(.:111.23.101.701.79.48\.411..:101.89.23.201.111.23.511.101.801..:611.111.89.23}!:{.23.44..:801.79.911.23.101.401.611.23.(.:111.23.411..:101.89.23.201.111.23.511.101.801..:611.111.89.23}!:{
 _
 3`<
 _ ( 
""""
"
{(32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..46.\\49.32.98.111.116:..108.101.32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..44.32.49.32.98.111.116:..108.101.32.111.102.32.98.101:..114.46.\71.111.32.116.111.32.116.104.101.32.115:.).111.114.101.32.97.110.100.32.98.117.121.32.115.111.109.101.32.109.111.114.101.44.32.9!9!32.98.111.116:..108.101.115.32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..46.@
 )
 }
 <
 87\\.64..:801.79.911.23.101.401.611.23.(.:111.23.411..:101.89.23.201.111.23.511
 _
 3`<
 _ ( 
v"""

Ini 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.

Martin Ender
sumber
6

Python 2, 195

i=198
while i:s=`i/2or 99`+' bottle%s of beer'%'s'[1<i<4:];print['%s, '+s+'.','Take one down and pass it around, %s.\n',"Go to the store and buy some more, %s."][i%2+1/i]%(s+' on the wall');i-=1

Mengambil i/2ide dari jawaban Sp3000 .

Tidak
sumber
6

Windows Batch, 376 byte

Sangat sangat panjang dan jelek:

@echo off
setlocal enabledelayedexpansion
set B=bottles
set C=on the wall
set D=of beer
for /l %%* in (99,-1,1) do (
set A=%%*
if !A! EQU 1 set B=bottle
echo !A! !B! !D! !C!, !A! !B! !D!.
set /a A=!A!-1
if !A! EQU 1 set B=bottle
if !A! EQU 0 (
echo Go to the store and buy some more, 99 bottles !D! !C!.
) else (
echo Take one down and pass it around, !A! !B! !D! !C!.
echo.
))
Adnan
sumber
5

Python, 254 byte

b,o,s,t="bottles of beer","on the wall","bottle of beer",".\nTake one down and pass it around,"
i=99;exec'print i,b,o+",",i,b+t,i-1,b,o+".\\n";i-=1;'*97
print"2",b,o+", 2",b+t+" 1",s,o+".\n\n1",s,o+", 1",s+".\nGo to the store, buy some more, 99",b,o+"."

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.

Loovjo
sumber
5

Julia, 227 215 213 byte

w=" on the wall"
b=" bottles"
o=" of beer"
k=b*o
for n=99:-1:1
println("$n$k$w, $n$k.
$(n>1?"Take one down and pass it around":"Go to the store and buy some more"), $(n>1?"$(n-1)$(k=b*"\b"^(n<3)*o)":"99$b"o)$w.
")end

Ini menggunakan interpolasi string ( "$variable") dan terner untuk membangun output dan mencetaknya ke STDOUT.

Disimpan 14 byte berkat Glen O!

Alex A.
sumber
1
Daripada (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 menggunakan while n>0lebih for n=99:-1:1(yang memungkinkan kondisi pada akhirnya menjadi lebih sederhana, dan menghindari kebutuhan terpisah untuk n=99)?
Glen O
Juga gunakan baris baru aktual sebagai ganti \ndan 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.
Glen O
Sebenarnya, usulkan usul sementara untuk - Saya baru sadar bahwa Anda harus mengurangi satu ketika melakukan angka terakhir di setiap ayat, jadi tidak ada keuntungan bersih.
Glen O
@ GlenO Terima kasih seperti biasa untuk saran-saran hebat!
Alex A.
1
Saya berharap bisa hanya menyarankan perubahan - agak konyol bahwa itu tidak mengizinkan opsi itu jika Anda punya cukup perwakilan untuk melakukan pengeditan tanpa penerimaan penjawab asli. Saya benar-benar minta maaf jika saya melakukannya dengan cara apa pun karena melakukannya. Saya baru saja memindahkan bagian evaluasi "botol bir" sampai akhir, jadi itu hanya perlu dilakukan satu kali, dan menginisialisasinya. Saya juga menggunakan backspace bukannya "s" bersyarat untuk menghemat sedikit.
Glen O
5

JavaScript ES6, 214 byte

Sunting: Menghapus semua kode sebelumnya, lihat pengeditan jika Anda ingin melihat kode yang lebih lama.

Munculan terbatas:

p='.';o=" of beer";e=o+" on the wall";i=99;u=m=>i+" bottle"+(i==1?'':'s');while(i>0){alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, 99 bottles"+e)+p)}

Diperluas:

p='.';
o=" of beer";
e=o+" on the wall";
i=99;
u=m=>i+" bottle"+(i==1?'':'s');
while(i>0){
    alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, 99 bottles"+e)+p)
}

@commenters: Terima kasih atas gagasan fungsi panah, menyimpan 15 byte

Untuk bir tanpa batas, gunakan saja kode ini di sini, 212 byte

p='.';o=" of beer";e=o+" on the wall";i=99;u=m=>i+" bottle"+(i==1?'':'s');while(i>0){alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, "+u(i=99)+e)+p)}
ManaMan
sumber
1
Saya tidak dapat menjalankan kode, browser / lingkungan apa yang Anda gunakan? "SyntaxError: missing; before statement" Juga, lihat fungsi panah!
Stefnotch
Butuh beberapa saat untuk menemukan kesalahan sintaks +o'seperti yang kemudian diubah menjadi +o+'. Juga melihat peluang untuk mengubah perulangan dan jawaban. Akan memeriksa fungsi panah sekarang :)
ManaMan
1
232 byte untuk solusi terakhir: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)
Generic User
Setelah beberapa bermain-main, saya tetap berpegang pada whileloop saya dan saya akan segera memposting kode yang dihasilkan. Terima kasih atas ulasan kode! :)
ManaMan
5

CJam, 149 148 146 144 138 137 134 byte

00000000: 39 39 7b 5b 22 2c 2e 22 22 01 bd 8f 2d b4 49 b5 f5  99{[",.""...-.I..
00000011: 9d bd 21 e8 f2 72 27 df 4d 4f 22 7b 32 36 39 62 32  ..!..r'.MO"{269b2
00000022: 35 62 27 61 66 2b 27 6a 53 65 72 28 65 75 5c 2b 2a  5b'af+'jSer(eu\+*
00000033: 7d 3a 44 7e 4e 4e 32 24 32 3e 29 34 24 4a 3c 5c 4e  }:D~NN2$2>)4$J<\N
00000044: 5d 73 27 78 2f 39 39 40 2d 73 2a 7d 2f 27 73 2d 5d  ]s'x/99@-s*}/'s-]
00000055: 22 07 9c 4b a2 4e 15 d7 df d5 82 88 c9 d9 a7 ad 37  "..K.N..........7
00000066: 16 7e 76 22 44 33 35 2f 28 5d 22 41 90 1d b1 f3 69  .~v"D35/(]"A....i
00000077: ba 3d 05 45 81 50 af 07 e4 1b 38 f7 19 22 44        .=.E.P....8.."D

Hexdump 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:

99{[", X bottles of beer on the wall."NN2$2>)4$J<\N]s'X/99@-s*}/'s-]"Take one down and pass it around"*35/("Go to the store and buy some more"\

Bagaimana itu bekerja

99{         e# For each I in [0 ... 98]:
  [         e# 
    ",."    e#     Push that string.
    "…"     e#     Push a string.
    {       e#     Define a decoder function:
      269b  e#       Convert the string from base 269 to integer.
      25b   e#       Convert from integer to base 25.
      'af+  e#       Add 'a' to each base-25 digit.
      'jSer e#       Replace j's with spaces.
      (     e#       Shift the first character from the resulting string.
      eu    e#       Convert it to uppercase.
      \+    e#       Prepend it to the remaining string.
      *     e#       Join the string/array on the stack, using the 
            e#       generated string as delimiter.
    }:D~    e#     Name the function D and execute it.
            e#     This pushes ", x bottles of beer on the wall.".
    NN      e#     Push two linefeeds.
    2$      e#     Push a copy of the generated string.
    2>)     e#     Discard the first two characters and pop the dot.
    4$      e#     Push another copy of the generated string.
    J<      e#     Discard all but the first 19 characters.
            e#     This pushes ", x bottles of beer on the wall".
    \N      e#     Swap the string with the dot and push a linefeed.
  ]s        e#   Collect in an array and cast to string.
  'x/       e#   Split at occurrences of 'x'.
  99@-      e#   Rotate I on top of 99 and compute their difference.
  s*        e#   Cast to string and and join.
            e#   This replaces x's with 99-I.
}/          e#
's-         e# Remove all occurrences of 's' for the last generated string.
]           e# Wrap the entire stack in an array.
"…"D        e# Join the array with separator "Take one down and pass it around".
35/(        e# Split into chunks of length 35 and shift out the first.
            e# This shifts out ", 99 bottles of beer on the wall.\n\n".
]           e# Wrap the modified array and shifted out chunk in an array.
"…"D        e# Join the array with separator "Go to the store and buy some more".
Dennis
sumber
Basis 259 ? Menarik.
lirtosiast
Basis 256 memiliki pengembalian carriage, yang tidak berfungsi dengan penerjemah online. Untungnya, base 259 tidak menghasilkan karakter di luar rentang ISO 8559-1.
Dennis
Saya berasumsi CJam akan setidaknya 2 byte lebih pendek dari GolfScript - hampir sepele. Tidak mengharapkan 137!
primo
1
@primo Agar adil, sebagian besar penghematan berasal dari konversi dasar. Sedihnya, menggunakan basedua kali sudah menambahkan 8 byte di GolfScript ...
Dennis
5

C, 303 299 297 byte

#define B"%d bottle%s of beer"    
#define O" on the wall"
#define P printf(
#define V(n,m,S)q(n);P O);P", ");q(n);P S);q(m);P".\n");
*s[]={"","s"};q(n){P B,n,s[n>1]);}main(){for(int i=99;--i;){V(i+1,i,".\nTake one down and pass it around, ")P"\n");}V(1,99,".\nGo to the store and buy some more, ");}

Kompilasi dengan gcc -std=c99 -w.

firefrorefiddle
sumber
1
Golf turun hingga 300 byte: ... untuk (int i = 99; - i;) {V (i + 1, i, "....
Glenn Randers-Pehrson
@ GlennRanders-Pehrson Terima kasih. Saya juga menghapus linebreak sebelum main ().
firefrorefiddle
5

GolfScript, 143 byte

[99.{[', '\.' bottle''s of beer'@(:i!>' on the wall''.
'n].1>~;5$4<\'Take one down and pass it around'i}**'Go to the store and buy some more'](

Mungkin masih ada ruang untuk perbaikan. Mendekat dengan revisi akhir, saya pikir.

primo
sumber
3
Baru saja meningkatkan catatan GolfScript anagol sebesar 12 byte.
primo
5

Mathematica, 238 226 222 224 byte

Disimpan beberapa byte berkat Martin Büttner.

a={ToString@#," bottle",If[#<2,"","s"]," of beer"}&;b=a@#<>" on the wall"&;Echo[{b@n,", ",a@n,".
"}<>If[n<2,"Go to the store and buy some more, "<>b@99<>".","Take one down and pass it around, "<>b[n-1]<>".
"]]~Do~{n,99,1,-1}
alephalpha
sumber
5

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

# SETUP COUNTERS
>>+++[-<+++<+++>>]
>>++++++[-<++++++++++<++++++++++>>]<---<--->>

# SETUP CONSTANTS
>+++++[-<++++++>]<++>
>++++++++++[-<++++++++++>]<-->        # B
>++++++++++[-<+++++++++++>]<+>        # O
>++++++++++[-<++++++++++>]<+>         # E
>++++++++++[-<++++++++++>]<++>        # F
>++++++++++[-<+++++++++++>]<++++++>   # T
>++++++++++[-<++++++++++>]<++++>      # H
>++++++++++[-<+++++++++++>]<-->       # L
>++++++++++[-<+++++++++++>]<++++>     # R
>++++++++++[-<+++++++++++>]<+++++>    # S
>++++++++++[-<+++++++++++>]           # N
>++++++++++[-<+++++++++++>]<+++++++++># W
>++++++++++[-<++++++++++>]<--->       # A
>+++++[-<++++++>]<++>                 # SPACE
>++++[-<++++++++++++>]<---->          # Comma
>++++[-<++++++++++++>]<-->            # Stop
++++++++++>                           # Newline
>++++++++++[-<+++++++++++>]<--->      # K
>++++++++++[-<++++++++++>]            # D
>++++++++++[-<+++++++++++>]<++>       # P
>++++++++++[-<++++++++++>]<+++++>     # I
>++++++++++[-<+++++++++++>]<+++++++   # U

# BACK TO START
<<<<<<<<<<<<<<<<<<<<<<<<<
[>
    [
        -> # Dec x0 counter
        .> # Print 0x char
        .> # Print x0 char
        .>
        .>.>>>..>>.<<<<.>>>>>>. # Bottles
        <<<<<<<<<.
        >>.>>.       # Of
        <<<<.
        >.>>..>>>>>. # Beer
        <<<<<<<<.
        >>.>>>>>>>>. # On
        >>>.
        <<<<<<<<.>.<<<. # The
        <<<.
        >>>>>>>>>>>.>.<<<<<.. # Wall
        >>>>>>>.     # Comma
        <.
        <<<<<<<<<<<<<<<.>.- # Counter with decrement
        >.
        >.>.>>>..>>.<<<<.>>>>>>. # Bottles
        <<<<<<<<<.
        >>.>>.       # Of
        <<<<.
        >.>>..>>>>>. # Beer
        >>>>>>>.     # Stop
        >.           # Newline
        <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
        <<<.
        >>.>>>>>>>>.<<<<<<<. # One
        <<<.
        >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
        >>>. 
        <.<<.>>>>>>>>.  # And
        <<<<<.
        >>>>>>.<<<<<<<.<<<..    # Pass
        >>>>.
        >>>>>>>.<<<<<<<<<<<<<<<. # It
        >>>>>>>>.
        <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
        <<<<. # Comma
        <.
        <<<<<<<<<<<<<<<.>. # 0x and x0
        >.
        >.>.>>>..>>.<<<<.>>>>>>. # Bottles
        <<<<<<<<<.
        >>.>>.  # Of
        <<<<.
        >.>>..>>>>>. # Beer
        <<<<<<<<.
        >>.>>>>>>>>. # On
        >>>.
        <<<<<<<<.>.<<<. # The
        <<<.
        >>>>>>>>>>>.>.<<<<<.. # Wall
        >>>>>>>>.    # Stop
        >..   # Newline x2
        <<<<<<<<<<<<<<<<<<<      # Reset loop
    ]
    <-
    >+++++++++
    >.>.
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>.     # Comma
    <.
    <<<<<<<<<<<<<<<.- # 0x with decrement
    >.+++++++++ # x0 with increment
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    >>>>>>>.     # Stop
    >.           # Newline
    <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
    <<<.
    >>.>>>>>>>>.<<<<<<<. # One
    <<<.
    >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
    >>>. 
    <.<<.>>>>>>>>.  # And
    <<<<<.
    >>>>>>.<<<<<<<.<<<..    # Pass
    >>>>.
    >>>>>>>.<<<<<<<<<<<<<<<. # It
    >>>>>>>>.
    <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
    <<<<. # Comma
    <.
    <<<<<<<<<<<<<<<.>. # Counter
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.  # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>>.    # Stop
    >..   # Newline x2
    <<<<<<<<<<<<<<<<<<<<      # Reset outer loop
]
>-- # Decrement counter to only count from 7
# Last 8 loop
[
    -> # Dec counter
    >. # Print x0 char    
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>.     # Comma
    <.
    <<<<<<<<<<<<<<.- # x with decrement
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    >>>>>>>.     # Stop
    >.           # Newline
    <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
    <<<.
    >>.>>>>>>>>.<<<<<<<. # One
    <<<.
    >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
    >>>. 
    <.<<.>>>>>>>>.  # And
    <<<<<.
    >>>>>>.<<<<<<<.<<<..    # Pass
    >>>>.
    >>>>>>>.<<<<<<<<<<<<<<<. # It
    >>>>>>>>.
    <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
    <<<<. # Comma
    <.
    <<<<<<<<<<<<<<. # Count
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.  # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>>.    # Stop
    >..   # Newline x2
    <<<<<<<<<<<<<<<<<<<     # Reset loop
]
# Last but 1 exception
>>. # Counter
>.
>.>.>>>..>>.<<<<.>>>>>>. # Bottles
<<<<<<<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>.     # Comma
<.
<<<<<<<<<<<<<<.- # x with decrement
>.
>.>.>>>..>>.<<<<.>>>>>>. # Bottles
<<<<<<<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
>>>>>>>.     # Stop
>.           # Newline
<<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
<<<.
>>.>>>>>>>>.<<<<<<<. # One
<<<.
>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
>>>. 
<.<<.>>>>>>>>.  # And
<<<<<.
>>>>>>.<<<<<<<.<<<..    # Pass
>>>>.
>>>>>>>.<<<<<<<<<<<<<<<. # It
>>>>>>>>.
<.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
<<<<. # Comma
<.
<<<<<<<<<<<<<<. # Count
>.
>.>.>>>..>>.<<<<. # Bottle
<<<.
>>.>>.  # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>>.    # Stop
>..   # Newline x2
# Last 1 exception
<<<<<<<<<<<<<<<<<. # Counter
>.
>.>.>>>..>>.<<<<. # Bottle
<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>.     # Comma
<.
<<<<<<<<<<<<<<.++++++++ # x with reset to 99
>.
>.>.>>>..>>.<<<<. # Bottle
<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
>>>>>>>.     # Stop
>.           # Newline
>----        # Change K to G
>>+++++++++  # Change P to Y
>++++        # Change I to M
<<<.<<<<<<<<<<<<<<<. # Go
<<.
>>>>>.<<<.           # To
<<.
>>>>>.>.<<<.         # The
<<<.
>>>>>>>>>.<<<<.<<<.>>>>>>.<<<<<. # Store
<<<.
>>>>>>>>>>>>.<<.>>>>>>>>.       # And
<<<<<.
<<<<<<<<<<<<.>>>>>>>>>>>>>>>>>>>>.<<. # Buy
<<<<<<.
<<<<.<<<<<<<.>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<<. # Some
>>>>>>>>>>.
>>>>>>>.<<<<<<<<<<<<<<<<<<.>>>>>>.<<<<<. # More
>>>>>>>>>>>.
<.
<<<<<<<<<<<<<<..  # 99
>.
>.>.>>>..>>.<<<<.>>>>>>. # Bottles
<<<<<<<<<.
>>.>>.  # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>>.    # Stop
>.   # Newline x2

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 .

Hywel Rees
sumber
4

PHP, 251 byte

Ini menjelaskan masalah jamak / tunggal.

<?php for($i=99;$i>0;$i--){$b=" of beer";$s=" bottles$b";$r=" bottle$b";$w=" on the wall";$h=$i-1;echo$h>=1?"$i$s$w, $i$s.\nTake one down and pass it around, $h".($h<2?$r:$s)."$w.\n\n":"$i$r$w, $i$r. \nGo to the store and buy some more, 99$s$w.\n\n";}

Dapat dibaca:

for ($i=99; $i > 0; $i--) {
  $b = " of beer";
  $s = " bottles$b";
  $r = " bottle$b";
  $w = " on the wall";
  $h = $i - 1;
  echo $h >= 1 ? "$i$s$w, $i$s.\nTake one down and pass it around, $h" . ($h<2 ? $r : $s) . "$w.\n\n" : "$i$r$w, $i$r. \nGo to the store and buy some more, 99$s$w. \n\n";
}
Sven
sumber
4

Beam , 1141 1109 byte

Saya 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.

P'P''''>`++++++)++'''P>`+++++++++++++)'''''''''''P+++++++++++++`P```>`++\ v@@++++++++++L(`<@+p'''''''''PL<
v``P''(++++++`<P'''''''''(++++++++`<L```P'+++++P'+++P'++++++P'++++P''''(/> p++@---@``p@'''''p+++@`> `)''' 'p-@''p\
>''p:'p@'p@'\>n'   >`>`)'''p@''''p@\>n'''p@''''p@-@````p@'''''p@`>`)'''''/v  `P+p``@p'''(`<@-p''''''''P'+up(`<`@@/
^/``@@p'@p''/ >'''\ /-p'@p'@p``@p``/`>-'P''''''''p+@>`)''p`n`L++++++++++@S 'p@````p@````p@'''''p@`p@````p@'''''p@```p++@---@``p@'''''p-@+@`p@+++@``p-@``p@'p-@'''p-@```p++@`p@'p@''''p+@++++@`````p@'''''p-@`p@--@``p-@``p@''''p--@p@+++@``p-@''''p-@>`)'''p@'p+:`p@'p@'''p@'p@@``p@`p-@'''p-@`>`)'''p@''''p@``p@``p@'p@'p-@@'''p--@`>`)'''p@''''p@-@````p@'''''p@`>`)'''''p++@---@``p@'''''p+++@`>`)''''p-@''p@@'''p+@H
^\p@`p-@```p`//'''/ \@@'''p--@`>`)'p/``````@pS@++++++++++L`<vP+p`P-p`P-p`@ p'''(`<@-p''''@--p``@-p`@+p'@p`@--p''''@-p'@p`````@p'''@+++p''@p```\
^             \'p-@/v               \ p-@''p-@`p-@``p@''''p@ -@``p-@``p@'p ++@'''p@'p+++@`p-@````p@'p-@'''p-@```p++@`p@''''p+@```p-@''''p-@@``/
^                   <                                       <             <

Cobalah di tumpukan tumpukan di sini

MickyT
sumber
4

PHP, 250 246 244 233 228 byte

Saya percaya ini adalah yang terkecil sejauh ini. Ini didasarkan pada bidikan 247, dengan beberapa modifikasi untuk meminimalkan lebih lanjut.

Diperkecil

<?php $b=99;function x($n){return"$n bottle".($n-1?'s':'')." of beer";}$y=" on the wall";while($b){$c=x($b);echo"$c$y, $c.\n",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.\n\n";}

Diperluas

<?php

$b=99;
function x($n){return"$n bottle".($n-1?'s':'')." of beer";}
$y=" on the wall";
while(b){
    $c=x($b);
    echo"$c$y, $c.\n",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.\n\n";
}
Phroggyy
sumber
1
Karena Anda dapat menjalankan PHP dari baris perintah php -ryang setara perl -edan serupa, dapat diterima untuk menghilangkan tag pembuka. Lihat diskusi terkait di Menjalankan PHP dengan -ralih - alih tag kode .
manatwork
Ah, terima kasih @manatwork, kurasa aku bisa mendapatkan milikku sedikit lagi.
Phroggyy
while($b)bekerja dengan baik.
frnhr
Ada baris baru ekstra di akhir.
frnhr
Terima kasih untuk seluruh sarannya! Baris baru diperlukan meskipun, untuk memiliki garis di antara ayat
Phroggyy