“99 Şişe Bira”


71

Sözleri mümkün olan en az sayıda bayt olarak 99 Şişe Bira'ya çıkaran bir program yazın .

Şarkı sözleri:

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.

Kurallar:

  • Programınız STDOUT'a veya kabul edilebilir bir alternatife giriş yapmalı veya bir fonksiyondan döndürülmeli (takip eden bir yeni satır olsun veya olmasın).
  • Programınız dolu, çalıştırılabilir bir program veya işlev olmalıdır.
  • Bu zorluğa 0 baytlık bir cevap göndermek için özel olarak yazılmış dillere izin verilir, özellikle ilginç değildir.

    Gönderimin test edilebilmesi için bir tercüman olması gerektiğini unutmayın. Daha önce uygulanmamış bir dil için bu tercümanı kendiniz yazmanıza izin verilir (ve hatta teşvik edilir).

  • Bu, HQ9 + veya 99 çıktılarından farklıdır. Bu dillerde yazılmış tüm cevaplar silinecektir.

Bu bir katalog mücadelesi olduğu için, bunun için en kısa çözümü içeren dili bulmakla ilgili değil (boş programın hileyi yaptığı bazı yerler var) - bu her dilde en kısa çözümü bulmakla ilgili. Bu nedenle, hiçbir cevap kabul edilmiş olarak işaretlenmeyecektir.

Katalog

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

nerede NGönderinizden boyutudur. Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

## Perl, 43 + 2 (-p flag) = 45 bytes

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


13
Bunu kim yaklaştıysa diğeri bir popülerlik yarışması ...
Doktor

21
Bu bir HQ9 + Tercüman golf oluşturma alt görevinin .
Geobits 18:15

4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Henüz VTCd'im yok, hala bu konuda ne hissettiğime karar veriyorum. Her iki şekilde de, başka bazı cevaplar (ya onlardan parçacıkları) ise / yapıştırılan kopya doğrudan olabilir mi rekabetçi kalan dupe-lık için olağan bir test olan.
Geobits

13
Quartata'nın birkaç hafta önce 99BB kataloğunu sandboxing ve göndermeyi planladığını unutmayın.
Alex A.

13
@GamrCorps Lütfen, meydan okuma başladıktan sonra kuralları gereksiz yere değiştirmeyin. Çıktıdaki karakterlerin hiçbiri isteğe bağlı olmamalıdır.
Kasım’da 18:15

Yanıtlar:


43

C #, 285 298 289 Bayt

(Code golf oynamaya ilk girişim ...)

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");}}

Biraz unungolfed:

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");
        }
    }
}

10
ipucu - string yerine var kullanın :)
Belfield

2
2 bayt " bottle"format argümanıyla değiştirmekten daha iyi bir yol olduğuna emin olduğumdan, 3 şişe örneğimin gözlerimi incittiğinden eminim ...
Sven Writes Code

4
b==1ile değiştirilebilir b<2.
LegionMammal978

2
Sizin döngü için böyle yazılmış olabilirfor(int b = 100; b--> 1;)
Yassin Hajaj

2
Öyleyse belki son yazılan bir satıra izin verilip verilmeyeceğine karar vermesini beklemeliyiz.
Florian Bach

31

Motorola MC14500B Makine Kodu , 46612 bayt

Uzunluk sebeplerinden dolayı programı buraya gönderemiyorum. Ancak, burada onaltılık ve burada ikili ( 0s ile dolgulu ) bulunabilir.


Bu, Motorola MC14500B makine kodunda mümkün olan en kısa programdır. Sadece 1000ve 1001( 8ve 9sırasıyla); Her çıktı için bir adet opcode.

93.224 yarım bayt opkod kullanır ve şarkı sözlerini her seferinde bir bit çıkarır. Bu mümkün olan tek çıkış yöntemidir.

İlgilenenler için, çıktı # 3 (16) pimine, G / Ç pimine gider.


açıklama

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

Kayıt başlar 0.


Kod bilgisi

  • Onaltılık 93224 olan 8lar ve 9uzun s.

  • İkili 745.792 olan 1lar ve 0uzun s.

  • Kodu üretmek için aşağıdaki Python 2 kodunu kullandım. Girdi 0ikili ve 1onaltılık için.

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

