Fizzbuzz dans n'importe quelle base

10

Défi

Contribution:

Un entier compris entre 2 et 62 (inclus).b

Production:

Comptez de à l'équivalent de dans la base , en utilisant toute représentation raisonnable pour les chiffres.1500010b

Toutefois:

  • Si le nombre est divisible par (arrondi vers le bas, par exemple, la base 7 serait 7/2 = 3,5, 3,5 + 1 = 4,5, arrondi à 4 ), puis affichez 'Fizz' au lieu du nombre .b÷2+1

  • Si le nombre est divisible par (arrondi vers le haut, par exemple 11/3 = 3,666, 3,666 + 3 = 6,666, arrondi à 7 ), alors affichez 'Buzz'.b÷3+3

  • Comme vous pouvez probablement le deviner, si votre nombre est divisible par les deux, affichez «Fizzbuzz».

Exemples

Utilisation de [0-9] , [AZ] et [az] comme chiffres

(Je n'ai inclus que les 10 premières valeurs pour garder les exemples courts - normalement, il y avait 4990 éléments de plus dans chaque séquence)

Entrée: 10 (donc 'Fizz' = 6 et 'Buzz' = 7)

Sortie: 1, 2, 3, 4, 5, Fizz, Buzz, 8, 9, 10

Entrée: 2 (donc 'Fizz' = 2 et 'Buzz' = 4)

Sortie: 1, Fizz, 11, Fizzbuzz, 101, Fizz, 111, Fizzbuzz, 1001, Fizz

(J'ai inclus les 50 premières valeurs des éléments suivants pour mieux montrer comment ils fonctionnent)

Entrée: 55 (donc 'Fizz' = = et 'Buzz' = = )2810s552210m55

Sortie: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, Buzz, n, o, p, q, r, Fizz, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N

Règles

  • Les failles standard sont interdites
  • C'est Code Golf, donc la réponse la plus courte en octets l'emporte
  • L'entrée et la sortie peuvent se faire via la console ou des arguments / retours de fonction
  • Les espaces blancs en tête / arrière sont parfaits, tout comme les lignes vides
  • Les espaces entre 'Fizz' et 'Buzz' sont interdits
  • Toute variante de capitalisation de "Fizz" / "Buzz" / "Fizzbuzz" est très bien.
  • Les sorties doivent être séparées par des retours à la ligne.
  • Si vous retournez un tableau de 10 chiffres de base au lieu de les représenter avec des caractères, alors ils doivent être dans le bon ordre!
Geza Kerecsenyi
la source
2
Ça ne me dérange pas vraiment. Si vous voulez utiliser des emoji au lieu de chiffres, cela ne me dérange toujours pas. C'est la base qui compte, pas la représentation.
Geza Kerecsenyi
2
Ok, clarifié maintenant.
Geza Kerecsenyi du
5
Techniquement, dans la base 36, le mot buzzapparaît par lui-même à index 553391, fizzat 724463et fizzbuzzat 1216820199599. Malheureusement, aucun d'entre eux n'est divisible par le nombre de cette base
Jo King
3
Pourquoi la base 10 n'est-elle pas le FizzBuzz d'origine? : Je ne pouvais pas penser à un algorithme qui à la fois générerait les nombres originaux en base 10 et se transfèrerait bien à d'autres bases. Et je ne voulais pas ajouter un cas spécial de refus, car cela compliquerait simplement la question, à mon avis.
Geza Kerecsenyi
3
Pour vos futurs défis, pensez à autoriser des E / S plus flexibles. Les formats d'E / S encombrants sont le sujet le plus voté dans les choses à éviter lors de l'écriture de défis .
Arnauld

Réponses:

3

Gelée ,  42 38 34 33 29  32 octets

+3 pour adhérer à des règles de formatage strictes

5ȷɓ;8Ä:2,3‘ḍȧ"“Ƈד=%»ḟ0Fȯb@K¥ð€Y

Un programme complet qui imprime 5000 lignes de texte, chaque ligne contenant une série de nombres entiers (les chiffres) ou l' un des fizz, buzzou fizzbuzz(bien au - delà de la base fonctionne 62).

Essayez-le en ligne!

Comment?

Notez que ... et
b÷2+1 =b÷2+1b ÷ 3 + 3 = b ÷ 3 + 2 + 1 = ( b + 6 ) ÷ 3 + 1 = ( b + 8 ) ÷ 3 + 1

b÷3+3=b÷3+2+1=(b+6)÷3+1=(b+8)÷3+1

mise à jour ...

5ȷɓ;8Ä:2,3‘ḍȧ"“Ƈד=%»ḟ0Fȯb@ð€ - Link: integer, b
5ȷ                            - 5*10³ = 5000
  ɓ                        ð€ - for €ach n in [1,2,...,5000] get this f(b,n):
    8                         -   eight
   ;                          -   concatenate      -> [b,8]
     Ä                        -   cumulative sums  -> [b,b+8]
       2,3                    -   pair literal        [2,3]
      :                       -   integer division -> [b//2, (b+8)//3]
          ‘                   -   increment        -> [b//2+1, (b+8)//3+1]
           ḍ                  -   divides n?       -> [n is fizzy?, n is buzzy?]
              “Ƈד=%»         -   list of dictionary strings = ['fizz','buzz']
             "                -   zip with:
            ȧ                 -     logical AND    -> [0,0], ['fizz',0], [0,'buzz'],
                              -                       or ['fizz','buzz']
                      0       -   zero
                     ḟ        -   filter discard   -> [], ['fizz'], ['buzz'],
                              -                       or ['fizz','buzz']
                       F      -   flatten          -> [], ['fizz'], ['buzz'],
                              -                       or ['fizzbuzz']
                          @   -   using swapped arguments:
                         b    -     (n) to a list of digits in base (b)  (say, [nb])
                        ȯ     -   logical OR       -> [nb], ['fizz'], ['buzz'],
                              -                       or ['fizzbuzz']
Jonathan Allan
la source
Le défi stipule que la sortie doit être sur des lignes séparées
Incarnation de l'ignorance
Vrai. Bien que je sois d'accord avec la représentation (bien qu'elle soit limite), la sortie d'un tableau n'est pas la même chose que de jouer au jeu. Cependant, si vous affichez le tableau de chiffres sur chaque ligne, je l'accepterai.
Geza Kerecsenyi
3
[0,n1]
Une implémentation de terser pourrait simplement prendre une liste des chiffres souhaités, au lieu de la base numérique, comme ceci .
Jonathan Allan
3

Fusain , 40 octets

NθE…·¹×⁵φ∨⁺⎇﹪ι⊕÷θ²ωFizz⎇﹪ι÷⁺¹¹θ³ωBuzz⍘ιθ

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

Nθ                                      Input `b` into variable `q`
   ¹                                    Literal 1
 …·                                     Inclusive range to
      φ                                 Predefined variable 1000
    ×                                   Multiplied by
     ⁵                                  Literal 5
E                                       Map to
           ι                            Current value
          ﹪                             Modulo
              θ                         Input value
             ÷                          Floor divide
               ²                        Literal 2
            ⊕                           Incremented
         ⎇                              If nonzero
                ω                       Then predefined empty string
                 Fizz                   Otherwise literal `Fizz`
        ⁺                               Concatenated with
                       ι                Current value
                      ﹪                 Modulo
                            θ           Input value
                         ⁺              Plus
                          ¹¹            Literal 11
                        ÷               Integer divided by
                             ³          Literal 3
                     ⎇                  If nonzero
                              ω         Then predefined empty string
                               Buzz     Otherwise literal `Buzz`
       ∨                                Logical Or
                                    ι   Current value
                                   ⍘    Converted to base
                                     θ  Input value
                                        Implicitly print each result on its own line
Neil
la source
3

R , 163 131 octets

b=scan();for(d in 1:5e3)cat(list(d%/%b^rev(0:log(d,b))%%b,'fizz','buzz','fizzbuzz')[[1+(!d%%((b+2)%/%2))+2*!d%%((b+11)%/%3)]],'\n')

Essayez-le en ligne!

Merci à @digEmAll pour avoir économisé 23 octets. J'ai ensuite poursuivi les efforts de @ digEmAll pour économiser 9 autres.

Nick Kennedy
la source
140 octets J'ai travaillé dessus sans regarder votre réponse, mais c'est trop similaire pour un autre post;)
digEmAll
@digEmAll merci. J'ai en outre analysé votre réponse pour obtenir 131 octets et vous a attribué un crédit; j'espère que ça va.
Nick Kennedy
absolument ! ;)
digEmAll
BTW, si vous avez des discussions sur le golf à R, demandez sur ce chat
digEmAll
Oups, je ne savais pas qu'il y avait déjà une réponse R, ma réponse pourrait être utile pour un peu plus de golf?
ASCII uniquement
3

JavaScript (ES6),  117  116 octets

19201921201,1

b=>(g=n=>n>1?g(n-1)+`
`+((s=n%(b+2>>1)?'':'Fizz',n%(b/3+3.9|0)?s:s+'Buzz')||(g=n=>n?[...g(n/b|0),n%b]:s)(n)):1)(5e3)

Essayez-le en ligne!

(limité à 100 pour que la sortie de TIO ne explose pas)

Arnauld
la source
Y a-t-il une chance que vous puissiez expliquer quoi |0et quoi (5e3)?
njras
0nMath.floor(n)0n<2315e35000g
2

Python 2 , 116 octets

b=input()
i=0
exec"a=i=i+1;d=[]\nwhile a:d=[a%b]+d;a/=b\nprint'Fizz'*(i%(b/2+1)<1)+'Buzz'*(i%(~-b/3+4)<1)or d;"*5000

Essayez-le en ligne!

Ou avec 0-9a-zA-Zsortie:

Python 2 , 143 octets

b=input()
i=0
exec"a=i=i+1;d=''\nwhile a:d=chr(a%b+48+(a%b>9)*39-a%b/36*58)+d;a/=b\nprint'Fizz'*(i%(b/2+1)<1)+'Buzz'*(i%(~-b/3+4)<1)or d;"*5000

Essayez-le en ligne!

Lynn
la source
1

05AB1E , 39 37 36 octets

8+‚U5₄*LεX23S÷>Ö”FizzÒÖ”#×JDõQiyIв]»

-2 octets en créant un portage de la réponse Jelly de @JonathanAllan .

Essayez-le en ligne ou vérifiez tous les cas de test (mais en tant que sortie de liste et avec les 100 premiers au lieu de 5000).

Explication:

8+               # Add 8 to the (implicit) input
                # Pair it with the (implicit) input
   U             # Pop and store it in variable `X`
5₄*L             # Create a list in the range [1,5000]
    ε            # Map each value `y` to:
     X23S÷       #  Integer-divide the input by 2, and the input+8 by 3
          >      #  Increase both by 1
           Ö     #  Check for both if they divide value `y` evenly (1 if truthy; 0 if falsey)
     FizzÒÖ”    #  Push dictionary string "Fizz Buzz"
             #   #  Split on spaces
              ×  #  Repeat the strings the result amount of times (0 or 1)
               J #  Join both strings together to a single string
     DõQi        #  If this string is empty:
         yIв     #   Push value `y` in Base-input (as list) instead
    ]            # Close the if-statement and map
     »           # Join the list by new-lines (and inner lists by spaces implicitly)
                 # (and output the result implicitly)

