"99 Flaschen Bier"

71

Schreiben Sie ein Programm, das die Texte in möglichst wenigen Bytes an 99 Bottles of Beer ausgibt .

Text:

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.

Regeln:

  • Ihr Programm muss sich bei STDOUT oder einer akzeptablen Alternative anmelden oder von einer Funktion (mit oder ohne nachfolgendem Zeilenumbruch) zurückgegeben werden.
  • Ihr Programm muss ein vollständiges, lauffähiges Programm oder eine Funktion sein.
  • Sprachen, die speziell geschrieben wurden, um eine 0-Byte-Antwort auf diese Herausforderung zu senden, sind zulässig, aber nicht besonders interessant.

    Beachten Sie, dass ein Dolmetscher vorhanden sein muss, damit die Einreichung getestet werden kann. Es ist erlaubt (und sogar empfohlen), diesen Dolmetscher für eine zuvor nicht implementierte Sprache selbst zu schreiben.

  • Dies unterscheidet sich von der Ausgabe von HQ9 + oder 99. Alle in diesen Sprachen verfassten Antworten werden gelöscht.

Da es sich um eine Katalogherausforderung handelt, geht es nicht darum, die Sprache mit der kürzesten Lösung dafür zu finden (es gibt einige, bei denen das leere Programm den Trick macht) - es geht darum, die kürzeste Lösung in jeder Sprache zu finden. Daher wird keine Antwort als angenommen markiert.

Katalog

Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:

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

GamrCorps
quelle
13
Wer dies geschlossen hat, der andere ist ein Beliebtheitswettbewerb ...
TheDoctor
21
Dies ist eine Teilaufgabe des Create an HQ9 + Interpreter- Golfs.
Geobits 18.11.15
4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ich habe es noch nicht VTCd, noch zu entscheiden, wie ich dabei fühle. Ich denke, in beiden Fällen können einige Antworten (oder Auszüge aus ihnen) direkt kopiert / eingefügt werden, während die Konkurrenz besteht. Dies ist ein üblicher Test für Betrug.
Geobits 18.11.15
13
Beachten Sie, dass quartata bereits vor einigen Wochen einen 99BB-Katalog in einer Sandbox gespeichert hatte und vorhatte, ihn zu veröffentlichen.
Alex A.
13
@GamrCorps Bitte ändern Sie die Regeln nach dem Start der Challenge nicht unnötig. Keines der Zeichen in der Ausgabe sollte optional sein.
Feersum

Antworten:

43

C #, 285 298 289 Bytes

(Mein erster Versuch, Code Golf zu spielen ...)

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

Ein bisschen 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
quelle
10
Tipp - Verwenden Sie var anstelle von String :)
Belfield
2
2 Bytes vom Ersetzen " bottle"durch ein Formatargument, obwohl ich mir sicher bin, dass es einen besseren Weg gibt, wenn 3 Flascheninstanzen meine Augen verletzen ...
Sven schreibt Code
4
b==1kann durch ersetzt werden b<2.
LegionMammal978
2
Ihre for-Schleife könnte so geschrieben werdenfor(int b = 100; b--> 1;)
Yassin Hajaj
2
Dann sollten wir vielleicht warten, bis der Herausforderungsautor entschieden hat, ob eine nachgestellte Zeile zulässig ist oder nicht.
Florian Bach
31

Motorola MC14500B Maschinencode , 46612 Byte

Aus Längengründen kann ich das Programm hier nicht posten. Es kann jedoch hier hexadezimal und hier binär (mit 0s aufgefüllt ) gefunden werden.


Dies ist das kürzestmögliche Programm im Maschinencode des Motorola MC14500B. Es besteht aus nur 1000und 1001( 8und 9sind); Ein Opcode für jedes Ausgabebit.

Es verwendet 93.224 Halbbyte-Opcodes und gibt die Liedtexte bitweise aus. Dies ist die einzig mögliche Ausgabemethode.

Für Interessenten geht der Ausgang an Pin 3 (von 16), den I / O-Pin.


Erläuterung

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

Das Register beginnt um 0.


Code Trivia

  • Die hexadezimale Länge beträgt 93.224 8s und 9s.

  • Die Binärdatei ist 745.792 1s und 0s lang.

  • Ich habe den folgenden Python 2-Code verwendet, um den Code zu generieren. Eingabe 0für binär und 1für hexadezimal.

    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