4
Lütfen bana bir ip teli jeneratörü olmadan hepsini dışarı yazmadığını söyle ...: c
Addison Crump

1
Yeni "Kod Trivia" bölümüne bakın: P @VoteToClose
Zach Gates,

Bağlantılar koptu :(
ETHproductions

Eve döndüğümde düzelteceğim. Bunun için üzgünüm): @ETHproductions
Zach Gates,

28

Vitsy, 0 Bayt



Cidden benden bir şey yok. (@Mego çok üzgünüm.;))

Çevrimiçi deneyin! (Sadece "Çalıştır" ı tıklayın)


7
o_o Simplex'in sıfır baytta yapması gereken ilginç bir şeye ihtiyacım var: P
Conor O'Brien

4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Sanırım, "Simplex'in sıfır baytta yapması için yararlı bir şeye ihtiyacım var ."
Martin Ender

3
@VoteToClose - Bu nasıl çalışır? Gerçekten bilmiyorum, ben kod golfçü değilim, ama buraya gelmekten ve insanları ve dilleri yaparken görmek hoşuma gidiyor. Ama bunu anlayamıyorum. +1 çünkü etkileyici görünüyor!
Jonnny

1
@Jonnny Tercümanın dosya işleyicisini görmek için buraya tıklayın. Dosya işleyicisi bir dosyanın sıfır bayt içerdiğini görecek ve öyleyse sözleri yazdıracaktır. c:
Addison Crump

1
@Jonnny Evet - devam eden bir çalışma, bir gün, Cidden daha iyi olacak. Ama şimdilik ... Bekliyoruz. Eğer iyi bir golf dili istiyorsanız, Cidden cevabı görün, içinde çılgınca şeyler var.
Addison Crump

27

Cidden , 1 bayt

N

Yığın boşsa (başlangıçta olan), Nsözleri iter. Sonra örtülü olarak EOF'de basılıyorlar.

Ciddenly tercüman tamir için @Mego teşekkürler.


22
Martin, Merhaba Dünya'nın mücadelesinde, "> lütfen golf oynamak için çok fazla olmayan dillerde sıkıcı (ama geçerli) cevapları küçültmeyin - bunlar, bir kataloğu mümkün olduğu kadar eksiksiz bir şekilde derlemeye çalıştığından, bu soru için hala faydalıdır. Ancak, öncelikle yazarların gerçekte kodu golf oynamak için çaba harcadıkları dillerde cevapları vurgulayın. " Bu cevap ilginç değil, ancak geçerli ve en kısa çözüm.
lirtosiast

1
Soruyu okurken Ciddi bir cevap göndermeyi görmek için sabırsızlanıyorum. Ama beklememe bile gerek yok gibi görünüyor. :)
Hexaholic

8
Seriusly ????????
Vajura

1
Çözümünüzü kullanmadan bekliyorum N:)
Mego

1
Evet - dört oy kullandım ve cevabım geçerli. Buradaki en iyi yorumda ne söylendiği konusunda hemfikirim.
Addison Crump

19

JavaScript ES6, 230 218 198 196 192 188 185 bayt

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()+'.')

Sadece temiz ve anlaşılabilir görünmesini sağlarken sadece bir kaç byte keserek.

En son 3 revizyon:

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+'.')

1
Değişkenleri döngü kontrolleri dışına koyarak 2 bayt: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+".")
Genel Kullanıcı

Bu 2 baytı kodunuzda saklayan şey bu değil. Aslında etrafındaki parantezin çıkarılmasıdır (--x <1). Şimdilik, değişkenleri hepsini bir arada tutmak için okunabilirlik amacıyla for ifadesinde bırakacağım.
Adam Dally

1
@Stefnotch Merak ediyorsanız, bu düzenlemeyi işlev çağrılarımı inceleyerek buldum ... ama bunun sizin amacınız olduğunu sanmıyorum. Tavsiyeniz hala son çare olarak da geçerli.
Adam Dally,

