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 N
ist 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
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 64198; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 36670; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Antworten:
C #,
285298289 Bytes(Mein erster Versuch, Code Golf zu spielen ...)
Ein bisschen ungolfed:
quelle
" bottle"
durch ein Formatargument, obwohl ich mir sicher bin, dass es einen besseren Weg gibt, wenn 3 Flascheninstanzen meine Augen verletzen ...b==1
kann durch ersetzt werdenb<2
.for(int b = 100; b--> 1;)
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
0
s aufgefüllt ) gefunden werden.Dies ist das kürzestmögliche Programm im Maschinencode des Motorola MC14500B. Es besteht aus nur
1000
und1001
(8
und9
sind); 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
Das Register beginnt um
0
.Code Trivia
Die hexadezimale Länge beträgt 93.224
8
s und9
s.Die Binärdatei ist 745.792
1
s und0
s lang.Ich habe den folgenden Python 2-Code verwendet, um den Code zu generieren. Eingabe
0
für binär und1
für hexadezimal.quelle
Vitsy, 0 Bytes
Im Ernst, ich habe nichts gegen mich. (@Mego tut mir so leid.;))
Probieren Sie es online! (Drücke einfach "Run")
quelle
Im Ernst , 1 Byte
Wenn der Stapel leer ist (was es am Anfang ist),
N
drückt die Texte. Dann werden sie implizit bei EOF gedruckt.Vielen Dank an @Mego für die Korrektur des Seriously-Interpreters.
quelle
N
:)JavaScript ES6,
230218198196192188185 BytesNur ein paar Bytes wegschneiden und trotzdem sauber und verständlich aussehen lassen.
3 letzte Überarbeitungen:
quelle
x=99;w=" on the wall";e=" of beer";o=" bottle";b=o+"s";for(z="Go to the store and buy some more, "+x+b;0<x;)console.log(x+(2>x?o:b)+e+w+", "+x+(2>x?o:b)+e+".\n"+(1>--x?z:"Take one down and pass it around, "+x+(2>x?o:b))+e+w+".")
JavaScript ES6,
328318307305 BytesIst eine anonyme Funktion. Fügen Sie
f=
am Anfang hinzu, um die Funktionf()
zu erstellen und auszuführen.quelle
,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
C
197,196 BytesIch denke, ich habe die Grenze dieses Ansatzes erreicht.
quelle
"%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.Java
304301300295 BytesZum ersten Mal eine Antwort posten. Ich habe gehört, wir könnten Enum verwenden, aber nicht herausfinden, wie.
Ungolfed
Dank
quartata
,J Atkin
undBenjamin Urquhart
quelle
i<2
anstelle voni==1
undi>2
hier:i!=2
.99 bottle
und nicht99 bottles
Als schädlich eingestufte Vorlagen , 667 Byte
Art erweitert:
quelle
Haskell,
228223 BytesDie Funktion
f
gibt einen String mit dem Text zurück.quelle
/// 341 Bytes
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:
Die Saite ist
bottle
nur dreimal aufgetaucht, aber ich habe sie trotzdem komprimiert+
:Dann
)
entspricht,/&/</
gefolgt von einer neuen Zeile, und(
entspricht//?/
, was Muster sind, die später oft verwendet werden:Nun würden wir einige nützliche Zeichenfolgen dekomprimieren:
>
dekomprimiert zubottles of beer
^
dekomprimiert zubottles of beer on the wall
!
dekomprimiert nach^,
, wo^
ist der oben.$
dekomprimiert nach>.\n
, wo>
ist die erste Regel und\n
ist ein Zeilenumbruch.@
dekomprimiert,$
gefolgt vonTake one down and pass it around,
, wo$
ist die Regel oben.Der dekomprimierte Code wird jetzt:
quelle
Vim, 139 Bytes
6 Bytes aufgrund von xsot gespeichert .
Dies ist mein erster Versuch, Vim-Befehle zu spielen, obwohl er anscheinend sehr beliebt ist . Ich habe das Finale
ZZ
in die Byteanzahl aufgenommen (in Datei schreiben und beenden), da dies die akzeptierte Norm zu sein scheint.Randnotiz: Mission erfüllt .
Erläuterung
quelle
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
/
und?
.JavaScript ES6,
237 217 208 203 195 193 189186 BytesEs 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!
Habe ich irgendwo versaut? Ich entschuldige mich auch für die Verwendung
alert
, wenn Sie meinen Code testen möchten, ersetzen Sie ihn durchconsole.log
.Derzeit gibt es eine andere bemerkenswerte Javascript-Antwort: "99 Flaschen Bier" . Hör zu! : D
quelle
JavaScript ES6,
210209205199198196 BytesDies 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
quelle
console.log
mit ersetzenalert
und 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!console.log
einfacher zu testen ist. Wie auch immer, danke, dass du mich Backticks ausgesetzt hast!console.log
%d bottle%s of beer%s%s
. Der Index jedes Verses (Anzahl der Flaschen) wird wie folgt berechnet:i/3|0
Der Index jedes Teilstrings ist einfachi%3
.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 .
quelle
Python 2, 204 Bytes
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.
quelle
Labyrinth ,
11951190932 BytesDas 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.
quelle
Python 2, 195
Übernahm die
i/2
Idee aus der Antwort von Sp3000 .quelle
Windows Batch, 376 Bytes
Sehr sehr lang und hässlich:
quelle
Python, 254 Bytes
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.
quelle
Julia,
227215213 BytesHierbei werden Zeichenfolgeninterpolation (
"$variable"
) und Ternäre verwendet, um die Ausgabe zu erstellen und an STDOUT zu drucken.14 Bytes gespart dank Glen O!
quelle
(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 vonwhile n>0
overfor n=99:-1:1
(wodurch die Bedingung am Ende einfacher wird und das separate Erfordernis von vermieden wirdn=99
)?\n
und 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.JavaScript ES6, 214 Byte
Begrenzte Popups:
Erweitert:
@commenters: Danke für die Idee der Pfeilfunktionen, 15 Bytes gespart
Für unendliches Bier verwenden Sie einfach diesen Code, 212 Bytes
quelle
+o'
dann in geändert wurde+o+'
. Sah auch Gelegenheit zum Ändern der Schleife und Antwort. Überprüft jetzt dieb=a=>a+" bottle"+(1<a?"s":"");for(i=100;100>--i;)l="\n",p="."+l,o=" of beer",e=o+" on the wall",alert(l+b(i)+e+", "+b(i)+o+p+(1<i?"Take one down and pass it around, "+b(i-1)+e:"Go to the store and buy some more, "+b((i=100)-1)+e)+p)
while
bleibe ich bei meiner Schleife und werde bald den resultierenden Code veröffentlichen. Vielen Dank für die Codeüberprüfung! :)CJam,
149148146144138137134 BytesDer 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:
Wie es funktioniert
quelle
base
zweimaliges Verwenden bereits 8 Bytes in GolfScript hinzugefügt ...C
303299297 BytesKompilieren mit
gcc -std=c99 -w
.quelle
GolfScript, 143 Bytes
Möglicherweise gibt es noch Raum für Verbesserungen.Ich denke, wir nähern uns der endgültigen Überarbeitung.quelle
Mathematica,
238226222224 BytesMehrere Bytes gespart dank Martin Büttner.
quelle
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
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 .
quelle
PHP, 251 Bytes
Dies erklärt das Plural / Singular-Problem.
Lesbar:
quelle
Beam ,
11411109 BytesIch 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.
Probieren Sie es hier im Stack-Snippet aus
quelle
PHP,
250246244233228 BytesIch glaube, das ist bisher am kleinsten. Dies basiert auf der 247-Aufnahme, wobei einige Änderungen noch weiter minimiert werden müssen.
Minimiert
Erweitert
quelle
php -r
der vonperl -e
und ähnlich ist, ist es akzeptabel, das öffnende Tag wegzulassen. Weitere Informationen hierzu finden Sie in Ausführen von PHP mit-r
anstelle von Code-Tags .while($b)
funktioniert genauso gut.