A raíz de los muchos (¿dos?) Desafíos relacionados con FizzBuzz publicados recientemente en PPCG, he tenido la tentación de proponer los míos. Mirad...
Fizz Buzz Lightyear
Escriba un programa o función que tome un número entero n
y se imprima FizzBuzz
para cualquier número divisible por 15, Fizz
para cualquier número divisible por 3 y Buzz
para cualquier número divisible por 5, hasta (e incluido) n
. La salida para todos i
debe ir seguida de una nueva línea. Pero hay un giro!
Por cada tercera vez que imprime Buzz
, Buzz Lightyear finalmente atiende su llamada y aterriza en su programa. Luego se presenta, pero desde que se estrelló, parte de lo que dijo se mezcla con la salida de su programa:
Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
(es decir, sólo se anexados Lightyear, Space Ranger, Universe Protection Unit.
a Buzz
o FizzBuzz
- lo que es lo que le ha mostrado lo contrario Tenga en cuenta el espacio inicial.)
Sin embargo, Buzz Lightyear, siendo el Space Ranger que es, tiene una audición muy aguda, por lo que la impresión FizzBuzz
contará para su Buzz
cuenta .
Luego, Buzz se queda para defender su computadora de toda esa salida malvada, hasta que alcanza otro número que es divisible por 5 (o 15, ya que también son divisibles por 5). Lo que eso significa es que hasta que tenga que imprimir Buzz
(o FizzBuzz
) nuevamente, no imprime nada en absoluto.
Cuando finalmente alcanzas esa condición, Buzz se va:
To infinity and beyond!
Salida de ejemplo
Este es el resultado esperado para n = 25
: (observe cómo se salta de 16 a 19)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
To infinity and beyond!
Fizz
22
23
Fizz
Buzz
Reglas
Nueva línea final opcional es aceptable.
Este es el código de golf; como tal, el código más corto, en bytes, gana.
Suponga que lo dado n
es válido y mayor o igual a 15 (que es cuando el desafío se desvía por primera vez del fizzbuzz estándar)
Buzz te saluda cuando el "contador de Buzz" (que cuenta ambos Buzz
y FizzBuzz
) golpea 3; él sale cuando se imprime el siguiente Buzz
(incluyendo, nuevamente, ambos Buzz
y FizzBuzz
).
El número en el que sale no cuenta para el próximo "contador de zumbidos"; en su lugar, debe comenzar a contar los Buzz
es nuevamente desde 0. Por ejemplo, un programa que se ejecuta con n = 25
(salida de ejemplo) debe terminar con un "Contador de zumbidos" de 1, ya que esa es la cantidad de veces que Buzz
se imprimió desde la última vez que se fue.
En caso de que n
caiga entre una de las llegadas de Buzz y una de sus salidas (es decir, él todavía está allí, no está imprimiendo nada), se espera una terminación elegante. Por lo tanto, la última línea de salida sería su introducción.
Las lagunas estándar están prohibidas.
n
cae entre la llegada de Buzz Lightyear y su partida?Respuestas:
Javascript (ES6),
182175 bytesfuente
Python 2 ,
185178172 bytesPruébalo en línea!
Explicación
Observar: Buzz Lightyear llega al tercer "número de zumbido" y sale en el cuarto. Los "números de zumbido" son múltiplos de cinco. Por lo tanto, los movimientos de Buzz suceden en un ciclo de longitud 20.
Hacemos un ciclo de cada uno
i
de 0 a través de input-1. (Esto significa quei
siempre es uno menos que el número real que estamos considerando).Utilizando
-~i
como acceso directo parai+1
,if-~i%20<16:
comprueba sii+1
, mod 20, es 15 o menos. (Si son de 16 a 19, Buzz Lightyear está presente y no queremos generar nada).Dentro de la declaración if, queremos imprimir
To infinity and beyond!
en cada múltiplo de 20, es decir, cada vezi%20
es 19. (Recuerde quei
es uno menos que el número real). Dadoi%20
que nunca será mayor que 19,i%20/19
será 1 en el deseado caso, <1 de lo contrario. Python 2, convenientemente, trunca los flotadores cuando se multiplica por cadenas, por lo quei%20/19*"..."
da la cadena completa sii%20
es 19, de lo contrario""
.Si se aplica el caso anterior, no imprimimos nada más. Pero si la primera expresión es
""
(que es falsa), usamosor
para continuar. Las expresiones paraFizz
,Buzz
y la introducción se calculan de manera similar a la anterior y se suman.Finalmente, si ninguno de estos casos aplica, imprimimos el número mismo con
-~i
.fuente
05AB1E ,
979390 bytesPruébalo en línea!
Explicación por venir después de más golf.
Versión alternativa de 97 bytes
fuente