introduction
Dans notre récent effort pour rassembler des catalogues des solutions les plus courtes pour des exercices de programmation standard, voici le tout premier défi FizzBuzz à la vanille de PPCG. Si vous souhaitez voir d’autres défis du catalogue, il y a "Hello World!" et "Ce nombre est-il un nombre premier?" .
Défi
Ecrivez un programme qui imprime les nombres décimaux de 1 à 100 inclus. Mais pour des multiples de trois, imprimez «Fizz» au lieu du nombre et pour des multiples de cinq, imprimez «Buzz». Pour les nombres multiples de trois et cinq, imprimez «FizzBuzz».
Sortie
La sortie sera une liste de nombres (et Fizzes, Buzzes et FizzBuzz) séparés par une nouvelle ligne (ou \n
ou \r\n
). Une nouvelle ligne est acceptable, mais une nouvelle ligne ne l’est pas. En dehors de votre choix de nouvelle ligne, la sortie devrait ressembler exactement à ceci:
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
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
La seule exception à cette règle est la sortie constante de l'interpréteur de votre langue qui ne peut pas être supprimée, telle qu'un message d'accueil, des codes de couleur ANSI ou une indentation.
Règles supplémentaires
Il ne s'agit pas de trouver la langue avec l'approche la plus courte pour jouer à FizzBuzz, mais de trouver l'approche la plus courte dans toutes les langues. Par conséquent, aucune réponse ne sera marquée comme acceptée.
Les soumissions sont notées en octets dans un codage préexistant approprié, généralement (mais pas nécessairement) UTF-8. Certaines langues, comme les dossiers, sont un peu difficiles à noter - en cas de doute, demandez-les sur Meta.
Rien ne peut être imprimé sur STDERR.
Contrairement à nos règles habituelles, n'hésitez pas à utiliser une langue (ou une version linguistique) même si c'est plus récent que ce défi. Si quelqu'un veut en abuser en créant un langage dans lequel le programme vide génère une sortie FizzBuzz, félicitations pour avoir ouvert la voie à une réponse très ennuyeuse.
Notez qu'il doit y avoir un interprète pour que la soumission puisse être testée. Il est permis (et même encouragé) d’écrire cet interprète vous-même pour une langue non encore implémentée.
Si votre langue de choix est une variante triviale d'une autre langue (potentiellement plus populaire) qui possède déjà une réponse (pensez aux dialectes BASIC ou SQL, aux shells Unix ou aux dérivés triviaux de Brainfuck tels qu'Alphuck et ???), envisagez d'ajouter une note au texte existant. répondez que la même solution ou une solution très similaire est également la plus courte dans l’autre langue.
La sortie étant fixe, vous pouvez coder la sortie en dur (mais ce n'est peut-être pas l'option la plus courte).
Vous pouvez utiliser des solutions préexistantes, à condition de créditer l'auteur original du programme.
Les failles standard sont par ailleurs interdites.
En passant, veuillez ne pas annuler les réponses ennuyeuses (mais valables) dans des langues où il n’ya pas grand chose à jouer au golf; ceux-ci sont toujours utiles à cette question car elle tente de compiler un catalogue aussi complet que possible. Cependant, faites principalement des réponses dans des langues où les auteurs devaient réellement s’efforcer de jouer au code.
Catalogue
var QUESTION_ID=58615;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=30525;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"https://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>
la source
Nothing can be printed to STDERR.
Est-ce vrai uniquement lors de l'exécution, ou également lors de la compilation (en supposant qu'ilRéponses:
Python 2, 56
la source
i=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100
. Quelqu'un veut-il utiliser des expressions de recherche brutales pour optimiser le bit bashing?Hexagonie , 91 octets
Merci pour la prime :)
Wow, je n'aurais jamais imaginé pouvoir battre la solution de Martin Hexagony . Mais, qui l'aurait cru, je l'ai fait. Après plusieurs jours d'échec parce que je n'avais ni le colorant Hexagony ni l' EsotericIDE pour vérifier ma solution. Plusieurs aspects de la spécification étant incorrects, j'ai donc produit quelques «solutions» erronées en utilisant simplement un crayon et du papier et un éditeur de texte. Enfin, j'ai finalement surmonté ma paresse et cloné les deux référentiels, téléchargé VisualStudio et les compilé. Wow, quels outils utiles ils sont! Comme vous pouvez le constater, je suis loin d’être quelqu'un que vous appelez un programmeur (enfin, je n'ai même pas Visual Studio installé, et je n’ai pratiquement aucune idée de la façon de compiler un programme);)
Il m'a fallu encore un certain temps pour trouver une solution de travail, et elle est assez encombrée et chaotique, mais la voici dans toute sa splendeur:
Fizzbuzz dans un hexagone de taille 6:
Disposition hexagonale:
Et la belle interprétation, grâce à Hexagony Colorer de Timwi :
Voici donc une animation GIF de 110 secondes à 2 ips, montrant le déroulement du programme au cours des 6 premiers chiffres
1, 2, Fizz, 4, Buzz, Fizz
, les 220 premiers ticks du programme (cliquez sur l'image pour l'agrandir):Mon Dieu, grâce au logiciel de composition Natron, l'animation du pointeur était toujours fastidieuse à créer, mais gérable. Enregistrer 260 images de la mémoire était moins amusant. Malheureusement, EsotericIDE ne peut pas le faire automatiquement. Quoi qu'il en soit, profitez de l'animation!
Après tout, une fois que vous avez compris le modèle de mémoire et l’emballage plutôt contre-intuitif des chemins qui traversent les frontières de l’hexagone, Hexagony n’est pas si difficile à travailler. Mais jouer au golf peut être pénible. ;)
C'était amusant!
la source
3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('
suit. (après le z, qui peut être "annulé" avec a) ou en y mettant le z. Maintenant c'est a) qui pousse toutes les commandes du chemin orange 1 tick plus tard et qui revient avec le no-op qui était sur la ligne 3. Btw, j'ai aussi installé Visual Studio juste à cause de Hexagony Colorer et Esoteric IDE: PLabyrinthe , 94 octets
Sous-100! C'était amusant.
Explication
Commençons par une brève introduction à Labyrinth - n'hésitez pas à l'ignorer si vous êtes déjà familiarisé avec les bases:
Le labyrinthe a deux piles - une pile principale et une pile auxiliaire. Les deux piles ont un nombre infini de zéros au bas, par exemple
+
, une pile vide ajoute deux zéros, poussant ainsi le zéro.Le flux de contrôle dans Labyrinth est décidé par les jonctions, qui regardent en haut de la pile pour déterminer la prochaine étape. Négatif signifie tourner à gauche, zéro signifie aller tout droit et positif signifie tourner à droite ... mais si nous heurtons un mur, nous inversons la direction. Par exemple, si seuls le droit devant et le virage à gauche sont possibles mais que le haut de la pile est positif, alors puisque nous ne pouvons pas tourner à droite, nous tournons plutôt à gauche.
Les chiffres dans Labyrinth pop
x
et push10*x + <digit>
, ce qui facilite la création de grands nombres. Cependant, cela signifie que nous avons besoin d'une instruction pour appuyer sur 0 afin de commencer un nouveau numéro, qui est_
dans Labyrinth.Passons maintenant au code actuel!
rouge
L'exécution commence
"
dans le coin supérieur gauche, qui est un NOP. Next is)
, qui incrémente le haut de la pile, en poussant 1 au premier passage et en augmentantn
à chaque passage suivant.Ensuite, nous dupliquons
n
avec:
. Comme iln
est positif, nous tournons à droite en exécutant}
(en haut de la pile principale sur auxiliaire) et:
. Nous nous sommes retrouvés dans une impasse, nous avons donc fait demi-tour et exécuté}
et:
une fois de plus, laissant les piles commeEncore une fois,
n
c'est positif et on tourne à droite, on exécute_101/
ce qui divisen
par 101. Sin
est 101 alorsn/101 = 1
on tourne et on@
termine par le programme, qui termine le programme. Sinon, notre situation actuelle estOrange 1 (mod 3)
3
transforme le zéro supérieur en 3 (10*0 + 3 = 3
) et%
effectue un modulo. Sin%3
est positif, nous tournons à droite dans le jaune"
. Sinon, nous effectuons70.105.122:..
ce qui sortFizz
. Notez que nous n'avons pas besoin de pousser de nouveaux zéros avec_
puisque depuisn%3
était zéro dans ce cas, nous pouvons donc exploiter les zéros infinis au bas de la pile. Les deux chemins se retrouvent en bleu clair.Bleu clair
Le sommet de la pile est actuellement
n%3
, ce qui pourrait être positif. Il_;
suffit donc d’appuyer sur un zéro et de le faire apparaître immédiatement pour s’assurer que nous allons tout droit au lieu de tourner dans le@
. Nous=
échangeons ensuite les sommets des piles principale et auxiliaire en donnant:Orange 2 (mod 5)
Cette situation est similaire à celle d’avant, sauf que if
66.117.122:..
renvoie zéro.Buzz
n%5
Bleu foncé
La section précédente laisse les piles comme
{
décale lan%3
pile principale et*
multiplie les deux modulos.Si l'un des deux modulo est égal à zéro, le produit est égal à zéro, nous passons directement au jaune.
=
échange le haut des piles et_
pousse un zéro pour s'assurer que nous allons tout droit, donnantSinon, si les deux modulos sont non nuls, le produit est non nul et nous virons à droite en vert.
=
échange les sommets des piles, donnantaprès quoi nous utilisons
:
pour dupliquern
, tourner à droite, puis utiliser!
pour sortirn
.Violet
À ce stade, la pile principale contient un ou deux éléments, selon le chemin emprunté. Nous devons supprimer le zéro du chemin jaune et pour ce faire, nous utilisons une
+
méthode qui fonctionnen + 0
dans un certain ordre pour les deux cas. Enfin,\
sort une nouvelle ligne et nous sommes de retour au début.Chaque itération pousse un extra
(n%5)*(n%3)
sur la pile auxiliaire, mais sinon on refait la même chose.la source
Perl 5, 49 octets
46 octets script + 3 octets
-E"..."
Utiliser
say
(ce qui nécessite-E"..."
) peut réduire ce nombre à 46 octets carsay
inclut automatiquement une nouvelle ligne (Merci @Dennis !):Perl 5, 50 octets
la source
say
.-E"..."
8 octets? Espace + Dash + Option + Argument (+ Citation).-E
c'est 0 octet, mais puisque la réponse de primo a été marquée en excluant les guillemets, j'ai choisi de le rendre juste et d'inclure les guillemets dans le mien et +1 pour-E
. La raison pour laquelle il est accepté comme étant gratuit est que Perl est généralement exécuté viaperl -e
etperl -E
n'est plus d'octets (je pensais-M5.010
ou pouvaisuse 5.010
être libre aussi, mais peut-être pas relire le méta-post). Lorsque vous ajoutez-p
ou que-n
ceci est compté comme +1, comme vous le feriez avecperl -pe
. J'espère que ça t'as aidé! Référence méta: meta.codegolf.stackexchange.com/a/7539Ruby, 50 octets
Nécessite la version 1.8, qui semble être populaire parmi les golfeurs:
Dans Ruby moderne, vous remplacez
?d
par100
une solution de 51 octets.Cela semble être le record du monde.
la source
?d
est juste100
. LaFizzBuzz
chaîne contient une nouvelle ligne, elle est valide en Ruby.string[i, s]
est une tranche, commençant au caractèrei
(indexé à 0), passe auxs
caractères, ignorant les index pointant en dehors de la chaîne. Si l'argument à aputs
déjà une nouvelle ligne, il est coupé. La formule devrait être simple à lire? Il fait tout le travail ici. Je ne l'aurais pas trouvé sans l'aide de certains golfeurs vraiment professionnels.?e.times
place.[i=n**4%-15,i+13]
partie s'il vous plaît? Je n'arrive pas à comprendre ce qui se passei==-14
la tranche est hors limites, nous obtenonsnil
. Sii==-9
nous découpons desi+13==4
caractères à partir du 9ème caractère à partir de la fin, alors'Fizz'
. Sii==-5
nous coupons 8 caractères à partir du 5ème caractère à partir de la fin, alors'Buzz\n'
. (Nous essayons de couper 8 mais il n'y en a que 5, donc nous en avons 5.) Et cetera.Java, 130 octets
Ceci concerne les versions récentes de Java (7+). Chez les plus âgés, vous pouvez en dépenser un peu plus
enum
, mais je ne pense pas que la logique soit plus courte que celle-ci (86 à l'intérieurmain
).la source
class F{public static
->interface F{static
en java 8enum F{;public...
pour ne pas économiser d’octets.Pyth, 30
Essayez-le ici
Explication:
la source
Retina ,
31713913413270 70636055 octetsEssayez-le en ligne!
Explication
Le
.
est l'indicateur silencieux global qui désactive la sortie implicite à la fin du programme.100{
encapsule le reste du programme dans une boucle qui est exécutée pour 100 itérations. Enfin, la scène elle-même insère simplement un_
au début de la chaîne, ce qui incrémente effectivement un compteur de boucle unaire.Plus de configuration.
*\(
encapsule le reste du programme dans un groupe, imprime son résultat avec un saut de ligne final, mais place également le groupe entier dans un cycle d'essai, ce qui signifie que son résultat sera ignoré après l'impression, de sorte que notre compteur de boucle ne soit pas réellement modifié .a
est un modificateur de regex personnalisé qui ancre le regex à la chaîne entière (ce qui enregistre un octet sur using^
et$
explicitement).L'étape atomique elle-même prend en charge
Fizz
. La divisibilité par3
peut facilement être vérifiée unaire: il suffit de vérifier si le nombre peut être écrit comme une répétition de___
. Si c'est le cas, nous ajoutonsFi;
la chaîne. Le point-virgule est tel qu'il reste une limite de mot devant le nombre pour l'étape suivante. Si nous avons tourné la ligne dansFizz___...
la position entrez
et_
ne serait pas considérée comme une limite, car regex considère les lettres et les soulignés comme des mots. Cependant, le point-virgule nous permet également de supprimer lazz
duplication deFizz
etBuzz
.Nous faisons exactement la même chose pour la divisibilité par
5
etBu;
, bien que nous n’ayons pas besoin de garder le_
s à peu près à la même heure. Donc, nous aurions un résultat commeCela rend très facile de supprimer les traits de soulignement uniquement dans les lignes qui contiennent
Fizz
, tout en remplissant lezz
s:Autrement dit, nous transformons chaque point-virgule en
zz
mais nous consommons également tout le_
s juste après. À ce stade, nous avons terminé avec FizzBuzz en unaire. Mais le défi veut une sortie décimale.&
indique une condition: cette étape n'est exécutée que si la chaîne contient un trait de soulignement. Par conséquent,Fizz
,Buzz
etFizzBuzz
itérations sont laissées intactes. Dans toutes les autres itérations (c'est-à-dire celles qui ne sont ni divisibles par 3 ni par 5), nous comptons simplement le nombre de caractères, en convertissant le résultat en décimal.la source
gs2 , 1
Une citation de Mauris, le créateur de gs2:
Mise à jour : Ajout d'une réponse de 27 octets qui n'est pas utilisée
f
.la source
Perl 5, 45 octets
Requiert l'
-E
option, comptabilisée comme un. Cela doit être exécuté à partir de la ligne de commande, à savoir:Citations autour de la commande ne sont pas nécessaires, si l' on évite d' utiliser des espaces, ou tout autre caractère qui peuvent agir comme séparateurs de ligne de commande (
|
,<
,>
,&
, etc.).Perl 5, 48 octets
Si les options de ligne de commande sont comptées pour un,
-l
sauvegardez un octet (en le remplaçant$/
). Par classique Perlgolf Règles cependant, ce compterait 3: un pour le-
, un pour lel
, et un pour l'espace nécessaire.la source
say
, avec le-E
commutateur, la distance de modification 1 à-e
, elle doit donc compter pour 1 octet.say
, je suppose que cela-E
peut être utilisé à la place de-e
ce qui vous ramènerait à 44 plutôt qu'à 46. Je ne pense pas que ce soit juste que je marque différemment pour vous, quel est le mécanisme de notation préféré? J'utilise généralementprint
pour éviter cela! Plus proche d'un consensus serait- ce ?say
, si votre code peut être écrit sur une seule ligne en évitant les séparateurs de système d’exploitation, marquez 1-E
. Si vous devez utiliser des guillemets, par exemple-E"$a||$b"
, marquer 3. Si vous ne pouvez pas le faire sur une ligne, marquez 5 pour-M5.01
. Mais à ce stade, vous feriez probablement mieux d'utiliser-l
. Je ne suis pas d'accord pour dire qu'il devrait être gratuit par défaut, pour deux raisons: 1) l'amélioration est triviale et sans intérêt, et 2) il n'y a pas de version de l'interpréteur pour laquelle il est activé par défaut.la cire d'abeille ,
1048981 octetsUn emballage plus dense permettait de couper 8 octets supplémentaires.
La solution la plus courte (81 octets), le même déroulement du programme, une compression différente.
Changer le concept m'a permis de réduire le code de 15 octets. Je voulais supprimer le test du double mod 5 dans la solution et j'ai donc implémenté un drapeau.
Brève explication:
si
n%3=0
Fizz est imprimé et que le drapeau est défini. Le drapeau est réalisé simplement en poussant la valeur top lstack sur le gstack (instructionf
).Si
n%5=0
, alorsn%3=0
(cas FizzBuzz) oun%3>0
(cas Buzz). Dans les deux cas, Buzz est imprimé et l'indicateur réinitialisé en vidant la pile jusqu'à ce qu'elle soit vide (instruction?
).Maintenant les cas intéressants:
Si
n%5>0
, alors nous avons eun%3=0
(impression du boîtier Fizz, n ne doit pas être imprimé) oun%3>0
(Fizz n'a pas été imprimé, donc n doit être imprimé). Il est temps de vérifier le drapeau. Ceci est réalisé en poussant la longueur de gstack au dessus de gstack (instructionA
). Sin%3 was 0
alors la longueur de gstack est> 0. Sin%3 was >0
, la longueur de gstack est 0. Un simple saut conditionnel permet de s'assurer que n n'est imprimé que si la longueur de gstack était 0.Encore une fois, après avoir imprimé n, Fizz et / ou Buzz et la nouvelle ligne, le gstack apparaît deux fois pour s’assurer qu’il est vide. gstack est vide
[]
, ce qui conduit à une[0]
instruction aprèsA
(enfoncez la longueur de gstack sur gstack), ou il contient un zéro ([0]
, le résultat de n% 3), ce qui conduit à[0 1]
, puisque [0] a la longueur 1. une pile vide ne change pas la pile, il est donc prudent de faire double apparition.Si vous regardez de plus près, vous pouvez voir que, en principe, je me suis couché
dans
ce qui permet de se débarrasser de tout l'espace gaspillé entre
A
et<
à la fin de la rangée suivante dans l'ancienne solution ci-dessous:Nouveau concept de solution (89 octets) incluant une explication animée:
Disposition hexagonale:
Animation des 326 premiers ticks à 2 ips, avec des piles locales et globales, et sortie vers STDOUT.
À titre de comparaison, vous trouverez ci-dessous les recouvrements de chemin de la solution plus ancienne et plus complexe. Peut-être que c'est aussi la solution la plus jolie, d'un point de vue visuel;)
la source
> <> ,
68666564 octetsLa seule astuce consiste à multiplier les restes pour pouvoir imprimer des chiffres. De cette façon, si l’un d’eux est 0, nous n’imprimerons pas le nombre.
Vous pouvez l'essayer ici .
Enregistré un octet grâce à Sp3000 et un autre grâce à randomra. Merci beaucoup!
la source
o
fin de la deuxième ligne vers l'espace vide au début de la ligne, je crois.foooo Buzz
?gs2 ,
2827 (sansf
)Hex:
Explication:
L'incorporation de 3 et 5 dans la constante chaîne ne fonctionne pas car
\x05
termine les littéraux de chaîne.Remarque: Ce problème peut être résolu en 1 octet avec gs2 à l'aide de la fonction intégrée
f
.la source
C, 85 octets
-2 grâce à squeamish.
la source
gcc
reconnaît pas la nouvelle ligne dans la chaîne en tant que \ n. Cela me donne une erreur de compilation. Dois-je transmettre un paramètre au compilateur? BTW, vous avez manqué le<=
dans votre message (j'ai compté 88 octets avec <= ... donc im en supposant qu'il manque).main(i)
, essayez donc plutôt que d' essayeri;main()
. Ensuite, vous pouvez vous en débarrasseri--
au début de lafor()
boucle. Vous n'avez pas besoin du saut de ligne non plus. Cela devrait ramener le nombre d'octets à 85.(i%3&&i%5)*i
pari%3*i%5?i:0
Je vais au litCJam, 35 octets
Essayez-le en ligne dans l' interprète CJam .
Comment ça fonctionne
la source
100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
MUMPS,
5654 octetsC'est quoi ce
w:$X<3 i
truc, tu demandes?$X
est une variable magique ("intrinsèque") qui stocke la position horizontale du curseur de sortie (sous forme de nombre de caractères à partir du bord gauche du terminal).w
est la forme abrégée de laWRITE
commande. La syntaxecommand:condition args
est postconditive - "sicondition
, alors faiscommand args
".Nous vérifions donc si le curseur de sortie a été avancé de plus de deux caractères (ce qui voudrait dire qu'au moins un de
"Fizz"
ou"Buzz"
a été écrit sur le terminal), et sinon, écriti
sur le terminal. La$X
variable - et donc cette inséparabilité profonde du terminal - est une fonctionnalité de premier ordre de MUMPS. Beurk.la source
Gelée ,
2420 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
brainfuck, 206 octets
Formaté:
Essayez-le en ligne
La disposition de la mémoire est
où
f
cycles par 3,b
cycles par 5,d1
est un chiffre, un chiffre end2
dizaines,s
est un indicateur pour imprimer des chiffres en dizaines, desd
cycles par 10,c
est un espace de copie pourd
,t
est un espace de travail contenant 0 ou des données indésirables ou un indicateur pour ne pas -divisible-by-3, eta
détermine la fin du programme en décalant le pointeur après que Buzz ait été imprimé 20 fois.la source
C #,
128126125124 octets89 octets sans le code standard autour.
Fait avec l'utilisation de la mise en forme conditionnelle de C # .
Avec deux séparateurs de section
;
, Fizz ou Buzz sont imprimés si la valeur de leur condition est zéro.Sauvegardé un total de 4 octets grâce à @RubberDuck, @Timwi et @Riokmij.
la source
Write
et d'ajouter la nouvelle ligne directement à la chaîne, n'est-ce pas?i%3*i%5>0?i:0
au lieu dei%3*i%5==0?0:i
.for
déclaration en utilisantfor(var i=0;i++<100;)
$"{(i%3*i%5>0?i:0):#}...\n"
)class A{static void Main(){for(var i=0;i<100;)System.Console.Write($"{(++i%3*i%5<1?0:i):#}{i%3:;;Fizz}{i%5:;;Buzz}\n");}}
Clojure,
11310610110091 octetsMon premier golf!
Ungolfed:
la source
println
même manière que dans la solution Java , par exemple.(doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
(if t"Fizz""")
on peut simplifier(if t"Fizz")
. :)brainfuck ,
411 350 277258 octetsModifications:
-61 octets en stockant les valeurs de "Fizz Buzz" en tant que
"BuziF""BuziG" et en rétablissant la section d'impression de numéro.-71 octets en refaisant la section d'impression du numéro modulo, en divisant le compteur de boucles et le compteur de nombres et en réutilisant la cellule de nouvelle ligne comme valeur mod, entre autres
-19 octets en réalisant qu'il n'y a pas de 0 dans les numéros FizzBuzz. Explication également ajoutée
+[-[>+<<]>-]>--[>+>++>++>++++++>+>>>++++++[<<<]>-]<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>>[>+<<<-[<]<[>+++>+<<-.+<.<..[<]<]>>-[<<]>[.>.>..>>>>+[<]+++++<]>[>]>>[[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]>,>[>]<[>-[<+>-----]<---.,<]++++++++++>]<.<<<<,>-]
Essayez-le en ligne!
Au lieu de vérifier si le nombre lui-même était divisible par 5 ou 3, j’avais deux compteurs gardant la trace du modulo du nombre, les décrémentant pour chaque nombre et imprimant le mot correspondant quand ils atteignaient 0.
Comment ça fonctionne:
la source
PowerShell,
78686154 octetsEdit: 10 octets sauvegardés grâce à feersum
Edit2: J'ai réalisé qu'avec le truc de feersum, je n'ai plus besoin de formuler $ t sous forme de chaîne de blocs de code
Edit3: Sauvegardé de 7 octets supplémentaires grâce à Danko Durbić
Semblable en esprit à la réponse du code Rosetta en stock , mais assez golfé.
Explication
1..100|%{...}
Créez une collection de 1 à 100, puis pour chaque objet de cette collection, faites(...,$_)
créer une nouvelle collection de deux éléments: 0)$t=...
définir la variable$t
égale à une chaîne; 1)$_
notre numéro actuel de la boucle"Fizz"*!($_%3)
prenez notre numéro actuel, modifiez-le par 3, puis PAS le résultat. Multipliez "Fizz" par cela et ajoutez-le à la chaîne (et similaire pour 5). PowerShell considère tout nombre non nul comme un$TRUE
, et le NON d'un nombre différent de zéro est donc 0, ce qui signifie que si notre numéro actuel est un multiple de 3, "Fizz" sera ajouté à la chaîne.[!$t]
index dans la collection que nous venons de créer, en fonction de la valeur de la chaîne$t
- non vide, imprimez-le, sinon affichez notre numéro actuelAlternativement, aussi 54 octets
Merci à TesselatingHeckler
De concept similaire, il utilise l'
-replace
opérateur inline et une expression régulière pour échanger une chaîne vide^$
avec notre numéro actuel. Si la chaîne n'est pas vide, elle n'est pas permutée.Alternativement, aussi 54 octets
C'est la même structure de boucle que ci-dessus, mais à l'intérieur, elle trie la paire (n, chaîne) et repose sur le fait qu'une chaîne vide est triée avant un nombre, alors qu'une chaîne FizzBuzz trie après un nombre. Ensuite, il indexe le résultat du deuxième tri.
la source
||
opérateur, comme en C #, nous pourrions probablement passer à 43 octets avec quelque chose de similaire à1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}
... douteux, car|
c’est un opérateur spécial aussi important dans PowerShell, mais je peux rêver ...1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}
de 54?if($t){$t}else{$_}
par quelque chose comme($t,$_)[!$t]
1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}
ce qui est aussi 54 comme la suggestion de @ TessellatingHecklerJavaScript, 62 octets
Je pense que c'est la solution Javascript la plus courte actuellement.
la source
console.log
; c'est beaucoup moins ennuyeux que d'avoir à appuyer sur "OK" sur 100 boîtes de dialogue qui s'affichent à la suite. Pourriez-vous s'il vous plaît changer cela? Ce ne sera que 62 octets, trois encore mieux que le mien.C, 74 octets
L'
0
argument de auprintf
lieu de""
est louche, mais semble fonctionner sur la plupart des plateformes sur lesquelles je l'essaie.puts
segfaults quand vous essayez la même chose, cependant. Sans cela, vous obtenez 75 octets.Il existe des solutions de 73 octets qui fonctionnent sur le golf anarchique , et j'en ai trouvé une qui fouille aux bons endroits sur Internet, mais qui repose sur un comportement spécifique à la plate-forme. (Comme vous l'avez peut-être deviné, c'est quelque chose de la forme
puts("Buzz"±...)
.)la source
./fizzbuzz $(seq 40)
: PScratch,
203185 octetsOctets comptés à partir de la représentation textuelle au golf , par ce méta post . Scratch n'est pas très efficace en termes d'espace.
say
Scratch est la chose la plus proche d’une stdout: le sprite affiche une bulle contenant ce qu’elle dit. En pratique, unwait n secs
bloc serait nécessaire pour lire cette sortie, mais pour les besoins de ce défi, ce code remplit les conditions requises.la source
y =
(dans les deux occurrences)set y to ...
manque une valeurR,
8883777170 octetsJe suis sûr que cela peut être amélioré... et c'était avec le crédit de @flodel. Quelques octets supplémentaires ont été sauvés grâce à une suggestion de @njnnja et à un autre de @ J.Doela source
x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
write
plutôt quecat
siwrite
appel peut prendre un 1 au lieu d'une chaîne vide. Ilx=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)
s'agit donc d' un golf trivial sur 1 octet pour 70 octets.Haskell, 84 octets
Se rapprocher des 81 octets de henkma , mais pas encore tout à fait là.
d = drop.(*4).mod n
est la clé ici:d 3 "Fizz"
estdrop (n`mod`3 * 4) "Fizz"
. C'est"Fizz"
quandn `mod` 3
est 0 et""
sinon.la source
(%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]]
.n
n'est pas dans la portée. Hm.main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
PHP, 54 octets
Valable à partir de la version 5.5. Le
õ
caractère 245 est un peu inversé\n
.Je suppose que les paramètres par défaut de l'interpréteur sont les mêmes, sans aucune ini. Si vous avez des doutes, vous pouvez désactiver votre ini local avec
-n
asphp -n fizzbuzz.php
.Une version qui fonctionnera sans erreur avec absolument n'importe quel fichier de configuration est de 62 octets :
la source
short_open_tag
est désactivé, activéE_NOTICE
. Aucun de ceux-ci sont les paramètres par défaut.80386 code machine + DOS, 75 octets
Hexdump du code:
Code source (syntaxe TASM):
Ce code compte de 1 à 100 en
ax
créant le message de sortie de la fin au début. La fin du message (nouvelle ligne et le$
caractère utilisé par DOS comme indicateur de fin de message) apparaît au début du code:C'est exécuté comme une instruction inoffensive (
or ax, 240ah
). Je pourrais le mettre dans un endroit plus conventionnel, comme après la fin du code, mais le faire à l'adresse 0x100 présente un avantage.Le code utilise également 2 compteurs supplémentaires:
dl
dh
Lorsqu'un compteur atteint 0, il pousse la chaîne
Fizz
ouBuzz
jusqu'à la fin du message de sortie. Si cela se produit,bx
sera diminué etbh
sera égal à zéro. Ceci est utilisé comme condition pour la sortie du nombre sous forme décimale.Remarque: j'utilise des données 32 bits ici. Cela ne fonctionnera pas sur un ordinateur antérieur à 386.
la source
mov [mem], 'Fizz'
pour stockerFizz
dans la mémoire, dans cet ordre, desdb
directives correspondantes . Voir mon casse-tête "efficace" YASM FizzBuzz par exemple .std
, puisstosb
/stosd
? Vous devrez remplacertest bh,bh
parcmp di, 100h
ou quelque chose. Au lieu de sauvegarder / restaurer le compteur en AL, vous pouvez le conserver en BL et simplement claquer eax quand vous le souhaitez. Par exemple ,sub bx, 4
/mov dword ptr [bx], 'zzuB'
est de 3 + 7 octets, non?mov eax, 'zzuB' / stosd
est 6 + 2 octets (préfixe de taille d'opérande sur les deux). Ce serait bien si la réponse incluait le désassemblage afin que la taille des instructions soit visible.stosd
mais je n'ai pas réussi à réduire moi-même mon score. Depuisstosd
décrémentsDI
après, vous ne perdez pas lesub di, 4
et alors vous avezDI
4 octets à la fin. J'ai pu-6 bytes
utiliser quelques autres modifications mineures que j'ai publiées en tant que réponse distincte (uniquement parce que je ne pouvais pas intégrer tous les commentaires). Gloire!dc,
6462 octetsUngolfed:
la source