1
@ Paŭlo Ebermann Her ayet için uyarı yürütür, ancak konsolda yürütmek için onu konsol.log olarak değiştirmekte özgürsünüz, bu onu 194 bayt yapar. Ayrıca tüm sözleri tek seferde uyarmak Firefox'ta çalışmaz, en azından ... 5-10 ayeti keser.
Adam Dally

1
@Stefnotch. Bu 1-x şu anda yararlı olduğunu kanıtlıyor.
Adam Dally

18

JavaScript ES6, 328 318 307 305 bayt

Anonim bir işlevdir. f=İşlev yapmak ve f()çalıştırmak için başlangıçta ekleyin .

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"))

2
Sadece bir uzun dize bitiştirme
işleminden

9
Neden rastgele ASCII sanatı başka bir siteden kopyalandı?
feersum

7
Özellikle işe yaramadığından, uyarıyor:,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
Jenerik Kullanıcı

14

C, 197 196 bayt

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"));}

Sanırım bu yaklaşımın sınırına ulaştım.


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();}tek başına 126 bayttır; bu nedenle, bir kişi tellerin bölümlerini önemli bir ek yük olmadan sıkıştırmanın veya yeniden kullanmanın bir yolunu bulmadığı sürece sert bir alt sınırı temsil eder. Genel olarak yaklaşım sınırına ulaştığınızdan şüpheleniyorum, artı veya eksi birkaç bayt.
Ray

12

Java 304 301 300 295 Bayt

İlk kez bir cevap gönderme. Enum kullanabileceğimizi ama nasıl bulacağımızı duydum.

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));}}

Ungolfed

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));
    }
}

Teşekkür etmek quartata, J AtkinveBenjamin Urquhart


Sen kullanarak 2 bayt kaydedebilirsiniz i<2yerine i==1ve i>2burada: i!=2.
J Atkin

@JAtkin Teşekkürler. İlki tamam, çıkış aynı kalır. Fakat ikincisi için, eğer değişikliği yaparsam, son satır basılacak 99 bottleve 99 bottles
basmayacaktır

1
Görünüşe göre, bu java için iyi, ama bu groovy için iyi çalışmıyor (213 vs 245 bayt).
J Atkin

1
Gerçekten de, harika JVM dillerinden biridir. Çoğu uygulama için groovy kodu, aynı şeyi yapan java kodundan daha kısadır. goovy-lang.org
J Atkin

1
@BenjaminUrquhart Harika! Değiştirildi!
Yassin Hajaj

11

Zararlı Olarak Görülen Şablonlar Sayılan , 667 bayt

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

Genişletilmiş çeşit:

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

11

Haskell, 228 223 bayt

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

İşlev f, sözleri içeren bir dize döndürür.


10

/// , 341 bayt

/-/\/\///+/ 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^.

Bu kodun doğru bir şekilde açıklanması için 99 yıl gerekir.

Muhtemelen sadece her aşamanın sonucunu eklerdim ...

Temel olarak, bu sözleri tekrar tekrar sıkıştırır (her cevap /// ).

Çevrimiçi deneyin!

Dekompresyonun her aşaması

Değişimlerden sonra yapılan değiştirmeler dizeye sahip olacağından, //sıklıkla görünecektir.

Ben sıkıştırmak için karar yeterince sık görünür //içine -.

Bu sıkıştırıldığında, sonuç aşağıdaki gibidir:

/+/ 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^.

Dize bottlesadece üç kez belirdi, ama yine de sıkıştırdım +:

/)/\/&\/<\/
//(/\/\/?\/ //>/ 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^.