Voir cette astuce de la mine de 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi ”FizzÒÖ”est "Fizz Buzz".

Kevin Cruijssen
la source
J'ai une version en boucle à 33 octets au cas où vous voudriez essayer d'optimiser cela. Encore un octet de plus que Jelly cependant :(
Emigna
@Emigna L'avez-vous déjà posté? Ou c'est assez similaire à ma réponse et c'est un golf? PS: Jelly a quelques raccourcis intégrés avec par exemple la [input, input+8]partie et la partie filtre par la suite (ce que je fais maintenant DõQi yIв, mais j'ai l'impression qu'il peut être joué un peu plus ..)
Kevin Cruijssen
Levenshtein-distance sage, il est très différent du vôtre (bien que les parties puissent être réécrites pour ressembler davantage au vôtre). Mais j'utilise également l'astuce n + 8 de Jonathan, donc je me suis dit que je vous laisserais essayer de jouer avec le vôtre si vous le souhaitez. Sinon, je le posterai comme réponse séparée.
Emigna
@Emigna Je suis actuellement un peu occupé au travail, donc je n'ai pas vraiment le temps de jouer à cette réponse. Donc, si vous le souhaitez, vous pouvez l'afficher comme votre propre réponse. Vous avez mon vote positif. ;)
Kevin Cruijssen
Malheureusement, j'ai découvert un bogue dans ma version alors maintenant c'est 34. J'ai quelques idées qui pourraient raccourcir la vôtre ou la mienne que j'explorerai plus tard. Battre / attacher Jelly semble difficile maintenant.
Emigna
0

