Inspiré par les chiffres dans leurs voies et 1, 2, Fizz, 4, Buzz
introduction
Votre tâche consiste à générer exactement la sortie suivante:
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
Défi
Ce défi est basé sur le défi Fizz Buzz, et voici un récapitulatif: sortez les nombres de 1 à 100 inclus, chaque nombre sur sa propre ligne, mais si le nombre est un multiple de 3, vous devez sortir "Fizz" au lieu de le numéro d'origine, si le nombre est un multiple de 5, vous devez sortir "Buzz" au lieu du numéro d'origine. Si le nombre est un multiple de 15, vous devez sortir "FizzBuzz" au lieu du nombre d'origine.
Cependant, en plus de l'exigence ci-dessus, vous devez également mettre en retrait chaque ligne en utilisant des espaces pour que chaque colonne contienne des caractères uniques (à l'exclusion des espaces et des retours à la ligne) uniquement. Les espaces ajoutés à chaque ligne sont le minimum requis pour que toutes les lignes apparaissent avant qu'il (inclus) ait des caractères uniques dans chaque colonne.
Par exemple, 1,2,Fizz,4
ne nécessite pas de retrait parce qu'ils ont déjà des caractères uniques dans chaque colonne (colonne 1: 12F4
, colonne2: i
, colonne3: z
, column4: z
), mais lors de l' ajout Buzz
nous devons tiret par deux espaces , car sinon nous aurions deux z
« s dans les 3e et 4e colonnes. Étant donné que deux espaces suffisent pour atteindre l'objectif, vous ne devez pas le mettre en retrait de trois espaces. 7
et 8
n'a pas besoin d'indentation, mais lors de la sortie, 11
nous devons indenter d'un espace car la 1ère colonne a déjà un 1
. 13
doit ensuite être indenté de trois espaces, car maintenant la 1ère, la 2ème et la 3ème colonne ont toutes un 1
. Le retrait des lignes restantes suit la même règle.
Pour simplifier le défi, la limite supérieure a été modifiée à 50.
Spécifications
Vous pouvez écrire un programme ou une fonction. Aucun d'eux ne doit prendre aucune entrée non vide. Prendre une entrée vide est très bien.
Comme il s'agit d'un défi KC, vous devez produire la sortie comme spécifié dans la section Introduction. Une seule nouvelle ligne de fin est très bien. Pas de nouvelles lignes de titre ni d'espaces de titre supplémentaires. Aucun espace de fin supplémentaire pour chaque ligne.
Votre programme peut quitter avec erreur ou avoir une sortie STDERR non vide tant que STDOUT est conforme à la spécification.
Il s'agit du code-golf intra-langue , le programme avec le plus petit nombre d'octets gagne dans sa langue.
Les failles par défaut s'appliquent.
la source
Réponses:
Python 2 , 127 octets
Essayez-le en ligne!
Une table de recherche de cinquante octets semble nuire à la taille du code moins que la logique nécessaire pour suivre les caractères qui se sont produits dans chaque colonne.
la source
Python 2 ,
167166163161 161157 octetsEssayez-le en ligne!
Modifications:
while
est plus court quefor..range()
d'un octet.exec
...i%3/2
de la réponse de Lynn (-2 octets).a=map(set,[[]]*99)
, mais j'ai trouvé une autre façon d'utilisereval
etrepr
avec les mêmes octets (-4 octets).Utilisez une liste d'ensembles pour suivre les caractères utilisés pour chaque colonne et définir l'inégalité d'appartenance. Le reste suit la spécification exacte donnée.
la source
C (gcc) ,
145144 octets (143 pour hex)Essayez-le en ligne!
la source
Rubis , 129 octets
Essayez-le en ligne!
Double crédit revient à Lynn ici, pour l' approche de la table de recherche et l' algorithme fizzbuzz .
L'algorithme FizzBuzz est très intéressant, et il repose sur la remarquable coïncidence que tous les nombres positifs non composites inférieurs à 15 (autres que 3 et 5), lorsqu'ils sont élevés à la 4e puissance, sont 1 de plus qu'un multiple de 15. Dans fait:
Les valeurs
3**4%15
et5**4%15
sont exactement 4 écartées: la longueur de la chaîne "Fizz". Nous pouvons l'exploiter en les utilisant pour indexer à la fin d'une chaîne, d'au moins 9 caractères. Les multiples de 3 indexeront à partir du début de la chaîne et les multiples de 5 indexeront à partir de 5 caractères à partir de la fin. Tout autre nombre tentera d'indexer avant le début de la chaîne et échouera en retournantnil
. Ensuite, bien sûr, 15 index à partir du 0e caractère. Le fait que "FizzBuzz" ne comporte que 8 caractères est un petit obstacle; nous utilisons un caractère de nouvelle ligne pour le remplir, qui sera plus tard ignoré parputs
.Il est possible que la table de recherche puisse être distancée par une approche plus procédurale, mais ma tentative a été de l'ordre de 190 octets.
la source
[JavaScript (Node.js) REPL], 144 octets
"
Essayez-le en ligne!
Le programme d'avertissement lui-même s'exécute une durée inacceptable
JavaScript (Node.js) , 132 octets par Arnauld
Essayez-le en ligne!
la source
Java (JDK 10) , 185 octets
Essayez-le en ligne!
Crédits
la source
Haskell ,
190 187 186 178 178176 octetsEssayez-le en ligne!
La version légèrement plus lisible (et annotée):
Edit: j'ai fini par intégrer certaines fonctions dans la version golfée pour économiser plus d'octets.
la source
Jstx , 122 octets
Essayez-le en ligne!
la source