Desafio
Escreva um programa que produza a letra para 99 garrafas de cerveja, mas vez de "beer", "fizz" se o número de garrafas na parede for múltiplo de 3, "buzz" se for múltiplo de 5 e "fizzbuzz" se for múltiplo de 3 e múltiplo de 5. Se o número de garrafas na parede não for múltiplo de 3 ou 5, basta exibir "cerveja" como de costume.
Letra da música
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.
Isso é código-golfe , então a submissão mais curta em cada idioma vence.
code-golf
string
kolmogorov-complexity
musicman523
fonte
fonte
Respostas:
Python 2 ,
263253245 bytesExperimente online!
fonte
['ab','cd'][x]
pode ser reescrito como'acbd'[x::2]
, apenas para salvar alguns bytesC (GCC),
276274 bytesObrigado a Neil por salvar dois bytes!
Quem não ama parênteses incomparáveis em expansões de macro?
Ungolfed:
Veja ao vivo em Coliru!
Versão alternativa (276 bytes)
fonte
#define w" on the wall"
para*w=" on the wall"
.#define w
por*w=
para salvar bytes lá. Honestamente, eu não conheço muito bem o C jogado no golfe, mas meu palpite é que ele geraw
um caractere global * implicitamente definido.#define
dw
é uma literal de string, que é automaticamente colada com literais de string adjacentes. Sew
for uma variável, eu tenho que usar a formatação de string real dentroprintf
.Röda , 273 bytes
Experimente online!
Golf ainda mais pela manhã.
fonte
PHP, 242 bytes
Experimente online!
PHP, 244 bytes
Experimente online!
use a função strtr
PHP, 245 bytes
Experimente online!
use uma função anônima na seqüência de caracteres para obter uma sustring, dependendo do número inteiro
Expandido
fonte
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.↵↵";}
. :)use
em combinação com a função anônima que economiza 1 Byte nesta versão05AB1E ,
151146143 bytesExperimente online!
fonte
SOGL ,
136135134133 133131 bytesPrimeiro de tudo, a terceira função:
A primeira função:
A segunda função:
E a parte principal:
Perdeu alguns bytes devido a um erro que
O
coloca uma nova linha antes e depois dela (e de alguma forma isso remonta à V0.9 (este é o código V0.11))fonte
Java,
344340339 bytes(-4 bytes após o efervescimento do golfe; -1 byte removendo o espaço em branco perdido)
Um pouco sem golfe (usando recuo de 1 espaço para eliminar a rolagem horizontal):
fonte
JavaScript (ES6),
316309 bytesEste é um programa completo e não uma função. Nada muito criativo, é apenas a abordagem ingênua (daí o número de bytes!). Estou usando, em
console.log()
vez de,alert()
porque muitos navegadores têm limite no número de caracteres que podem ser exibidos usandoalert()
. Observe que todos os espaços em branco e novas linhas são necessários.Ungolfed:
Aqui está o trecho:
BTW, com esta resposta, ganhei o distintivo de bronze no código-golfe ! Nunca pensei que fosse conseguir isso nunca (embora não seja uma grande conquista)!
fonte
d
função não precisa de nenhum()
s porque?:
é associativa à direita, mas você pode realmente salvar ainda mais bytes usandod=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer"
.Retina , 230 bytes
Experimente online! Explicação:
Inserções 99
_
s.Altera todos, exceto o último,
_
para a sequênciaTake one down and pass it around, $.'#.¶¶$.'#, $.'.¶
, onde¶
há uma nova linha e$.'
é a contagem de sublinhados restantes. Isso efetivamente conta de 98 para 1.Adiciona a primeira linha do primeiro verso no formato "compacto".
Adiciona a segunda linha do último verso. Por que eu preciso pular os bastidores para usar o que
_
eu não sei, mas$
parece combinar duas vezes, então não posso usar isso. Vai saber.Substitui uma corda que aparece várias vezes no verso.
Isso corresponde aos números inteiros nos versículos, e sufoca a (s) garrafa (s) apropriada (s) e expande novamente para unário novamente, em preparação para escolher a bebida. (Economizo 1 byte no
99
s dessa maneira.)Substitua múltiplos exatos pela bebida apropriada.
fonte
sed ,
468459456 bytesExperimente online!
Requer
-r
sinalizador.Explicação
Espaço preensão segura o padrão de duas linhas de repetição, com números representados como
[A-I][0-9]
(dígitos separadas para dezenas e unidades) e o tipo de bebida, como representadoX*Y*Z
, ondeX
mantém um registo de-N mod 3
, eY
de-N mod 5
.Em cada iteração posterior, os números se diminuído e os
X
s eY
s são atualizados. Em seguida, o espaço de espera é copiado para o espaço do padrão, transformado em linhas da música e impresso.fonte
C,
349345344 bytesBem, lá vai você. Isso levou uma hora.
Experimente online!
fonte
Javascript (ES6),
236234233232 bytesDemo
Ungolfed
fonte
Ruby , 261 bytes
Experimente online!
fonte
shortC ,
314312 bytesDesculpe, não há explicação, mas esqueci completamente como isso funciona.
fonte
Carvão ,
307297 bytesExperimente online!
SIM, NÓS PODEMOS! Link para a versão detalhada, isso pode ser muito praticado, tenho certeza.
fonte
⁺
s parece suspeito ...tcl, 298
demonstração
fonte