R , 138 octets

function(b,`*`=rep)Map(function(i)"if"((s=paste0("","Fizz"*!i%%(b%/%2+1),"Buzz"*!i%%((b+11)%/%3)))>0,s,i%/%b^((log(i,b)%/%1):0)%%b),1:5e3)

Essayez-le en ligne!

ASCII uniquement
la source
0

C # (Visual C # Interactive Compiler) , 180 171 octets

n=>{for(int i=1,p;i<5001;){p=i;var j=new Stack<int>();for(;p>0;p/=n)j.Push(p%n);var s=i%(n/2+1)<1?"Fizz":"";Print(i++%((n+8)/3+1)<1?s+"Buzz":s==""?string.Join("-",j):s);}}

Sorties comme la réponse d'Arnauld. Merci à digEmAll pour l'idée d'utiliser une pile pour inverser la sortie.

Essayez-le en ligne!

Incarnation de l'ignorance
la source
1
Je vais devoir dire «non» aux chiffres inverses. Bien que ce soit la bonne idée mathématiquement, ce n'est pas le programme Fizzbuzz, disons qu'un employeur le voudrait. Il est regrettable que C # n'ait pas de fonction inverse de tableau.
Geza Kerecsenyi
0

05AB1E , 34 octets

Utilise les connaissances mathématiques de Jonathan qui ceil(n/3+3)=floor((n+8)//3)+1

ŽJćG8+‚2L>÷>NsÖ…™Ázz'ÒÖ‚×JNIв‚õKн,

Essayez-le en ligne!

Explication

ŽJćG                                # for N in [1 ...5001)
    8+‚2L>÷>                        # push [input//2+1, (input+8)//3+1]
            NsÖ                     # check each if N is divisible by it
               …™Ázz                # push "fizz"
                    'ÒÖ             # push "buzz"
                       ‚            # pair
                        ×           # repeat a number of times corresponding to the result of the 
                                    # divisibility test
                         J          # join to string
                          NIв‚      # pair with N converted to base <input>
                              õK    # remove empty string
                                н,  # print head of the remaining list
Emigna
la source