“99 bouteilles de fizz”

55

Défi

Ecrivez un programme qui affiche les paroles de 99 Bouteilles de bière, mais au lieu de "beer", indiquez "fizz" si le nombre de bouteilles accrochées au mur est un multiple de 3, "buzz" s’il s’agit d’un multiple de 5 et "fizzbuzz" s'il s'agit d'un multiple de 3 et d'un multiple de 5. Si le nombre de bouteilles accrochées au mur n'est pas un multiple de 3 ou 5, indiquez simplement "bière" comme d'habitude.

paroles de chanson

99 bottles of fizz on the wall, 99 bottles of fizz.
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 fizz on the wall.

96 bottles of fizz on the wall, 96 bottles of fizz.
Take one down and pass it around, 95 bottles of buzz on the wall.

95 bottles of buzz on the wall, 95 bottles of buzz.
Take one down and pass it around, 94 bottles of beer on the wall.

....

3 bottles of fizz on the wall, 3 bottles of fizz.
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 fizz on the wall.


C'est du , donc la soumission la plus courte dans chaque langue gagne.

musicman523
la source
30
J'ai 95 bouteilles de fizz. J'en emporte un. Maintenant, j'ai 94 bouteilles de bière. Logique.
Okx
2
Puis-je avoir une bouteille de fizzbeer?
Stephen
1
Est-il censé y avoir une nouvelle ligne après la 3ème bouteille?
Kritixi Lithos
2
Une nouvelle ligne est-elle requise entre les deux lignes? Avant le montage de Kritixi Lithos, il n'y en avait pas et maintenant il y en a.
dzaima
11
@Okx Eh bien, la bière est gazeuse et vous donne le bourdonnement ...
Draco18s

Réponses:

12

Python 2 , 263 253 245 octets

i=99
x=''
while i:x+=', %s on the wall.\n\n%s on the wall, %s.\n'%(('%d bottle%s of %s'%(i,'s'*(i>1),(i%3<1)*'fizz'+(i%5<1)*'buzz'or'beer'),)*3)+'GToa kteo  otnhee  dsotwonr ea nadn dp absusy  isto maer omuonrde'[i>1::2];i-=1
print x[35:]+x[:33]

Essayez-le en ligne!

Barre
la source
C'est génial! Pouvez-vous expliquer pourquoi l'interpolation des chaînes est l'option la plus courte?
musicman523
2
Par exemple ['ab','cd'][x]peut être réécrit comme 'acbd'[x::2], juste pour sauver quelques octets
Rod
7

C (GCC), 276 274 octets

Merci à Neil d' avoir économisé deux octets!

#define w" on the wall"
#define c(i)printf("%d bottle%s of %s",i,"s"+!~-i,i%3?i%5?"beer":"buzz":i%5?"fizz":"fizzbuzz"),printf(
i;f(){for(i=99;i;c((i?:99))w".\n\n"))c(i)w", "),c(i)".\n"),printf(--i?"Take one down and pass it around, ":"Go to the store and buy some more, ");}

Qui n'aime pas les parenthèses incomparables dans les extensions de macro?

Ungolfed:

#define c(i)                               \
    printf(                                \
        "%d bottle%s of %s",               \
        i,                   /* Number  */ \
        i-1 ? "s" : "",      /* Plural  */ \
        i % 3                /* FizzBuzz*/ \
            ? i % 5                        \
                ? "beer"                   \
                : "buzz"                   \
            : i % 5                        \
                ? "fizz"                   \
                : "fizzbuzz"               \
    )

i;
f() {
    for(i = 99; i; ) {
        c(i); printf(" on the wall, ");
        c(i); printf(".\n");
        printf(
            --i
                ? "Take one down and pass it around, "
                : "Go to the store and buy some more, "
        );

        // This has been stuffed into the for increment
        c((i?:99)); printf(" on the wall.\n\n");
    }
}

Voir en direct sur Coliru!

Version alternative (276 octets)