Daha sonra, )karşılık gelen /&/</bir yeni satır takip ve (karşılık gelen //?/ genellikle daha sonra kullanılacak olan desenler olan,:

/>/ 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^.

Şimdi, bazı yararlı dizgileri açacağız:

  • > sıkıştırmasını açar bottles of beer
  • ^ sıkıştırmasını açar bottles of beer on the wall
  • !için açar ^,burada, ^yukarıda biridir.
  • $için açar >.\nnerede, >ilk kuraldır ve \nbir satır olduğunu.
  • @$tarafından izlenen sıkıştırmayı açar Take one down and pass it around,, $yukarıdaki kural budur.

Sıkıştırılmış kod şimdi olur:

/*/?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.

9

Vim, 139 bayt

Xsot nedeniyle 6 bayt kaydedildi .

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

Bu benim görünüşe göre popüler olmasına rağmen, Vim komutlarını golf oynamaya ilk girişimdi . Finali ZZbayt sayısına dahil ettim (dosyaya yaz ve çık) kabul edilen norm gibi görünüyor.

Yan not: görev tamamlandı .


açıklama

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

1
Hafif iyileştirme: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 bunun için teşekkürler. Bir şekilde tamamen göz ardı /ve ?.
primo

Bu gelişmeyle birlikte anagolde 153'e ulaşmak mümkün
xsot

@xsot anladım;)
primo

8

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

Bu golf oynamak oldukça zor ...
Düzen 1: Biri beni çok şaşırttı, en iyi Javascript cevaplarına sahip olmak istersem daha çok denemek zorundayım.
Düzenleme 2: Dürüst olmak gerekirse, o kadar çok golf oynamayı başardığımı sanmıyorum!

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+`.`)

Bir yerlere dağıldım mı? Ayrıca alertkodumu test etmek istiyorsanız, onunla değiştirmek için de özür dilerim console.log.

Şu anda, dikkat çekici başka bir Javascript cevabı var: "99 Bottles Beer" . Bunu kontrol et! : D


Koşullarınızı tekrar inceleyeceğim ve bir kaç baytı kesebilmelisiniz. Yine de yetişmek için iyi bir çaba!
Adam Dally,

@AdamDally Tamam! : D Ama başkalarının eşyalarını kopyalamaktan hoşlanmıyorum ... (kodunuzu kopyaladıysam suçluluk
duyarım

@AdamDally Yay, işlevlerimi bozdum ve bir sürü bayt kurtardım! (
Çizilen

Mükemmel! Tamamen gözden kaçırdığım alternatif bir yol olmadığı sürece, ikimizin de sonuna yaklaştığımızı hissediyorum.
Adam Dally

7

JavaScript ES6, 210 209 205 199 198 196 bayt

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)

Bu, C gönderimimin kaba bir çevirisidir. Ben aslında javascript bilmiyorum bu yüzden kesinlikle iyileştirilmesi için oda var.

Düzenleme: Düzgün, backticks keşfetti


console.logile değiştirebilir alertve "yerine" kullanabilirsiniz. Sonra \ n'yi yeni bir satırla değiştirebilirsiniz. (Şablon satırları için keneler kullanılır, bu satırların yeni satırları olabilir ...) Ayrıca beni yenmek için tebrikler!
Stefnotch

1
Sanırım bir başkası beni geçmedikçe console.log, test edilmesi kolay olduğu sürece çıktıyı yalnız bırakacağım . Her neyse, beni geri tepmelere maruz bıraktığın için teşekkürler!
xsot

Wohoo, seninkini aştı! Ayrıca, || || Kodunuzda, kesinlikle kullanışlıdır ... (Meh, değiştirebilirsiniz console.log, ve benim zaferim hiçbir şeye indirgenmeyecek .. XD)
Stefnotch

1
Yetişmek için zorlu olduğunu kanıtlıyorsun! Ne yazık ki, kodunuzun dökümünü görmek ilginç olurdu.
Adam Dally

1
@AdamDally Temel olarak, her ayet aşağıdaki yapıya sahip 3 parçaya ayrılır: %d bottle%s of beer%s%s. Her ayette endeksi (şişe sayısı), i/3|0her alt dizinin endeksi basit olduğu gibi hesaplanır i%3.
xsot

7

Brainfuck, 743 bayt

++++++++++>>--->++++>------>-->>++>+>>+>->++[[>+++++++[>++>+>+<<<-]<-]+<+++]>>>>>--
>>-->>++>->+++[<]>[-<<+[<->-----]<---[<[<]>[->]<]+<[>-]>[-<++++++++++<->>>]-[<->---
--]<+++[<[<]>[+>]<]<->>>[>[[>]<<<<.<<<<---.>>>-.<<<++++.<.>>>.-.<<.<.>-.>>+.<+++.>-
.<<<.>---.>>.<<+++.<.>>>++.<<---.>----..<<.>>>>--.+++<<+.<<.>.>--.>-.<+++.->-.+<<++
+.<<.>.<<<<-<]>[[>]<<<-.<<<.<<<.>>.>.<<< . > > .<++++.---.<.>>-.+.>.<--.<.<.>----.>
>-.<<+++.<.>--.>+++.++++.<<.>>------.>+.--.<<+++.<.>>>.++.<-.++<.-<<.>.<<<<-<<<++++
+++++.>>>]<+>]<++[<<[<]>[.>]>>>>>>.>--.>>.<..->>.<<<+++.<<<<-[>>>>>.[<]]<[>]>+>>>.>
>>.<<+.<.>----.+++..->-.++[<<]<-[>>>>>.>>>.-.+<<<.>>.<++++.---.<.>>+++.---<----.+++
>>>..[<<]]<<[>]>-[>>>>++.--<.<<<+[>>>.<<<<]>[>]<-<]>>[>>.>.<<<<]>[<<++>]<[>]<-]>+>]

Çevrimiçi deneyin!

Yukarıdaki talimatlar kaydetmek için birkaç yerde sarma hücreleri kullanır. Ayrıca 755 komutunda paketsiz bir versiyon hazırladım .


sıkıştırılmamış

Aşağıdaki, Brainfuck Annotation Language içindeki bir poliglottur .

; 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
  >+>
]

6

Python 2,204 bayt

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

Teknik özellik, boşluk olarak oldukça açık bir şekilde belirtilmiştir, bu yüzden burada son satırın tek bir son satırın olması gerektiğine inanıyorum. Spesifikasyon başka türlü netleşmezse, bu cevabı güncelleyeceğim.

Bununla çok mutluyum, ama anarşi golf oynamak, bunun muhtemelen farklı bir yaklaşımla golf oynayabileceğini hissediyorum.


6

Labirent , 1195 1190 932 bayt

"{"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"""

Bu biraz aşırı ...

Labyrinth özellikle dizeleri basarken iyi olmasa da (çünkü tüm karakter kodlarını basmanız gerekir), daha uzun ama daha kısa çizgiler kullanarak ve ızgara rotasyonuyla daha da çılgıncalaşarak bundan daha iyisini yapmanın mümkün olacağını düşünüyorum.

Herhangi bir golf sahasında yapılan iyileştirmelerin bu kodun yapısını büyük ölçüde değiştireceğini düşündüğümden, nasıl daha fazla golf oynayacağımı bilemedene kadar bir açıklama bekleyeceğim.


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

Bu i/2fikri Sp3000'in cevabından aldı .


6

Windows Toplu İşi, 376 bayt

Çok çok uzun ve çirkin:

@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.
))

5

Python, 254 bayt

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+"."

Oldukça basit, en yaygın ifadelerin bazılarını atayın, her biti 99'dan 3'e yazdırın, sonra değişkenleri ve bazı dizeleri bir araya getirerek son satırları yazdırın.


5

Julia, 227 215 213 bayt

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

Bu "$variable", çıktıyı oluşturmak ve STDOUT'a yazdırmak için string interpolation ( ) ve ternaries öğesini kullanır .

Glen O sayesinde 14 byte kurtarıldı!


1
Aksine (n>1?" bottles":" bottle")" of beer", kullanım " bottle""s"^(n>1)*" of beer"- *gerekli olduğuna dikkat edin (n<1)çünkü aksi halde (n>1)" of beer"güç olarak uygulamaya çalışır . Ayrıca, while n>0aşırı kullanımın for n=99:-1:1(bu, durumun daha basit olmasını sağlayan ve ayrı ihtiyaçlara karşı koyan n=99) kullanmanın yararı var mı?
Glen O

Ayrıca, yerine gerçek yeni satırları kullanın \nve bir karakteri kaydetmek için orta kısmı enterpolasyona ( ",n>1?...","kullanım yerine $(n>1?...")) , çevirin ve şartlı içini bir sonraki parçadan önceki haline getirin, bu nedenle yalnızca bir kez yazılması gerekir.
Glen O

Aslına bakarsan, şu süre için öneriye değin - Her ayette son sayıyı yaparken bir tane çıkarmanız gerektiğinin farkına vardım, bu yüzden net bir faydası yok.
Glen O

@GlenO Her zaman olduğu gibi harika öneriler için teşekkür ederiz!
Alex A.

1
Sadece bir değişiklik önerebilmeyi umuyordum - orijinal cevabın kabulü olmadan bir düzenleme yapmak için yeterli sayıda temsilciniz varsa bu seçeneğe izin vermemesi biraz saçma. Bunu yapmak için parmak uçlarına basarsam özür dilerim. Sadece "bira şişesi" kısmının değerlendirmesini sonuna kadar taşıdım, bu yüzden sadece bir kez yapılması gerekiyor ve başlattım. Ayrıca biraz tasarruf için koşullu "s" yerine bir geri alma kullandım.
Glen O,

5

JavaScript ES6, 214 bayt

Düzenleme: Önceki tüm kodları siler, eski kodu görmek istiyorsanız düzenlemeleri görüntüleyin.

Sınırlı pop-up’lar:

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)}

Expanded:

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)
}

@ yorumcular: Ok işlevler fikri için teşekkürler, 15 bayt kurtardı

Sonsuz bira için sadece bu kodu kullanın, 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)}

1
Kodun çalışmasını alamıyorum, hangi tarayıcıyı / ortamı kullanıyorsunuz? "SyntaxError: missing; deyimden önce" Ayrıca, ok işlevlerine bir göz atın!
Stefnotch

+o'Daha sonra değiştirildiği gibi sözdizimi hatasını bulmam biraz zaman aldı +o+'. Ayrıca döngü ve cevap değiştirmek için fırsat gördüm. Şimdi ok fonksiyonlarını kontrol edecek :)
ŽaMan

1
Son çözüm için 232 bayt: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)
Genel Kullanıcı

Biraz oynadıktan sonra, döngüme bağlı kalıyorum whileve yakında ortaya çıkan kodu göndereceğim. Kod incelemesi için teşekkür ederiz! :)
ManaMan

5

CJam, 149 148 146 144 138 137 134 bayt

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

Yukarıdaki hexdump ile tersine çevrilebilir xxd -r. CJam tercümanında çevrimiçi olarak deneyin .

9 ekstra byte, toplam 143 byte , basılamaz karakterlerden kaçınabiliriz:

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"\

Nasıl çalışır

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

Üs 259 ? İlginç.
lirtosiast

Temel 256, çevrimiçi tercüman ile çalışmayan taşıma iadeleri aldı. Neyse ki, taban 259, ISO 8559-1 aralığının dışında hiçbir karakter üretmiyor.
Dennis

CJam’ın GolfScript’ten en az 2 bayt daha kısa olacağını düşünmüştüm - neredeyse önemsizce. 137 olsa beklemiyordum!
primo

1
@primo Adil olmak gerekirse, tasarrufların çoğu temel dönüşümden kaynaklanmaktadır. Ne yazık ki, baseiki kez kullanmak zaten GolfScript’e 8 bayt ekliyor ...
Dennis

5

C, 303 299 297 bayt

#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, ");}

İle derleyin gcc -std=c99 -w.


1
300 byte'a kadar Golf: ... (int i = 99; - i;) {V (i + 1, i, "....
Glenn Randers-Pehrson

@ GlennRanders-Pehrson Teşekkürler. Ayrıca main () işleminden önce satır sonunu da kaldırdım.
firefrorefiddle,

5

GolfScript, 143 bayt

[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'](

Hala iyileştirme için oda olabilir. Sanırım son revizyona yaklaşmak.


3
Sadece gelişmiş anagol GolfScript kaydını 12 byte ile.
primo

5

Mathematica, 238 226 222 224 bayt

Martin Büttner sayesinde birkaç bayt kaydedildi.

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}

5

Brainfuck, 4028 bayt

Bu oldukça çirkin. Çok fazla çoğaltma ve çok verimsiz, bu yüzden herhangi bir ödül kazanamayacak. Ancak başladım ve bitirmeye karar verdim.

Bunu geliştirmeye çalışabilirim, ama muhtemelen yapmayacağım, çünkü açıkçası beynim becerildi.

golfed

>>+++[-<+++<+++>>]>>++++++[-<++++++++++<++++++++++>>]<---<--->>>+++++[-<++++++>]
<++>>++++++++++[-<++++++++++>]<-->>++++++++++[-<+++++++++++>]<+>>++++++++++[-<++
++++++++>]<+>>++++++++++[-<++++++++++>]<++>>++++++++++[-<+++++++++++>]<++++++>>+
+++++++++[-<++++++++++>]<++++>>++++++++++[-<+++++++++++>]<-->>++++++++++[-<+++++
++++++>]<++++>>++++++++++[-<+++++++++++>]<+++++>>++++++++++[-<+++++++++++>]>++++
++++++[-<+++++++++++>]<+++++++++>>++++++++++[-<++++++++++>]<--->>+++++[-<++++++>
]<++>>++++[-<++++++++++++>]<---->>++++[-<++++++++++++>]<-->++++++++++>>+++++++++
+[-<+++++++++++>]<--->>++++++++++[-<++++++++++>]>++++++++++[-<+++++++++++>]<++>>
++++++++++[-<++++++++++>]<+++++>>++++++++++[-<+++++++++++>]<+++++++<<<<<<<<<<<<<
<<<<<<<<<<<<[>[->.>.>.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.<
<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>.<.<<<<<<
<<<<<<<<<.>.->.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.>>>>>>>.
>.<<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<.<<<.>>.>>>>>>>>.<<<<<<<.<<<.>>>>>>>>>
>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<.>>>.<.<<.>>>>>>>>.<<<<<.>>>>>>.<<<<<<<.<<
<..>>>>.>>>>>>>.<<<<<<<<<<<<<<<.>>>>>>>>.<.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<
<<<<<<.>>>>>>>>.<<<<.<.<<<<<<<<<<<<<<<.>.>.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.
>>.<<<<.>.>>..>>>>>.<<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<
<<<..>>>>>>>>.>..<<<<<<<<<<<<<<<<<<<]<->+++++++++>.>.>.>.>.>>>..>>.<<<<.>>>>>>.<
<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.<<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>
>>>>>>>.>.<<<<<..>>>>>>>.<.<<<<<<<<<<<<<<<.->.+++++++++>.>.>.>>>..>>.<<<<.>>>>>>
.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.>>>>>>>.>.<<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<
<<<<.<<<.>>.>>>>>>>>.<<<<<<<.<<<.>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<
.>>>.<.<<.>>>>>>>>.<<<<<.>>>>>>.<<<<<<<.<<<..>>>>.>>>>>>>.<<<<<<<<<<<<<<<.>>>>>>
>>.<.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>.<<<<.<.<<<<<<<<<<<<<<<
.>.>.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.<<<<<<<<.>>.>>>>>>
>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>>.>..<<<<<<<<<<<<<<<<<<<<]
>--[->>.>.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.<<<<<<<<.>>.>
>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>.<.<<<<<<<<<<<<<<.->.
>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.>>>>>>>.>.<<<<<<<<<<<.>
>>>>>>.>>>>>.<<<<<<<<<<<<<<.<<<.>>.>>>>>>>>.<<<<<<<.<<<.>>>>>>>>>>>>>>>>>>.<<<<<
<<<<<<<<<<<.>>>>>>>>>.<.>>>.<.<<.>>>>>>>>.<<<<<.>>>>>>.<<<<<<<.<<<..>>>>.>>>>>>>
.<<<<<<<<<<<<<<<.>>>>>>>>.<.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>
.<<<<.<.<<<<<<<<<<<<<<.>.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>
>.<<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>>.>..<
<<<<<<<<<<<<<<<<<<]>>.>.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>
.<<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>.<.<<<<
<<<<<<<<<<.->.>.>.>>>..>>.<<<<.>>>>>>.<<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.>>>>>>>.>
.<<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<.<<<.>>.>>>>>>>>.<<<<<<<.<<<.>>>>>>>>>>
>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<.>>>.<.<<.>>>>>>>>.<<<<<.>>>>>>.<<<<<<<.<<<
..>>>>.>>>>>>>.<<<<<<<<<<<<<<<.>>>>>>>>.<.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<
<<<<<.>>>>>>>>.<<<<.<.<<<<<<<<<<<<<<.>.>.>.>>>..>>.<<<<.<<<.>>.>>.<<<<.>.>>..>>>
>>.<<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>>.>..
<<<<<<<<<<<<<<<<<.>.>.>.>>>..>>.<<<<.<<<.>>.>>.<<<<.>.>>..>>>>>.<<<<<<<<.>>.>>>>
>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>>>>>>>>.>.<<<<<..>>>>>>>.<.<<<<<<<<<<<<<<.++++++
++>.>.>.>>>..>>.<<<<.<<<.>>.>>.<<<<.>.>>..>>>>>.>>>>>>>.>.>---->>+++++++++>++++<
<<.<<<<<<<<<<<<<<<.<<.>>>>>.<<<.<<.>>>>>.>.<<<.<<<.>>>>>>>>>.<<<<.<<<.>>>>>>.<<<
<<.<<<.>>>>>>>>>>>>.<<.>>>>>>>>.<<<<<.<<<<<<<<<<<<.>>>>>>>>>>>>>>>>>>>>.<<.<<<<<
<.<<<<.<<<<<<<.>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<<.>>>>>>>>>>.>>>>>>>.<<<<<<<<<
<<<<<<<<<.>>>>>>.<<<<<.>>>>>>>>>>>.<.<<<<<<<<<<<<<<..>.>.>.>>>..>>.<<<<.>>>>>>.<
<<<<<<<<.>>.>>.<<<<.>.>>..>>>>>.<<<<<<<<.>>.>>>>>>>>.>>>.<<<<<<<<.>.<<<.<<<.>>>>
>>>>>>>.>.<<<<<..>>>>>>>>.>.

Ungolfed

# 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

Çıktı:

Burada kendin dene!
Tamam, bu yüzden URL buraya eklemek için çok uzun görünüyor, bu yüzden kendiniz denemek için kopyala / yapıştır yapmanız gerekecek.

Bu tercümanı kullanarak test ettim .


4

PHP, 251 bayt

Bu çoğul / tekil problemi açıklar.

<?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";}

Okunabilir:

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";
}



4

Kiriş , 1141 1109 bayt

Boşluklarla daha da golf oynamak için hala çok yerim var, ancak takip etmesi gerçekten zorlaşıyor ve oldukça kolay kırılıyor :) Bu soru için gönderdiğime çok benziyor , mağazaya gitmesi dışında bira 1'e ulaşmadan önce ve parametreler için kullanılan hücreler değiştirildi. Ayrıca düzeni çok değiştirdim. Birkaç düzen daha denediğimde bir açıklama yapmaya çalışacağım.

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-@@``/
^                   <                                       <             <

Burada yığın pasajında ​​deneyin


4

PHP, 250 246 244 233 228 bayt

Bunun şu ana kadarki en küçük olduğuna inanıyorum. Bu, en aza indirgeyecek bazı değişikliklerle 247 atışına dayanıyor.

Minimize edilmiş

<?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";}

Expanded

<?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";
}

1
PHP'yi php -r, eşdeğer perl -eve benzer olan komut satırından çalıştırabileceğiniz gibi , açılış etiketini atlamak kabul edilebilir. Kod etiketleri yerine PHP Çalıştırma-r bölümündeki ilgili tartışmaya bakın .
Manatwork

Ah, teşekkürler @ manatwork, sanırım biraz daha aşağı mayın alabilirim.
Froggy

while($b)aynı şekilde çalışır.
saat

Sonunda fazladan bir yeni satır var.
15'te

Tüm öneri için teşekkürler!
Newline
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.