À la suite des nombreux (deux?) Défis liés à FizzBuzz publiés récemment sur PPCG, j'ai été tenté de créer le mien. Voir...
Fizz Buzz Lightyear
Écrivez un programme ou une fonction qui prend un entier n
et s'imprime FizzBuzz
pour tout nombre divisible par 15, Fizz
pour tout nombre divisible par 3 et Buzz
pour tout nombre divisible par 5, jusqu'à (et y compris) n
. La sortie pour tous i
doit être suivie d'une nouvelle ligne. Mais il y a une torsion!
Pour chaque troisième fois que vous imprimez Buzz
, Buzz Lightyear tient enfin compte de votre appel et se bloque dans votre programme. Il se présente ensuite - mais depuis qu'il s'est écrasé, une partie de ce qu'il a dit se confond avec la sortie de votre programme:
Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
(c'est-à-dire, ajoutez uniquement Lightyear, Space Ranger, Universe Protection Unit.
à Buzz
ou FizzBuzz
- quoi que ce soit que vous auriez affiché autrement. Notez l'espace de tête)
Cependant, Buzz Lightyear, étant le Space Ranger qu'il est, a une audition très aiguë, et donc l' impression FizzBuzz
comptera pour votre Buzz
compte .
Ensuite, Buzz traîne pour défendre votre ordinateur contre toutes ces sorties maléfiques, jusqu'à ce que vous atteigniez un autre nombre divisible par 5 (ou 15, car ceux-ci sont également divisibles par 5). Cela signifie que jusqu'à ce que vous deviez imprimer Buzz
(ou FizzBuzz
) à nouveau, vous n'imprimez rien du tout.
Lorsque vous atteignez enfin cette condition, Buzz part:
To infinity and beyond!
Exemple de sortie
Il s'agit de la sortie attendue pour n = 25
: (remarquez comment elle saute de 16 à 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
Règles
Un retour à la ligne facultatif est acceptable.
C'est le golf de code; en tant que tel, le code le plus court, en octets, gagne.
Supposons que donné n
est valide et supérieur ou égal à 15 (c'est-à-dire lorsque le défi s'écarte pour la première fois du fizzbuzz standard)
Buzz vous salue lorsque le "compteur Buzz" (qui compte à la fois Buzz
et FizzBuzz
) atteint 3; il part lorsque le suivant Buzz
(y compris, encore une fois, les deux Buzz
et FizzBuzz
) est imprimé.
Le nombre dans lequel il part ne compte pas pour le prochain "Buzz counter"; vous devriez plutôt recommencer à compter les Buzz
es à partir de 0. Par exemple, un programme fonctionnant avec n = 25
(exemple de sortie) devrait se terminer par un "compteur de buzz" de 1, car c'est le nombre de fois qui a Buzz
été imprimé depuis le dernier départ.
En cas de n
chute entre l'un des arrivées de Buzz et l'un de ses départs (c'est-à-dire qu'il est toujours là - vous n'imprimez rien), une résiliation gracieuse est attendue. Par conséquent, la dernière ligne de sortie serait son introduction
Les failles standard sont interdites.
n
chute entre l'arrivée de Buzz Lightyear et son départ?Réponses:
Javascript (ES6),
182175 octetsla source
Python 2 ,
185178 178172 octetsEssayez-le en ligne!
Explication
Observez: Buzz Lightyear arrive sur le troisième "numéro de buzz" et part sur le quatrième. Les «numéros de buzz» sont les multiples de cinq. Ainsi, les mouvements de Buzz se produisent sur un cycle de longueur 20.
Nous bouclons chacun
i
de 0 à l'entrée-1. (Cela signifie quei
c'est toujours un de moins que le nombre réel que nous considérons.)Utilisé
-~i
comme raccourci pouri+1
,if-~i%20<16:
vérifie sii+1
, mod 20, est 15 ou moins. (Si c'est 16 à 19, Buzz Lightyear est présent et nous ne voulons rien produire.)À l'intérieur de l'instruction if, nous voulons imprimer
To infinity and beyond!
sur chaque multiple de 20 - c'est-à-dire, chaque foisi%20
est 19. (N'oubliez pas quei
c'est un de moins que le nombre réel.) Puisquei%20
ne sera jamais supérieur à 19,i%20/19
sera 1 dans le nombre souhaité cas, <1 sinon. Python 2, commodément, tronque les flottants lors de la multiplication par des chaînes, donci%20/19*"..."
donne la chaîne complète si ellei%20
est 19, sinon""
.Si le cas ci-dessus s'applique, nous n'imprimons rien d'autre. Mais si la première expression est
""
(qui est fausse), nous utilisonsor
pour continuer. Les expressions pourFizz
,Buzz
et l'introduction sont calculées de la même manière que ci-dessus et ajoutées ensemble.Enfin, si aucun de ces cas ne s'applique, nous imprimons le numéro lui-même avec
-~i
.la source
05AB1E ,
979390 octetsEssayez-le en ligne!
Explication à venir après un nouveau golf.
Version alternative à 97 octets
la source