#define c(i)printf("%d bottle%s of %s",i,i-1?"s":"",i%3?i%5?"beer":"buzz":i%5?"fizz":"fizzbuzz"),printf(
i,*w=" on the wall";f(){for(i=99;i;c((i?:99))"%s.\n\n",w))c(i)"%s, ",w),c(i)".\n"),printf(--i?"Take one down and pass it around, ":"Go to the store and buy some more, ");}
Quentin
la source
C'est super cool! Je suis toujours choqué par la qualité des réponses en C avec la manipulation des chaînes.
musicman523
Sauf quelques octets en changeant #define w" on the wall"à *w=" on the wall".
MD XF
@MDXF mmh, je reçois exactement le même nombre d'octets. Est-ce que je manque quelque chose?
Quentin
Je pense qu'ils voulaient dire que vous pouvez remplacer #define wpar là *w=pour sauvegarder des octets. Honnêtement, je ne connais pas très bien le C golfé, mais j’imagine qu’il crée wun char global * implicitement défini.
musicman523
4
@ musicman523 le problème est que #defined west un littéral de chaîne, qui est automatiquement collé avec des littéraux de chaîne adjacents. Si west une variable, je dois utiliser le formatage de chaîne réel à l'intérieur printf.
Quentin
6

Röda , 273 octets

f{a=`bottle`f=` on the wall`g=`99 ${a}s of fizz`;[`$g$f, $g.
`];seq 98,1|{|b|d=`s`d=``if[b=1];c=``c=`fizz`if[b%3=0];c.=`buzz`if[b%5=0];c=`beer`if[c=``];e=`$b $a$d of $c`;[`Take one down and pass it around, $e$f.

$e$f, $e.
`]}_;[`Go to the store and buy some more, $g$f.`]}

Essayez-le en ligne!

Will golf plus tard dans la matinée.

Kritixi Lithos
la source
6

PHP, 242 octets

function f($k){return"$k bottle".(s[$k<2])." of ".([fizz][$k%3].[buzz][$k%5]?:beer);}$w=" on the wall";for($b=f($c=99);$c;)echo"$b$w, $b.
",--$c?"Take one down and pass it around":"Go to the store and buy some more",", ",$b=f($c?:99),"$w.

";

Essayez-le en ligne!

PHP, 244 octets