quelle
4
Bitte sag mir, dass du nicht einfach alles ohne irgendeinen Stringgenerator rausgeschrieben hast ...: c
Addison Crump
1
Siehe den neuen Abschnitt "Code Trivia": P @VoteToClose
Zach Gates
Die Links sind kaputt :(
ETHproductions
Ich werde es reparieren, wenn ich nach Hause komme. Entschuldigung): @ETHproductions
Zach Gates
28

Vitsy, 0 Bytes



Im Ernst, ich habe nichts gegen mich. (@Mego tut mir so leid.;))

Probieren Sie es online! (Drücke einfach "Run")

Addison Crump
quelle
7
o_o Ich brauche etwas Interessantes für Simplex, um es in null Bytes zu erledigen: P
Conor O'Brien
4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ich denke du meinst, "Ich brauche etwas Nützliches für Simplex, um es in null Bytes zu tun."
Martin Ender
3
@VoteToClose - Wie funktioniert das? Ich weiß ehrlich gesagt nicht, ich bin kein Code-Golfer, aber ich komme gerne hierher und sehe Leute und Sprachen, die das tun. Aber ich kann das nicht verstehen. +1 weil es beeindruckend aussieht!
Jonnny
1
@Jonnny Klicken Sie hier, um den Datei-Handler des Interpreters anzuzeigen . Der Datei-Handler erkennt, dass eine Datei null Bytes enthält, und druckt in diesem Fall den Text aus. c:
Addison Crump
1
@Jonnny Yeah - es ist in Arbeit, eines Tages wird es besser sein als im Ernst. Aber jetzt ... Wir warten. Wenn Sie eine gute Golfsprache wollen, lesen Sie die Antwort im Ernst, sie enthält einige verrückte Sachen.
Addison Crump
27

Im Ernst , 1 Byte

N

Wenn der Stapel leer ist (was es am Anfang ist), Ndrückt die Texte. Dann werden sie implizit bei EOF gedruckt.

Vielen Dank an @Mego für die Korrektur des Seriously-Interpreters.

Lirtosiast
quelle
22
Martin sagte in der Hello World Challenge: "> Bitte stimmen Sie langweiligen (aber gültigen) Antworten in Sprachen, in denen es nicht viel zu Golf gibt, nicht ab - diese sind für diese Frage nach wie vor nützlich, da versucht wird, einen Katalog so vollständig wie möglich zusammenzustellen. Stimmen Sie Antworten jedoch in erster Linie in Sprachen ab, in denen die Autoren tatsächlich Anstrengungen unternehmen mussten, um den Code zu entwickeln. " Diese Antwort ist uninteressant, aber es ist eine gültige und kürzeste Lösung.
Lirtosiast
1
Beim Lesen der Frage konnte ich es kaum erwarten, dass Sie eine seriöse Antwort verfassen. Aber es sieht so aus, als müsste ich nicht einmal warten. :)
Hexaholic
8
Seriusly ????????
Vajura
1
Ich freue mich auf Ihre Lösung ohne die Verwendung von N:)
Mego
1
Ja - ich habe vier Stimmen und meine Antwort ist gültig. Ich stimme mit dem überein, was hier im oberen Kommentar gesagt wird.
Addison Crump
19

JavaScript ES6, 230 218 198 196 192 188 185 Bytes

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

Nur ein paar Bytes wegschneiden und trotzdem sauber und verständlich aussehen lassen.

3 letzte Überarbeitungen:

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
quelle
1
2 Bytes werden eingespart, indem die Variablen außerhalb der Schleifensteuerungen platziert werden: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+".")
Generischer Benutzer
Das ist nicht das, was diese 2 Bytes in Ihrem Code speichert. Es ist eigentlich das Entfernen der Klammern um (--x <1). Im Moment lasse ich die Variablen aus Gründen der Lesbarkeit in der for-Anweisung, um sie alle zusammenzuhalten.
Adam Dally
1
@Stefnotch Wenn Sie sich fragen, habe ich diese Änderung durch Untersuchen meiner Funktionsaufrufe gefunden ... aber ich glaube nicht, dass dies Ihre Absicht war. Ihr Rat ist jedoch als letzter Ausweg immer noch relevant.
Adam Dally
1
@ Paŭlo Ebermann Es wird für jeden Vers ein Alarm ausgeführt, aber Sie können ihn in console.log ändern, um ihn in der Konsole auszuführen, was 194 Byte ergeben würde. Außerdem funktioniert es in Firefox nicht, den gesamten Text auf einmal zu warnen ... es werden gute 5-10 Verse abgeschnitten.
Adam Dally
1
@Stefnotch. Nun, 1-x erweist sich im Moment als nützlich.
Adam Dally
18

