Inspirado por Dígitos en sus carriles y 1, 2, Fizz, 4, Buzz
Introducción
Su tarea es generar exactamente el siguiente resultado:
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
Reto
Este desafío se basa en el desafío Fizz Buzz, y aquí hay un resumen: genera los números del 1 al 100 inclusive, cada número en su propia línea, pero si el número es un múltiplo de 3, debes generar "Fizz" en lugar de el número original, si el número es un múltiplo de 5, debe generar "Buzz" en lugar del número original. Si el número es un múltiplo de 15, debe generar "FizzBuzz" en lugar del número original.
Sin embargo, además del requisito anterior, también debe sangrar cada línea usando espacios para que cada columna contenga caracteres únicos (excluyendo espacios y líneas nuevas) solamente. Los espacios antepuestos a cada línea son los mínimos requeridos para que todas las líneas aparezcan antes de que (inclusive) tenga caracteres únicos en cada columna.
Por ejemplo, 1,2,Fizz,4
no necesita ninguna sangría porque ya tienen caracteres únicos en cada columna (columna 1:, 12F4
columna2:, i
columna3:, z
columna4:) z
, pero al agregar Buzz
necesitamos sangrar por dos espacios porque de lo contrario tendríamos dos z
's tanto en la tercera como en la cuarta columna. Dado que dos espacios son suficientes para lograr el objetivo, no debe sangrarlo por tres espacios. 7
y 8
no necesita ninguna sangría, pero cuando 11
salimos necesitamos sangrar por un espacio porque la primera columna ya tiene un 1
. 13
luego necesita sangrar por tres espacios porque ahora la 1ra, 2da y 3ra columna tienen a 1
. La sangría para las líneas restantes sigue la misma regla.
Para simplificar el desafío, el límite superior se ha cambiado a 50.
Especificaciones
Puedes escribir un programa o una función. Ninguno de ellos debería tomar ninguna entrada no vacía. Tomar una entrada vacía está bien.
Dado que este es un desafío de KC, debe producir el resultado tal como se especifica en la sección Introducción. Una nueva línea final está bien. Sin encabezado de nuevas líneas o espacios de encabezado adicionales. No hay espacios finales adicionales para cada línea.
Su programa puede salir con error o tener una salida STDERR no vacía siempre que STDOUT se ajuste a la especificación.
Este es el código de golf dentro del idioma , el programa con el menor número de bytes gana en su idioma.
Se aplican las lagunas predeterminadas .
fuente
Respuestas:
Python 2 , 127 bytes
Pruébalo en línea!
Una tabla de búsqueda de cincuenta bytes parece dañar el tamaño del código menos que la lógica necesaria para rastrear qué caracteres han ocurrido en cada columna.
fuente
Python 2 ,
167166163161157 bytesPruébalo en línea!
Ediciones:
while
es más corto quefor..range()
en 1 byte.exec
...i%3/2
Truco adaptado de la respuesta de Lynn (-2 bytes).a=map(set,[[]]*99)
, pero encontré otra forma de usareval
yrepr
con los mismos bytes (-4 bytes).Use una lista de conjuntos para rastrear los caracteres utilizados para cada columna y establezca la desigualdad para la membresía. El resto sigue la especificación exacta dada.
fuente
C (gcc) ,
145144 bytes (143 para hex)Pruébalo en línea!
fuente
Rubí , 129 bytes
Pruébalo en línea!
El doble crédito va para Lynn aquí, por el enfoque de la tabla de búsqueda y el algoritmo fizzbuzz .
El algoritmo FizzBuzz es muy interesante, y depende de la notable coincidencia de que todos los números positivos, no compuestos, menores de 15 (que no sean 3 y 5), cuando se elevan a la cuarta potencia, son 1 más que un múltiplo de 15. En hecho:
Los valores
3**4%15
y5**4%15
son exactamente 4 separados: la longitud de la cadena "Fizz". Podemos explotar esto usándolos para indexar desde el final de una cadena, de al menos 9 caracteres de longitud. Los múltiplos de 3 se indexarán desde el principio de la cadena, y los múltiplos de 5 indexarán desde 5 caracteres desde el final. Cualquier otro número intentará indexar desde antes del comienzo de la cadena, y fallará, regresandonil
. Luego 15, por supuesto, índices del carácter 0. El hecho de que "FizzBuzz" tenga solo 8 caracteres es un pequeño obstáculo; usamos un carácter de nueva línea para rellenarlo, que luego será ignorado porputs
.Es posible que la tabla de búsqueda pueda ser superada por un enfoque más procesal, pero mi intento fue de alrededor de 190 bytes.
fuente
[JavaScript (Node.js) REPL], 144 bytes
``
Pruébalo en línea!
El programa de advertencia en sí ejecuta un tiempo inaceptable
JavaScript (Node.js) , 132 bytes por Arnauld
Pruébalo en línea!
fuente
Java (JDK 10) , 185 bytes
Pruébalo en línea!
Créditos
fuente
Haskell ,
190 187 186 178176 bytesPruébalo en línea!
La versión ligeramente más legible (y anotada):
Editar: terminé alineando algunas funciones en la versión de golf para guardar más bytes.
fuente
Jstx , 122 bytes
Pruébalo en línea!
fuente