for($e=s,$b=fizz,$c=99;$c;)echo strtr("301245, 30124.
6, 708295.

",[" bottle",$e," of ",$c,$b," on the wall",--$c?"Take one down and pass it around":"Go to the store and buy some more",$k=$c?:99,$e=s[2>$k],$b=[fizz][$k%3].[buzz][$k%5]?:beer]);

Essayez-le en ligne!

utiliser la fonction strtr

PHP, 245 octets

$f=function($k)use(&$b){$b="$k bottle".(s[$k<2])." of ".([fizz][$k%3].[buzz][$k%5]?:beer);};for($w=" on the wall",$f($c=99);$c;)echo"$b$w, $b.
",--$c?"Take one down and pass it around":"Go to the store and buy some more",", {$f($c?:99)}$b$w.

";

Essayez-le en ligne!

utiliser une fonction anonyme dans la chaîne pour obtenir une valeur dépendante de l'entier

Étendu

$f=function($k)use(&$b){$b="$k bottle".(s[$k<2])." of ".([fizz][$k%3].[buzz][$k%5]?:beer);};
for($w=" on the wall",$f($c=99);$c;)
echo"$b$w, $b.
",--$c?"Take one down and pass it around":"Go to the store and buy some more"
,", {$f($c?:99)}$b$w.

";
Jörg Hülsermann
la source
1
Si je ne miscount vous pouvez enregistrer 2 octets ( 250 octets au total): function x($n){return"$n bottle".($n-1?s:'')." of ".(($n%3?'':fizz).($n%5?'':buzz)?:beer);}$y=" on the wall";for($b=99;$b;){$c=x($b);echo"$c$y, $c.↵",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.↵↵";}. :)
insertusernamehere
1
@insertusernamehere Vous avez un compte erroné avec quelques modifications, il enregistre 2 octets de plus. Merci. Et vous m'avez donné une petite idée à utiliser useen combinaison avec la fonction anonyme qui enregistre 1 octet dans cette version
Jörg Hülsermann
5

05AB1E , 151 146 143 octets

99LRv'¬ž“fizzÒÖ“#y35SÖÏJ‚˜1(è©y“ƒ¶€µ„‹€ƒî倕…¡, ÿÏꀂ ÿ€‰€€íÒ.“ªõ®y“ÿÏꀂ ÿ€‰€€íÒ, “D#4£ðýs…ÿÿ.}‚‚˜'Ïê'±¥:`)¦¦¬#7£ðý¨“‚œ€„€€ƒï€ƒ‚¥€ä€£, ÿ.“ª)˜»

Essayez-le en ligne!

Emigna
la source
4

SOGL , 136 135 134 133 131 octets

Ƨ, o▓k
"πFT+╔¡‘oW
³³q"'bμ⁸‘oH? so}5\;3\«+"ΞQv↑χāσκN⌡κYT¡‘_,S─‘oθwoX▓
MH∫}¹±{▓WkƧ.¶oH¡"sΗ─χpēGķ¶¾3Ζ^9f.⅟▒E┌Fρ_╬a→‘KΘw⁽oXH‽M}HkW">⁸‘p

Tout d'abord, la 3ème fonction:

                                    ▓  name this "▓" (example input: 15)                          [15]
³³                                     Create 4 extra copies of the top thing (number of things)  [15, 15, 15, 15, 15]
  q                                    output without popping one of them                         [15, 15, 15, 15, 15]
   "...‘o                              output " bottle"                                           [15, 15, 15, 15, 15]
         H?   }                        if pop-1 [isn't 0]                                         [15, 15, 15, 15]
            so                           output "s"                                               [15, 15, 15, 15]
               5\                      push if POP divides by 5                                   [15, 15, 15, 1]
                 ;                     swap [if divides & another number copy]                    [15, 15, 1, 15]
                  3\«                  push if POP divides by 3, multiplied by 2                  [15, 15, 1, 2]
                     +                 add those together                                         [15, 15, 3]
                      "...‘            push "buzz fizz fizzbuzz beer"                             [15, 15, 3, "buzz fizz fizzbuzz beer"]
                           ...‘o       output " of " (done over here to save a byte for a quote)  [15, 15, 3, "buzz fizz fizzbuzz beer"]
                                θ      split ["buzz fizz fizzbuzz beer"] on spaces                [15, 15, 3, ["buzz","fizz","fizzbuzz","beer"]]
                                 w     get the index (1-indexed, wrapping)                        [15, 15, ["buzz","fizz","fizzbuzz","beer"], "fizzbuzz"]
                                  o    output that string                                         [15, 15, ["buzz","fizz","fizzbuzz","beer"]]
                                   X   pop the array off of the stack                             [15, 15]

La première fonction:

Ƨ, o▓k
     k  name this "function" "k"
Ƨ, o    output ", "
    ▓   execute the "bottleify" function

La deuxième fonction:

"πFT+╔¡‘oW
         W  call this "W"
"πFT+╔¡‘    push " on the wall"
        o   output it

Et la partie principale:

MH∫}                                     repeat 99 times, each time pushing index
    ¹                                    wrap in an array
     ±                                   reverse it
      {                                  iterate over it
       ▓                                 execute that function
        W                                execute that function
         k                               execute that function
          Ƨ.¶o                           output ".\n"
              H¡                         push if POP-1 isn't 0 (aka 1 if pop <> 1, 0 if pop == 1)
                "...‘                    push "Stake one down and pass it aroundSgo to the store and buy some more"
                     K                   push the first letter of that string
                      Θ                  split ["take one down and pass it aroundSgo to the store and buy some more" with "S"]
                       w                 gets the xth (1-indexed, wrapping) item of that array
                        ⁽o               uppercase the 1st letter and output
                          X              pop the array off
                           H‽            if pop-1 [isn't 0]
                             M           push 100
                              }          ENDIF
                               H         decrease POP
                                k        execute that function
                                 W       execute that function
                                  ">⁸‘p  output ".\n\n"

Perdu quelques octets à cause d'un bogue qui Omet une nouvelle ligne avant et après (et d'une manière ou d'une autre, cela revient à V0.9 (c'est du code V0.11))

dzaima
la source
4

Java, 344 340 339 octets

(-4 octets après avoir joué au golf fizzbuzz; -1 octet supprimant les espaces parasites perdus)

interface X{static void main(String[]a){for(int i=99;i>0;System.out.printf("%s on the wall, %s.%n%s, %s on the wall.%n%n",b(i),b(i--),i<1?"Go to the store and buy some more":"Take one down and pass it around",b(i<1?99:i)));}static String b(int i){return i+" bottle"+(i>1?"s":"")+" of "+(i%3<1?"fizz":"")+(i%5<1?"buzz":i%3<1?"":"beer");}}