JavaScript ES6, 328 318 307 305 Bytes

Ist eine anonyme Funktion. Fügen Sie f=am Anfang hinzu, um die Funktion f()zu erstellen und auszuführen.

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
quelle
2
Hübsch wäre viel interessanter, wenn es mehr als nur eine lange Verkettung von Zeichenfolgen wäre
Sp3000 18.11.15
9
Warum wurde die zufällige ASCII-Grafik von einer anderen Site kopiert?
Feersum
7
Vor allem, weil es nicht funktioniert, warnt es:,+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 Bytes

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

Ich denke, ich habe die Grenze dieses Ansatzes erreicht.

xsot
quelle
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();}Alleine 126 Byte stellen eine harte Untergrenze dar, es sei denn, jemand findet eine Möglichkeit, Teile der Zeichenfolgen ohne nennenswerten Overhead zu komprimieren oder wiederzuverwenden. Ich vermute, Sie haben möglicherweise die Grenze der Ansätze im Allgemeinen erreicht, plus oder minus ein paar Bytes.
Ray
12

Java 304 301 300 295 Bytes

Zum ersten Mal eine Antwort posten. Ich habe gehört, wir könnten Enum verwenden, aber nicht herausfinden, wie.

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

Dank quartata, J AtkinundBenjamin Urquhart

Yassin Hajaj
quelle
Sie können 2 Bytes speichern , indem Sie i<2anstelle von i==1und i>2hier: i!=2.
J Atkin
@JAtkin Danke. Für das erste ist es in Ordnung, die Ausgabe bleibt gleich. Aber für die zweite, wenn ich die Änderung vornehme, wird die letzte Zeile gedruckt 99 bottleund nicht99 bottles
Yassin Hajaj
1
Wie sich herausstellt, ist dies gut für Java, aber das funktioniert nicht gut für Groovy (213 vs 245 Bytes).
J Atkin
1
Groovy ist nicht wirklich eine der JVM-Sprachen. Für die meisten Anwendungen ist der Groovy-Code kürzer als der Java-Code, der dasselbe tut. goovy-lang.org
J Atkin
1
@BenjaminUrquhart Großartig! Modifizierte es!
Yassin Hajaj
11

Als schädlich eingestufte Vorlagen , 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>>

Art erweitert:

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

Haskell, 228 223 Bytes

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

Die Funktion fgibt einen String mit dem Text zurück.

nimi
quelle
10

/// 341 Bytes

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

Es würde 99 Jahre dauern, um eine korrekte Erklärung für diesen Code zu schreiben.

Ich würde wahrscheinlich nur das Ergebnis jeder Etappe einschließen ...

