Ecrivez un programme qui affiche les paroles de 99 Bouteilles de bière dans le moins d’octets possible .
Paroles de chanson:
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.
Règles:
- Votre programme doit se connecter à STDOUT ou à une alternative acceptable, ou être renvoyé d'une fonction (avec ou sans nouvelle ligne).
- Votre programme doit être une fonction ou un programme complet et exécutable.
Les langues spécifiquement écrites pour soumettre une réponse de 0 octet à ce défi sont autorisées, mais ne sont pas particulièrement intéressantes.
Notez qu'il doit y avoir un interprète pour que la soumission puisse être testée. Il est permis (et même encouragé) d’écrire cet interprète vous-même pour une langue non encore implémentée.
- Ceci est différent du résultat de HQ9 + ou 99. Toutes les réponses écrites dans ces langues seront supprimées.
Comme il s’agit d’un défi de catalogue, il ne s’agit pas de trouver la langue avec la solution la plus courte (il y en a où le programme vide fait l’astuce); il s’agit de trouver la solution la plus courte dans chaque langue. Par conséquent, aucune réponse ne sera marquée comme acceptée.
Catalogue
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](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>
Réponses:
C #,
285298289 octets(Ma première tentative de code de golf ...)
Un peu ungolfed:
la source
" bottle"
par un argument de format bien que je sois sûr qu'il existe un meilleur moyen, avoir 3 instances de bouteille me fait mal aux yeux ...b==1
peut être remplacé parb<2
.for(int b = 100; b--> 1;)
Motorola MC14500B Code machine , 46612 octets
Pour des raisons de longueur, je ne peux pas poster le programme ici. Cependant, il peut être trouvé ici en hexadécimal , et ici en binaire (complété avec
0
s).Il s'agit du programme le plus court possible en code machine Motorola MC14500B. Il se compose de seulement
1000
et1001
(8
et9
, respectivement); un code d'opération pour chaque bit de sortie.Il utilise 93 224 opcodes sur un demi-octet et génère les paroles de la chanson un à un. C'est la seule méthode de sortie possible.
Pour ceux que cela intéresse, la sortie passe à la broche n ° 3 (sur 16), la broche I / O.
Explication
Le registre commence à
0
.Jeu de code
L' hexadécimal est 93,224
8
s et9
s long.Le binaire est 745,792
1
s et0
s long.J'ai utilisé le code Python 2 ci-dessous pour générer le code. Entrée
0
pour binaire et1
pour hexadécimal.la source
Vitsy, 0 octet
Sérieusement, je n'ai rien contre moi. (@Mego je suis tellement désolé.;))
Essayez-le en ligne! (Cliquez simplement sur "Run")
la source
Sérieusement , 1 octet
Si la pile est vide (ce qui est au début),
N
pousse les paroles. Ensuite, ils sont implicitement imprimés à EOF.Merci à @Mego pour avoir corrigé l’interprète Seriously.
la source
N
:)JavaScript ES6,
230218198196192188 188185 octetsJuste couper quelques octets tout en conservant une apparence propre et compréhensible.
3 dernières révisions:
la source
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 octetsEst une fonction anonyme. Ajoutez
f=
au début pour faire fonctionner etf()
exécuter.la source
,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
C,
197196 octetsJe pense avoir atteint la limite de cette approche.
la source
"%d bottles of beer on the wallTake one down and pass it aroundGo to the store and buy some more,.\n"main(){for(;;)printf();}
seul représente 126 octets, ce qui représente une limite inférieure stricte, à moins que quelqu'un trouve un moyen de compresser ou de réutiliser des parties des chaînes sans surcharge significative. Je suppose que vous avez peut-être atteint la limite des approches en général, plus ou moins quelques octets.Java
304301300295 octetsPremière fois poster une réponse. J'ai entendu dire que nous pouvions utiliser enum mais ne trouvais pas comment.
Ungolfed
Merci à
quartata
,J Atkin
etBenjamin Urquhart
la source
i<2
à la placei==1
eti>2
ici:i!=2
.99 bottle
et pas99 bottles
Modèles considérés comme nuisibles , 667 octets
Sorte de élargi:
la source
Haskell,
228223 octetsFunction
f
retourne une chaîne avec les paroles.la source
/// , 341 octets
Il faudrait 99 ans pour rédiger une explication appropriée de ce code.
Je voudrais probablement juste inclure le résultat de chaque étape ...
Fondamentalement, cela comprime les paroles à plusieurs reprises (comme c'est le cas pour toutes les réponses dans /// ).
Essayez-le en ligne!
Chaque étape de la décompression
Puisque les remplacements suivis de remplaçants auront la chaîne
//
, elle apparaîtra souvent.Il semble assez souvent que j'ai décidé de compresser
//
dans-
.Lorsque cela est décompressé, le résultat est le suivant:
La chaîne
bottle
n'est apparue que trois fois, mais je l'ai compressée quand même+
:Ensuite,
)
correspond à/&/</
suivi d'une nouvelle ligne, et(
correspond à//?/
, qui sont des modèles qui seront souvent utilisés plus tard:Maintenant, nous décomprimerions des chaînes utiles:
>
décompresse àbottles of beer
^
décompresse àbottles of beer on the wall
!
décompresse à^,
, où^
est celui ci-dessus.$
décompresse to>.\n
, où>
est la première règle et\n
est une nouvelle ligne.@
décompresse en$
suivi deTake one down and pass it around,
, où$
est la règle ci-dessus.Le code décompressé devient maintenant:
la source
Vim, 139 octets
Enregistré 6 octets en raison de xsot .
C’est ma première tentative de jouer au golf avec les commandes de Vim, bien qu’apparemment c’est assez populaire . J'ai inclus la finale
ZZ
dans le nombre d'octets (écrire dans un fichier et quitter), car cela semble être la norme acceptée.Note latérale: mission accomplie .
Explication
la source
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
/
et?
.JavaScript ES6,
237 217 208 203 195 193 189186 octetsIl est de plus en plus difficile de jouer au golf ...
Edit 1: Quelqu'un m'a complètement surdoué, on dirait que je dois faire plus d'efforts si je veux avoir la meilleure réponse Javascript.
Edit 2: Honnêtement, je ne peux pas croire que j'ai réussi à jouer au golf autant!
Est-ce que je me suis trompé quelque part? Je m'excuse également d'utiliser
alert
, si vous voulez tester mon code, remplacez-le parconsole.log
.Il existe actuellement une autre réponse Javascript notable: "99 bouteilles de bière" . Vérifiez-le! :RÉ
la source
JavaScript ES6,
210209205199198196 octetsCeci est une traduction brute de ma soumission C. Je ne connais pas vraiment le javascript, il y a donc matière à amélioration.
Edit: Neat, j'ai découvert des backticks
la source
console.log
avec paralert
et vous pouvez utiliser `à la place du". Ensuite, vous pouvez remplacer \ n par une nouvelle ligne. (Les ticks sont utilisés pour les chaînes de modèle, ces chaînes peuvent avoir des nouvelles lignes ...). En outre, félicitations pour me battre!console.log
est plus facile de tester. Quoi qu'il en soit, merci de m'avoir exposé aux backticks!console.log
, et ma victoire sera réduite à néant. XD)%d bottle%s of beer%s%s
. L'indice de chaque verset (nombre de bouteilles) est calculé de la même manièrei/3|0
que l'indice de chaque sous-chaîne est simplementi%3
.Brainfuck, 743 octets
Essayez-le en ligne!
Ce qui précède utilise des cellules d'habillage dans quelques emplacements pour enregistrer des instructions. J'ai également réalisé une version non-wrapping en 755 instructions .
Non compressé
Ce qui suit est un polyglotte dans le langage d'annotation Brainfuck .
la source
Python 2, 204 octets
La spécification est assez sous-spécifiée en termes d'espaces, donc je suppose ici que la dernière ligne doit avoir un retour à la ligne unique. Si la spécification clarifie le contraire, je mettrai à jour cette réponse.
Je suis assez content de cela, mais en regardant le golf anarchique, je pense que cela peut être joué au golf, éventuellement avec une approche différente.
la source
Labyrinth ,
11951190932 octetsC'est un peu excessif ...
Bien que Labyrinth ne soit pas particulièrement doué pour l’impression de chaînes (car il faut pousser tous les codes de caractères), je pense qu’il devrait être possible de faire mieux que cela en utilisant davantage de lignes longues mais plus courtes et en devenant encore plus fou avec la rotation de la grille.
Comme je pense que toute amélioration apportée au golf modifiera substantiellement la structure de ce code, j'attendrai avec une explication jusqu'à ce que je sois à court d'idées pour le perfectionner.
la source
Python 2, 195
A pris l'
i/2
idée de la réponse de Sp3000 .la source
Lot Windows, 376 octets
Très très long et moche:
la source
Python, 254 octets
Assez simple, assignez les phrases les plus courantes, imprimez chaque bit de 99 à 3, puis imprimez les dernières lignes en additionnant les variables et certaines chaînes.
la source
Julia,
227215213 octetsCeci utilise une interpolation de chaîne (
"$variable"
) et des ternaires pour construire la sortie et l’imprimer sur STDOUT.14 octets sauvés grâce à Glen O!
la source
(n>1?" bottles":" bottle")" of beer"
, utilisez" bottle""s"^(n>1)*" of beer"
- notez que le*
est nécessaire après(n<1)
car sinon il essaie de s’appliquer(n>1)" of beer"
comme pouvoir. De plus, y a-t-il un avantage à utiliserwhile n>0
overfor n=99:-1:1
(qui permet de simplifier la condition à la fin et évite le besoin séparé den=99
)?\n
et basculez la partie centrale sur interpolation (plutôt que sur",n>1?...","
, utilisation$(n>1?...")
) pour enregistrer un caractère et déplacez le,
contenu conditionnel avant la partie suivante. Il ne doit donc être écrit qu'une seule fois.JavaScript ES6, 214 octets
Popups limités:
Étendu:
@commenters: Merci pour l'idée de fonctions de flèche, sauvé 15 octets
Pour une bière infinie, utilisez simplement ce code ici, 212 octets
la source
+o'
telle qu'elle a été remplacée par+o+'
. A également vu l'occasion de changer de boucle et de répondre. Je vérifierai les fonctions de flèche maintenant :)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)
while
boucle et je posterai bientôt le code obtenu. Merci pour l'examen du code! :)CJam,
149148146144138137 137134 octetsL'hexdump ci-dessus peut être inversé avec
xxd -r
. Essayez-le en ligne dans l' interprète CJam .Au prix de 9 octets supplémentaires, pour un total de 143 octets , nous pouvons éviter les caractères non imprimables:
Comment ça fonctionne
la source
base
deux fois ajoute déjà 8 octets dans GolfScript ...C,
303299297 octetsCompiler avec
gcc -std=c99 -w
.la source
GolfScript, 143 octets
Peut-être encore place à amélioration.Je me rapproche de la révision finale.la source
Mathematica,
238226222224 octetsSauvegardé de plusieurs octets grâce à Martin Büttner.
la source
Brainfuck, 4028 octets
C'est assez hideux. Beaucoup de doublons, et très inefficace, donc il ne gagnera pas de prix. Cependant, je l'ai commencé et j'étais déterminé à le finir.
Je peux essayer d'améliorer cela, mais je ne le ferai probablement pas, car franchement, mon cerveau est foutu.
Golfé
Ungolfed
Sortie:
Essayez vous-même ici!OK, il semble donc que l'URL est trop longue pour être incluse ici. Vous devrez donc copier / coller pour l'essayer vous-même.
Je l'ai testé en utilisant cet interprète .
la source
PHP, 251 octets
Cela explique le problème pluriel / singulier.
Lisible:
la source
Faisceau ,
11411109 octetsIl me reste encore beaucoup de place pour jouer au golf avec tous les espaces vides, mais cela devient vraiment difficile à suivre et se casse assez facilement :) C'est très similaire à celui que j'ai posté pour cette question , sauf que ça va au magasin. avant que la bière atteigne 1 et que les cellules utilisées pour les paramètres aient été décalées. J'ai aussi considérablement changé la mise en page. J'essaierai de faire une explication une fois que j'essayerai quelques autres mises en page.
Essayez-le dans l'extrait de pile ici
la source
PHP,
250246244233228 octetsJe crois que c'est le plus petit jusqu'à présent. Ceci est basé sur le tir 247, avec quelques modifications pour minimiser davantage.
Minimisé
Étendu
la source
php -r
laquelle est équivalentperl -e
et similaire, il est acceptable d'omettre la balise d'ouverture. Voir la discussion correspondante dans Exécution de PHP avec-r
au lieu des balises de code .while($b)
fonctionne tout aussi bien.