Inspirado por dígitos nas faixas e 1, 2, Fizz, 4, Buzz
Introdução
Sua tarefa é gerar exatamente a seguinte saída:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Desafio
Esse desafio é baseado no desafio do Fizz Buzz, e aqui está uma recapitulação: produza os números de 1 a 100 inclusive, cada número em sua própria linha, mas se o número for múltiplo de 3, você deve gerar "Fizz" em vez de o número original, se o número for múltiplo de 5, você deve enviar "Buzz" em vez do número original. Se o número for múltiplo de 15, você deve enviar "FizzBuzz" em vez do número original.
No entanto, além do requisito acima, você também deve recuar cada linha usando espaços para que cada coluna contenha caracteres exclusivos (excluindo espaços e novas linhas). Os espaços anexados a cada linha são o mínimo necessário para fazer com que todas as linhas apareçam antes que (inclusive) possua caracteres exclusivos em cada coluna.
Por exemplo, 1,2,Fizz,4
não precisa de nenhum recuo porque eles já têm personagens únicos em cada coluna (coluna 1: 12F4
, column2: i
, column3: z
, column4: z
), mas ao adicionar Buzz
precisamos travessão por dois espaços, porque caso contrário, teríamos dois z
's na terceira e na quarta coluna. Como dois espaços são suficientes para atingir a meta, você não deve recuá-la em três espaços. 7
e 8
não precisa de nenhum recuo, mas ao sair 11
precisamos recuar em um espaço, porque a 1ª coluna já possui a 1
. 13
precisa ser recuado por três espaços, porque agora a 1ª, a 2ª e a 3ª colunas têm a 1
. O recuo para as linhas restantes segue a mesma regra.
Para simplificar o desafio, o limite superior foi alterado para 50.
Especificações
Você pode escrever um programa ou uma função. Nenhum deles deve receber nenhuma entrada não vazia. Receber uma entrada vazia é bom.
Como esse é um desafio da KC, é necessário produzir a saída conforme especificado na seção Introdução. Uma única nova linha à direita é boa. Sem novas linhas de cabeçalho ou espaços extras de cabeçalho. Não há espaços extras à direita para cada linha.
Seu programa pode sair com erro ou ter uma saída STDERR não vazia, desde que STDOUT esteja em conformidade com a especificação.
Este é o código de golfe intra-idioma , o programa com o menor número de bytes vence em seu idioma.
Aplicam-se brechas padrão .
fonte
Respostas:
Python 2 , 127 bytes
Experimente online!
Uma tabela de pesquisa de cinquenta bytes parece prejudicar o tamanho do código menos que a lógica necessária para rastrear quais caracteres ocorreram em cada coluna.
fonte
Python 2 ,
167166163161 161157 bytesExperimente online!
Edições:
while
é menor quefor..range()
1 byte.exec
...i%3/2
Truque adaptado da resposta de Lynn (-2 bytes).a=map(set,[[]]*99)
, mas eu encontrei outra maneira usandoeval
erepr
com os mesmos bytes (-4 bytes).Use uma lista de conjuntos para rastrear os caracteres usados para cada coluna e defina a desigualdade para associação. O restante segue as especificações exatas fornecidas.
fonte
C (gcc) ,
145144 bytes (143 para hex)Experimente online!
fonte
Ruby , 129 bytes
Experimente online!
O crédito duplo é para Lynn aqui, pela abordagem da tabela de pesquisa e pelo algoritmo fizzbuzz .
O algoritmo FizzBuzz é muito interessante e depende da notável coincidência de que todos os números positivos, não compostos, com menos de 15 (exceto 3 e 5), quando elevados à quarta potência, são 1 a mais que um múltiplo de 15. facto:
Os valores
3**4%15
e5**4%15
são exatamente 4 separados: o comprimento da string "Fizz". Podemos explorar isso usando-os para indexar a partir do final de uma string, com pelo menos 9 caracteres. Múltiplos de 3 serão indexados a partir do início da string e múltiplos de 5 serão indexados a partir de 5 caracteres no final. Todos os outros números tentarão indexar antes do início da string e falharão, retornandonil
. Então 15, é claro, indexa o 0º caractere. O fato de "FizzBuzz" ter apenas 8 caracteres é um pequeno obstáculo; usamos um caractere de nova linha para preenchê-lo, que mais tarde será ignorado porputs
.É possível que a tabela de pesquisa possa ter um resultado mais procedimental, mas minha tentativa foi de aproximadamente 190 bytes.
fonte
[JavaScript (Node.js) REPL], 144 bytes
`
Experimente online!
O próprio programa de aviso executa um tempo inaceitável
JavaScript (Node.js) , 132 bytes por Arnauld
Experimente online!
fonte
Java (JDK 10) , 185 bytes
Experimente online!
Créditos
fonte
Haskell ,
190 187 186 178176 bytesExperimente online!
A versão um pouco mais legível (e anotada):
Edit: Acabei inline algumas funções na versão golfed para salvar mais bytes.
fonte
Jstx , 122 bytes
Experimente online!
fonte