Grundsätzlich werden die Texte wiederholt komprimiert (wie jede Antwort in /// ).

Probieren Sie es online!

Jeder Schritt der Dekompression

Da Ersetzungen gefolgt von Ersetzungen die Zeichenfolge enthalten //, wird sie häufig angezeigt.

Es scheint oft genug , dass ich zu komprimieren beschlossen //in -.

Wenn dies dekomprimiert wird, ist das Ergebnis wie folgt:

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

Die Saite ist bottlenur dreimal aufgetaucht, aber ich habe sie trotzdem komprimiert +:

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

Dann )entspricht, /&/</gefolgt von einer neuen Zeile, und (entspricht //?/ , was Muster sind, die später oft verwendet werden:

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

Nun würden wir einige nützliche Zeichenfolgen dekomprimieren:

  • > dekomprimiert zu bottles of beer
  • ^ dekomprimiert zu bottles of beer on the wall
  • !dekomprimiert nach ^,, wo ^ist der oben.
  • $dekomprimiert nach >.\n, wo >ist die erste Regel und \nist ein Zeilenumbruch.
  • @dekomprimiert, $gefolgt von Take one down and pass it around,, wo $ist die Regel oben.

Der dekomprimierte Code wird jetzt:

/*/?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.
Undichte Nonne
quelle
9

Vim, 139 Bytes

6 Bytes aufgrund von xsot gespeichert .

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

Dies ist mein erster Versuch, Vim-Befehle zu spielen, obwohl er anscheinend sehr beliebt ist . Ich habe das Finale ZZin die Byteanzahl aufgenommen (in Datei schreiben und beenden), da dies die akzeptierte Norm zu sein scheint.

Randnotiz: Mission erfüllt .


Erläuterung

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
quelle
1
Leichte Verbesserung: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 danke dafür. Ich habe das irgendwie komplett übersehen /und ?.
Primo
Übrigens ist es möglich, 153 auf Anagol mit dieser Verbesserung zu erreichen
Xsot
@ Xsot bekam es;)
Primo
8

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

Es wird ziemlich schwer, das Golf zu spielen ...
Edit 1: Jemand hat mich total überrumpelt, sieht so aus, als müsste ich mich mehr anstrengen, wenn ich die beste Javascript-Antwort haben will.
Edit 2: Ich kann ehrlich gesagt nicht glauben, dass ich es geschafft habe, so viel Golf zu spielen!

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

Habe ich irgendwo versaut? Ich entschuldige mich auch für die Verwendung alert, wenn Sie meinen Code testen möchten, ersetzen Sie ihn durch console.log.

Derzeit gibt es eine andere bemerkenswerte Javascript-Antwort: "99 Flaschen Bier" . Hör zu! : D

Stefnotch
quelle
Ich würde Ihre Bedingungen überprüfen und Sie sollten in der Lage sein, ein paar Bytes abzuschneiden. Gute Mühe, mitzuhalten!
Adam Dally
@AdamDally Ok !! : D Aber ich kopiere nicht gerne die Sachen anderer Leute ... (Ich würde mich schuldig fühlen, wenn ich nur Ihren Code kopiere ... obwohl es "akzeptabel" wäre, wenn ich einige Verbesserungen finde): D
Stefnotch
@AdamDally Yay, ich habe mit meinen Funktionen rumgespielt und eine Menge Bytes gespart! (Die durchgestrichene Linie wird länger und länger ..)
Stefnotch
Ausgezeichnet! Es sei denn, es gibt einen alternativen Weg, den ich völlig übersehen habe. Ich habe das Gefühl, dass wir uns beide dem Ende nähern.
Adam Dally
7

JavaScript ES6, 210 209 205 199 198 196 Bytes

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)

Dies ist eine grobe Übersetzung meiner C-Vorlage. Ich kenne kein Javascript, daher gibt es definitiv Raum für Verbesserungen.

Edit: Schön, ich habe Backticks entdeckt

xsot
quelle
Sie könnten das console.logmit ersetzen alertund Sie könnten "anstelle von" verwenden. Dann können Sie \ n durch eine neue Zeile ersetzen. (Die Häkchen werden für Vorlagenzeichenfolgen verwendet, diese Zeichenfolgen können neue Zeilen enthalten ...) Glückwunsch, dass Sie mich geschlagen haben!
Stefnotch
1
Ich denke, ich lasse die Ausgabe in Ruhe, es sei denn, jemand anderes schlägt mich, da dies console.logeinfacher zu testen ist. Wie auch immer, danke, dass du mich Backticks ausgesetzt hast!
XSOT
Wohoo, hat deine überrumpelt! Vielen Dank auch für die Verwendung von || in deinem Code hat es sich sicher als nützlich console.log
erwiesen
1
Du bist eine Herausforderung, mit der du Schritt halten musst! Leider wäre es interessant, eine Aufschlüsselung Ihres Codes zu sehen.
Adam Dally
1
@AdamDally Grundsätzlich wird jeder Vers in 3 Teile mit folgenden Struktur aufgeteilt: %d bottle%s of beer%s%s. Der Index jedes Verses (Anzahl der Flaschen) wird wie folgt berechnet: i/3|0Der Index jedes Teilstrings ist einfach i%3.
20.
7

Brainfuck, 743 Bytes

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

Probieren Sie es online!

Oben wird der Zeilenumbruch an einigen Stellen verwendet, um Anweisungen zu speichern. Ich habe auch eine nicht umhüllende Version in 755-Anweisungen erstellt .


Unkomprimiert

Das Folgende ist ein Polyglot in 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
quelle
6

Python 2, 204 Bytes

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

Die Spezifikation ist in Bezug auf Leerzeichen ziemlich unterbestimmt, daher gehe ich hier davon aus, dass die letzte Zeile eine einzige nachgestellte Zeile enthalten muss. Wenn die Spezifikation etwas anderes klarstellt, aktualisiere ich diese Antwort.

Ich bin ziemlich zufrieden damit, aber wenn ich mir Anarchie-Golf anschaue, kann ich trotzdem Golf spielen, möglicherweise mit einer anderen Herangehensweise.

Sp3000
quelle
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"""

Das ist ein bisschen übertrieben ...

Labyrinth ist zwar nicht besonders gut darin, Zeichenfolgen zu drucken (weil Sie alle Zeichencodes drücken müssen), aber ich denke, es sollte möglich sein, dies zu verbessern, indem mehr, aber kürzere lange Zeilen verwendet werden und die Rasterdrehung noch verrückter wird.

Da ich denke, dass Verbesserungen beim Golfspiel die Struktur dieses Codes wesentlich verändern werden, werde ich mit einer Erklärung warten, bis ich keine Ideen mehr habe, wie ich weiter Golf spielen kann.

Martin Ender
quelle
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

Übernahm die i/2Idee aus der Antwort von Sp3000 .

xnor
quelle
6

Windows Batch, 376 Bytes

Sehr sehr lang und hässlich:

@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
quelle
5

Python, 254 Bytes

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

Ziemlich einfach, weisen Sie einige der gebräuchlichsten Phrasen zu, drucken Sie jedes Bit von 99 bis 3, und drucken Sie dann die letzten Zeilen, indem Sie die Variablen und einige Zeichenfolgen addieren.

Loovjo
quelle
5

Julia, 227 215 213 Bytes

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

Hierbei werden Zeichenfolgeninterpolation ( "$variable") und Ternäre verwendet, um die Ausgabe zu erstellen und an STDOUT zu drucken.

14 Bytes gespart dank Glen O!

Alex A.
quelle
1
Anstatt (n>1?" bottles":" bottle")" of beer", Verwendung " bottle""s"^(n>1)*" of beer"- beachten Sie, dass das *notwendig ist , nach , (n<1)da sonst versuchen , sie anzuwenden (n>1)" of beer"als die Macht. Gibt es auch einen Vorteil bei der Verwendung von while n>0over for n=99:-1:1(wodurch die Bedingung am Ende einfacher wird und das separate Erfordernis von vermieden wird n=99)?
Glen O
Verwenden Sie auch aktuelle Zeilenumbrüche anstelle von \nund stellen Sie den mittleren Teil auf Interpolation (anstatt auf ",n>1?...","Verwenden $(n>1?...")), um ein Zeichen zu speichern, und verschieben Sie das , Innere der Bedingung auf vor den nächsten Teil, sodass es nur einmal geschrieben werden muss.
Glen O
Schlagen Sie den Vorschlag für eine Weile vorüber, denn mir ist gerade klar geworden, dass Sie eine abziehen müssen, wenn Sie die letzte Zahl in jedem Vers machen, damit es keinen Nettovorteil gibt.
Glen O
@ GlenO Danke wie immer für die tollen Vorschläge!
Alex A.
1
Ich hatte gehofft, nur eine Änderung vorschlagen zu können - es ist ein bisschen albern, dass diese Option nicht zulässig ist, wenn Sie über genügend Repräsentanten verfügen, um eine Bearbeitung vorzunehmen, ohne dass der ursprüngliche Beantworter dies akzeptiert. Ich entschuldige mich, wenn ich dafür in irgendeiner Weise auf die Zehen getreten bin. Ich habe gerade die Auswertung des Teils "Flasche Bier" zum Ende verschoben, damit es nur noch einmal durchgeführt und initialisiert werden muss. Ich habe auch ein Backspace anstelle eines bedingten "s" verwendet, um ein wenig zu speichern.
Glen O
5

JavaScript ES6, 214 Byte

Bearbeiten: Löscht den gesamten vorherigen Code und zeigt Änderungen an, wenn der ältere Code angezeigt werden soll.

Begrenzte Popups:

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

Erweitert:

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: Danke für die Idee der Pfeilfunktionen, 15 Bytes gespart

Für unendliches Bier verwenden Sie einfach diesen Code, 212 Bytes

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)}
ŽaMan
quelle
1
Ich kann den Code nicht zum Laufen bringen. Welchen Browser / welche Umgebung verwenden Sie? "SyntaxError: missing; before statement" Schauen Sie sich auch die Pfeilfunktionen an!
Stefnotch
Ich habe einen Moment gebraucht, um den Syntaxfehler zu finden, der +o'dann in geändert wurde +o+'. Sah auch Gelegenheit zum Ändern der Schleife und Antwort. Überprüft jetzt die
Pfeilfunktionen
1
232 Bytes für die letzte Lösung: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)
Generischer Benutzer
Nach einigem Herumspielen whilebleibe ich bei meiner Schleife und werde bald den resultierenden Code veröffentlichen. Vielen Dank für die Codeüberprüfung! :)
ŽaMan
5

CJam, 149 148 146 144 138 137 134 Bytes

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

Der obige Hexdump kann mit umgekehrt werden xxd -r. Probieren Sie es online im CJam-Interpreter aus .

Auf Kosten von 9 zusätzlichen Bytes für insgesamt 143 Bytes können wir nicht druckbare Zeichen vermeiden:

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

Wie es funktioniert

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
quelle
Basis 259 ? Interessant.
Lirtosiast
Die Basis 256 hatte Wagenrückläufe, die mit dem Online-Interpreter nicht funktionieren. Glücklicherweise erzeugt die Basis 259 keine Zeichen außerhalb des ISO 8559-1-Bereichs.
Dennis
Ich nahm an, dass CJam mindestens 2 Bytes kürzer als GolfScript wäre - fast trivial. Ich habe allerdings nicht mit 137 gerechnet!
Primo
1
@primo Um fair zu sein, die meisten Einsparungen stammen aus der Basisumstellung. Leider werden durch basezweimaliges Verwenden bereits 8 Bytes in GolfScript hinzugefügt ...
Dennis,
5

C 303 299 297 Bytes

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

Kompilieren mit gcc -std=c99 -w.

firefrorefiddle
quelle
1
Golf bis zu 300 Bytes: ... für (int i = 99; - i;) {V (i + 1, i, "....
Glenn Randers-Pehrson
@ GlennRanders-Pehrson Danke. Ich habe auch den Zeilenumbruch vor main () entfernt.
Firefrorefiddle
5

GolfScript, 143 Bytes

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

Möglicherweise gibt es noch Raum für Verbesserungen. Ich denke, wir nähern uns der endgültigen Überarbeitung.

primo
quelle
3
Habe gerade den anagol GolfScript Rekord um 12 Bytes verbessert .
Primo
5

Mathematica, 238 226 222 224 Bytes

Mehrere Bytes gespart dank 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
quelle
5

Brainfuck, 4028 Bytes

Das ist ziemlich abscheulich. Viele Duplikate, und sehr ineffizient, so dass es keine Preise gewinnen wird. Ich begann es jedoch und war entschlossen, es zu beenden.

Ich kann versuchen, dies zu verbessern, aber ich werde es wahrscheinlich nicht tun, denn ehrlich gesagt wird mein Gehirn gefickt.

Golf gespielt

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

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

Ausgabe:

Probieren Sie es hier aus!
OK, die URL ist anscheinend zu lang, um sie hier aufzunehmen. Sie müssen sie also kopieren / einfügen, um sie selbst auszuprobieren.

Ich habe es mit diesem Interpreter getestet .

Hywel Rees
quelle
4

PHP, 251 Bytes

Dies erklärt das Plural / Singular-Problem.

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

Lesbar:

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

Beam , 1141 1109 Bytes

Ich habe immer noch viel Platz, um mit all den leeren Räumen weiter Golf zu spielen, aber es wird sehr schwer zu folgen und bricht ziemlich leicht :) Es ist sehr ähnlich zu dem, das ich für diese Frage gepostet habe , außer dass es in den Laden geht bevor das Bier 1 erreicht und die für die Parameter verwendeten Zellen verschoben wurden. Ich habe auch das Layout erheblich verändert. Ich werde versuchen, eine Erklärung zu finden, sobald ich ein paar weitere Layouts ausprobiert habe.

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

Probieren Sie es hier im Stack-Snippet aus

MickyT
quelle
4

PHP, 250 246 244 233 228 Bytes

Ich glaube, das ist bisher am kleinsten. Dies basiert auf der 247-Aufnahme, wobei einige Änderungen noch weiter minimiert werden müssen.

Minimiert

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

Erweitert

<?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
quelle
1
Da Sie PHP von einer Befehlszeile aus ausführen können, die php -rder von perl -eund ähnlich ist, ist es akzeptabel, das öffnende Tag wegzulassen. Weitere Informationen hierzu finden Sie in Ausführen von PHP mit -ranstelle von Code-Tags .
Manatwork
Ah, danke @manatwork, ich schätze, ich könnte meine dann noch ein bisschen runterholen.
Phroggyy
while($b)funktioniert genauso gut.
Fr.
Am Ende gibt es jedoch einen zusätzlichen Zeilenumbruch.
Fr.
Danke für den ganzen Vorschlag! Der Zeilenumbruch ist jedoch erforderlich, um eine Zeile zwischen den Versen zu haben
Phroggyy