Légèrement non-golfé (en utilisant une indentation à 1 espace pour éliminer le défilement horizontal):

interface X {
 static void main(String[]a){
  for(int i=99;i>0;System.out.printf("%s on the wall, %s.%n%s, %s on the wall.%n%n",
   b(i),b(i--),
   i<1?"Go to the store and buy some more":"Take one down and pass it around",
   b(i<1?99:i)));
 }
 static String b(int i){
  return i+" bottle"+(i>1?"s":"")+" of "+(i%3<1?"fizz":"")+(i%5<1?"buzz":i%3<1?"":"beer");
 }
}
hjk
la source
4

JavaScript (ES6), 316 309 octets

C'est un programme complet plutôt qu'une fonction. Rien de très créatif, c'est juste l'approche naïve (d'où le décompte!). J'utilise console.log()au lieu de alert()parce que beaucoup de navigateurs ont une limite sur le nombre de caractères qui peuvent être affichés en utilisant alert(). Notez que tous les espaces et les nouvelles lignes sont nécessaires.

a="";for(i=99;i>0;i--){b=j=>"bottle"+(j>1?"s":"");d=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer");w=" on the wall";o=" of ";a+=`${i+" "+b(i)+o+d(i)+w+", "+i+" "+b(i)+o+d(i)}.
${i>1?"Take one down and pass it around, ":"Go to the store and buy some more, "}${(y=i-1?i-1:99)+" "+b(y)+o+d(y)+w}.

`;}console.log(a)

Ungolfed:

let accumulator = "";
for(let i = 99; i>0; i--){
    let bottleString = j => "bottle"+(j>1?"s":""),
    drink = a =>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer",
    wallString = " on the wall",
    of=" of ";
    accumulator += `${i+" "+bottleString(i)+of+drink(i)+wallString+", "+i+" "+bottleString(i)+of+drink(i)}.
${i>1?"Take one down and pass it around, ":"Go to the store and buy some more, "}${(y=i-1?i-1:99)+" "+bottleString(y)+of+drink(y)+wallString}.

`;
}

console.log(accumulator);

Voici l'extrait:

a="";for(i=99;i>0;i--){b=j=>"bottle"+(j>1?"s":"");d=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer";w=" on the wall";o=" of ";a+=`${i+" "+b(i)+o+d(i)+w+", "+i+" "+b(i)+o+d(i)}.
${i>1?"Take one down and pass it around, ":"Go to the store and buy some more, "}${(y=i-1?i-1:99)+" "+b(y)+o+d(y)+w}.

`;}console.log(a)

BTW, avec cette réponse, j'ai gagné l'insigne de bronze en ! Jamais pensé que je vais accomplir cela jamais (pas que c'est une grande réussite, cependant.)!

Arjun
la source
Votre dfonction n’a pas besoin de ()s car elle ?:est juste-associative, mais vous pouvez en fait économiser encore plus d’octets avec d=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer".
Neil
3

Rétine , 230 octets


99$*_
_\B
Take one down and pass it around, $.'#.¶¶$.'#, $.'.¶
^
99#, 99.¶
_
Go to the store and buy some more, 99#.
#
 on the wall
1\b|(\d+)
$& bottle$#1$*s of $&$*_
\b(_{15})+\b
fizzbuzz
\b(_{5})+\b
buzz
\b(___)+\b
fizz
_+
beer

Essayez-le en ligne! Explication:


99$*_

Insère 99 _s.

_\B
Take one down and pass it around, $.'#.¶¶$.'#, $.'.¶

Remplace tous les éléments sauf le dernier _par la chaîne Take one down and pass it around, $.'#.¶¶$.'#, $.'.¶, où est une nouvelle ligne et $.'le nombre de caractères de soulignement restants. Cela revient effectivement de 98 à 1.

^
99#, 99.¶

Ajoute la première ligne du premier verset au format "compact".

_
Go to the store and buy some more, 99#.

Ajoute la deuxième ligne du dernier verset. Pourquoi ai-je besoin de sauter par-dessus des cerceaux pour utiliser le _je ne sais pas, mais $semble correspondre deux fois, donc je ne peux pas l'utiliser. Allez comprendre.

#
 on the wall

Remplace une chaîne qui apparaît plusieurs fois dans le verset.

1\b|(\d+)
$& bottle$#1$*s of $&$*_

Cela correspond aux nombres entiers dans les versets, et ajoute le (s) flacon (s) approprié (s), et reprend à nouveau unaire, en préparation du choix de la boisson. (J'économise 1 octet sur le 99s de cette façon.)

\b(_{15})+\b
fizzbuzz
\b(_{5})+\b
buzz
\b(___)+\b
fizz
_+
beer

Remplacez les multiples exacts avec la boisson appropriée.

Neil
la source
2

sed , 468 459 456 octets

s:^:99 bottles of fizz on the wall, 99 bottles of fizz.:
p
s:99:I8:g
s:fizz:XYYZ:g
x
s:^:Take one down and pass it around, I8 bottles of XYYZ on the wall.\n:
G
x
:
g
s:XXX:fizz:g
s:Y{5}:buzz:g
s:\bX*Y*Z:beer:g
s:[XYZ]::g
y:ABCDEFGHI:123456789:
s:\b0::g
/ 1 /bq
p
x
s:^::
tc
:c
s:(\S)0:\1@:g
Td
y:ABCDEFGHI:0ABCDEFGH:
:d
y:123456789@:0123456789:
s:(XXX)*(Y{5})*(Y*Z):XY\3:g
x
b
:q
s:es:e:g
aGo to the store and buy some more, 99 bottles of fizz on the wall.

Essayez-le en ligne!

Nécessite un -rdrapeau.

Explication

L'espace d'attente contient le motif de deux lignes répétitives, les numéros étant représentés par [A-I][0-9](chiffres séparés pour les dizaines et les un) et le type de boisson représenté par X*Y*Z, où Xgarde trace de -N mod 3, et Yde -N mod 5.

A chaque itération suivante, les nombres sont décrémentés et les Xs et Ys sont mis à jour. L'espace d'attente est ensuite copié dans l'espace du motif, transformé en lignes du morceau et imprimé.

eush77
la source
2

C, 349 345 344 octets

#define b(x)x^1?" bottles":" bottle"
#define g i-1?"Take one down and pass it around":"Go to the store and buy some more"
*w=" on the wall";*s(x){return x?x%15?x%5?x%3?"beer":"fizz":"buzz":"fizzbuzz":"fizz";}i=100;main(){while(--i){printf("%d%s of %s%s, %d%s of %s.\n%s, %d%s of %s%s.\n",i,b(i),s(i),w,i,b(i),s(i),g,i-1?i-1:99,b(i-1),s(i-1),w);}}

Eh bien voilà. Cela a pris une heure.

Essayez-le en ligne!

MD XF
la source
2

Javascript (ES6), 236 234 233 232 octets

for(i=99;i;console.log(z()+`, ${z(_)}.
${--i?'Take one down and pass it around':'Go to the store and buy some more'}, ${z()}.

`))z=(o=' on the wall',j=i||99)=>j+` bottle${j>1?'s':_} of `+((j%3?_:'fizz')+(j%5?_='':'buzz')||'beer')+o

Démo

// replace console.log to avoid 50-log limit in snippets:
console.log=_=>document.write(`<pre>${_}</pre>`)

for(i=99;i;console.log(z()+`, ${z(_)}.
${--i?'Take one down and pass it around':'Go to the store and buy some more'}, ${z()}.

`))z=(o=' on the wall',j=i||99)=>j+` bottle${j>1?'s':_} of `+((j%3?_:'fizz')+(j%5?_='':'buzz')||'beer')+o

Ungolfed

i = 99  // start counter at 99

z = (   // define function z which takes arguments with defaults:
   o = ' on the wall', // o = defaults to ' on the wall'
   j = i || 99         // j = defaults to value of counter i - or 99 when i == 0
) => 
    j +                 // our current j counter
    ' bottle' +
    (j > 1 ? 's' : _) + // choose 's' when we have more than 1 bottle, or blank _
    (
        (j % 3 ? _ : 'fizz') +      // if j % 3 is 0, add 'fizz', otherwise blank _
        (j % 5 ? _ = '' : 'buzz')   // if j % 5 is 0, add 'buzz', otherwise blank _
                                    // _ gets defined here since it's the first place it's used
            ||                      // if no fizz or buzz, result is a falsey empty string
        'beer'                      // replace falsey value with 'beer'
    ) +
    o                               // append o

while (i) {         // while counter is non-zero
    console.log(    // output string:
        z() +       // call z without o argument
        ', ' +
        z(_) +      // call z with blank _ for o to block ' on the wall' here
        '.\n' +
        ( --i       // decrement i, if still non-zero:
            ? 'Take one down and pass it around'
                    // otherwise:
            : 'Go to the store and buy some more'
        ) + 
        ', ' +
        z() +       // another call to z without o
        '.\n\n'
    )
}
Nderscore
la source
1

Ruby , 261 octets

99.downto(1){|i|w=' on the wall'
f=->x{a='';x%3<1&&a+='fizz';x%5<1&&a+='buzz';a<?a&&a='beer';"%d bottle%s of %s"%[x,x<2?'':?s,a]}
puts [f[i]+w,f[i]+?.+$/+(i<2?'Take one down and pass it around':'Go to the store and buy some more'),f[i<2?99:i-1]+w+?.+$/*2]*', '}

Essayez-le en ligne!

Alex
la source
1

shortC , 314 312 octets

Db(x)x^1?" bottles":" bottle"
Dg i-1?"Take one down and pass it around":"Go to the store and buy some more"
*w=" on the wall";*s(x){Tx?x%15?x%5?x%3?"beer":"fizz":"buzz":"fizzbuzz":"fizz";}i=100;AW--i){R"%d%s of %s%s, %d%s of %s.\n%s, %d%s of %s%s.\n",i,b(i),s(i),w,i,b(i),s(i),g,i-1?i-1:99,b(i-1),s(i-1),w

Désolé, il n'y a pas d'explication, mais j'ai complètement oublié comment cela fonctionne.

MD XF
la source
Vous devriez envisager d'ajouter une autre réponse en abrégé, qui suit la logique de cette réponse, pour voir comment ça se passe. En outre, il semble que dans vos deux réponses, vous n'utilisiez votre macro qu'une seule fois pour g, vous devriez pouvoir la mettre en ligne et économiser quelques octets.
musicman523
Pouvez-vous poster la version développée?
CalculatriceFeline
@CalculatorFeline Le code C équivalent est déjà , si c'est ce que vous demandez
musicman523
1

Charbon de bois , 307 297 octets

A”|‽2?{:×G↗”¦αA“6«eMηOU¶¿”¦ζA“9“e▷·gqε-g}”¦βA“9B{⦃⁺Bφ=;λO”¦ωAfizz¦φAbuzz¦γAbeer¦ηA”↶C▶▶d℅d¬r·US\λTθNevT◧→GM⁸ω┦τA“M↧k↓⁺*f÷,ψZ¢▶\¿|P“№κ×υpξXoW”¦σA.¶πF⮌…¹¦¹⁰⁰«A⎇⁻ι¹αζθ¿∧¬﹪鳬﹪ι⁵A⁺φγ﹪ι³Aφ﹪ι⁵AγεAηε⁺⁺⁺⁺⁺⁺⁺IιθεβIιθεπ¿⁻ι¹A⁻ι¹λA⁹⁹λA⎇⁻λ¹αζθ¿∧¬﹪볬﹪λ⁵A⁺φγ﹪λ³Aφ﹪λ⁵AγεAηε¿⁻ι¹AτδAσδ⁺⁺⁺⁺δλθεω

Essayez-le en ligne!

OUI NOUS POUVONS! Lien vers la version commentée, cela peut être beaucoup joué au golf, j'en suis sûr.

Charlie
la source
Malheureusement, vous avez oublié de créer un lien vers la version commentée, mais cette séquence semble suspecte ...
Neil
1

tcl, 298

proc B i {set x " bottle[expr $i>1?"s":""] of [expr $i%3?$i%5?"beer":"":"fizz"][expr $i%5?"":"buzz"]"}
set i 99
time {puts "$i[B $i][set w " on the wall"], $i[B $i].
Take one down and pass it around, [incr i -1][B $i]$w."} 98
puts "1[B $i]$w, 1[B $i].
Go to the store and buy some more, 99[B 9]$w."

démo

sergiol
la source