Fizzbuzz in jeder Basis

10

Herausforderung

Eingang:

Eine ganze Zahl zwischen 2 und 62 (einschließlich).b

Ausgabe:

von bis zum Äquivalent von in Basis , wobei Sie eine angemessene Darstellung für die Ziffern verwenden.1500010b

Jedoch:

  • Wenn die Zahl durch teilbar ist (abgerundet, z. B. wäre Basis 7 7/2 = 3,5, 3,5 + 1 = 4,5, auf 4 gerundet ), geben Sie 'Fizz' anstelle der Zahl aus .b÷2+1

  • Wenn die Zahl durch (aufgerundet, z. B. 11/3 = 3,666, 3,666 + 3 = 6,666, auf 7 gerundet ), geben Sie 'Buzz' aus.b÷3+3

  • Wie Sie wahrscheinlich erraten können, geben Sie 'Fizzbuzz' aus, wenn Ihre Zahl durch beide teilbar ist.

Beispiele

Verwenden Sie [0-9] , [AZ] und [az] als Ziffern

(Ich habe nur die ersten 10 Werte angegeben, um die Beispiele kurz zu halten - normalerweise gibt es 4990 weitere Elemente in jeder Sequenz)

Eingabe: 10 (also 'Fizz' = 6 und 'Buzz' = 7)

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

Eingabe: 2 (also 'Fizz' = 2 und 'Buzz' = 4)

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

(Ich habe die ersten 50 Werte der folgenden Werte angegeben, um besser zu zeigen, wie sie funktionieren.)

Eingabe: 55 (also 'Fizz' = = und 'Buzz' = = )2810s552210m55

Ausgabe: 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.

Regeln

  • Standardlücken sind verboten
  • Dies ist Code Golf, also gewinnt die kürzeste Antwort in Bytes
  • Die Eingabe und Ausgabe kann über die Konsole oder über Funktionsargumente / -rückgaben erfolgen
  • Führender / nachfolgender Leerraum ist in Ordnung, ebenso wie leere Zeilen
  • Leerzeichen zwischen 'Fizz' und 'Buzz' sind nicht zulässig
  • Jede Großschreibung von 'Fizz' / 'Buzz' / 'Fizzbuzz' ist in Ordnung.
  • Ausgaben sollten durch Zeilenumbrüche getrennt werden.
  • Wenn Sie ein Array von Basis-10-Ziffern zurückgeben, anstatt sie mit Zeichen darzustellen, müssen sie in der richtigen Reihenfolge sein!
Geza Kerecsenyi
quelle
2
Es macht mir nichts aus. Wenn Sie Emoji anstelle von Ziffern verwenden möchten, macht es mir immer noch nichts aus. Auf die Basis kommt es an, nicht auf die Darstellung.
Geza Kerecsenyi
2
Ok, jetzt geklärt.
Geza Kerecsenyi
5
Technisch gesehen buzzerscheint das Wort in Basis 36 von selbst bei index 553391, fizzat 724463und fizzbuzzat 1216820199599. Leider ist keiner von ihnen durch die Zahlen dieser Basis teilbar
Jo King
3
Warum ist Base 10 nicht das Original von FizzBuzz? : Ich konnte mir keinen Algorithmus vorstellen, der sowohl die ursprünglichen Zahlen in Basis 10 generiert als auch gut auf andere Basen überträgt. Und ich wollte keinen speziellen Fall für Ablehnung hinzufügen, da dies meiner Meinung nach die Frage nur zu kompliziert machen würde.
Geza Kerecsenyi
3
Erwägen Sie für Ihre zukünftigen Herausforderungen, flexiblere E / A zuzulassen. Umständliche E / A-Formate sind das am häufigsten verwendete Thema in Dinge, die beim Schreiben von Herausforderungen vermieden werden sollten .
Arnauld

Antworten:

3

Gelee ,  42 38 34 33 29  32 Bytes

+3, um strenge Formatierungsregeln einzuhalten

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

Ein volles Programm , das druckt 5000 Textzeilen, wobei jede Zeile eine Reihe von ganzen Zahlen (die Ziffern) oder eines enthält fizz, buzzoder fizzbuzz(funktioniert jenseits Basis 62).

Probieren Sie es online aus!

Wie?

Beachten Sie, dass ... und
b÷2+1 =b÷2+1

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

Aktualisierung...

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
quelle
Die Herausforderung besagt, dass die Ausgabe auf separaten Linien erfolgen muss
Verkörperung der Ignoranz
Wahr. Während ich mit der Darstellung einverstanden bin (obwohl sie grenzwertig ist), ist die Ausgabe eines Arrays nicht dasselbe wie das Spielen des Spiels. Wenn Sie jedoch das Ziffernfeld in jeder Zeile ausgeben, werde ich es akzeptieren.
Geza Kerecsenyi
3
[0,n1]
Eine Terser-Implementierung könnte einfach eine Liste der gewünschten Ziffern anstelle der numerischen Basis wie diese verwenden .
Jonathan Allan
3

Holzkohle , 40 Bytes

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:

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
quelle
3

R , 163 131 Bytes

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')

Probieren Sie es online aus!

Vielen Dank an @digEmAll für das Speichern von 23 Bytes. Ich habe dann @ digEmAlls Bemühungen, weitere 9 zu retten, weiter golfen lassen.

Nick Kennedy
quelle
140 Byte Ich habe daran gearbeitet, ohne auf Ihre Antwort zu schauen, aber es ist zu ähnlich für einen anderen Beitrag;)
digEmAll
@digEmAll danke. Ich habe Ihre Antwort weiter golfen, um 131 Bytes zu erhalten, und Ihnen Kredit gegeben; hoffe das ist ok
Nick Kennedy
absolut ! ;)
digEmAll
Übrigens, wenn Sie eine Diskussion über das Golfen in R haben, fragen Sie in diesem Chat
digEmAll
Hoppla, haben Sie nicht bemerkt, dass es bereits eine R-Antwort gibt? Meine Antwort könnte für ein bisschen mehr Golf hilfreich sein.
Nur ASCII-
3

JavaScript (ES6),  117  116 Byte

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)

Probieren Sie es online aus!

(auf 100 begrenzt, damit der TIO-Ausgang nicht explodiert)

Arnauld
quelle
Gibt es eine Chance, dass Sie erklären können, was |0und was (5e3)?
Njras
0nMath.floor(n)0n<2315e35000g
2

Python 2 , 116 Bytes

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

Probieren Sie es online aus!

Oder mit 0-9a-zA-ZAusgabe:

Python 2 , 143 Bytes

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

Probieren Sie es online aus!

Lynn
quelle
1

05AB1E , 39 37 36 Bytes

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

-2 Bytes durch Erstellen eines Ports mit @ JonathanAllans Jelly-Antwort .

Probieren Sie es online aus oder überprüfen Sie alle Testfälle (jedoch als Listenausgabe und mit den ersten 100 statt 5000).

Erläuterung:

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)

Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum ”FizzÒÖ”ist "Fizz Buzz".

Kevin Cruijssen
quelle
Ich habe eine Loop-Version mit 33 Bytes, falls Sie versuchen möchten, dies zu optimieren. Immer noch ein Byte länger als Jelly :(
Emigna
@ Emigna Hast du es schon gepostet? Oder ist es meiner Antwort ziemlich ähnlich und es ist als Golf gedacht? PS: Jelly hat ein paar Abkürzungen mit zum Beispiel dem [input, input+8]Teil und dem Filterteil danach (was ich jetzt mache DõQi yIв, aber ich habe das Gefühl, dass es noch mehr Golf gespielt werden kann ..)
Kevin Cruijssen
Levenshtein-Abstand weise ist es sehr verschieden von Ihrem (obwohl Teile umgeschrieben werden können, um mehr wie Ihr zu sein). Aber ich benutze auch Jonathans n + 8-Trick, also dachte ich mir, ich würde dich versuchen lassen, deinen zu spielen, wenn du willst. Ansonsten werde ich es als separate Antwort posten.
Emigna
@Emigna Ich bin momentan ein bisschen beschäftigt bei der Arbeit, also habe ich nicht wirklich Zeit, diese Antwort zu spielen. Wenn Sie möchten, können Sie es als Ihre eigene Antwort veröffentlichen. Du hast meine Gegenstimme. ;)
Kevin Cruijssen
Leider habe ich in meiner Version einen Fehler entdeckt, jetzt ist es 34. Ich habe einige Ideen, die Ihre oder meine verkürzen könnten, die ich später untersuchen werde. Jelly zu schlagen / zu binden scheint jetzt allerdings hart zu sein.
Emigna
0

R 138 Bytes

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)

Probieren Sie es online aus!

Nur ASCII
quelle
0

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

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);}}

Ausgaben wie Arnauld's Antwort. Vielen Dank an digEmAll für die Idee, einen Stack zum Umkehren der Ausgabe zu verwenden.

Probieren Sie es online aus!

Verkörperung der Unwissenheit
quelle
1
Ich muss die umgekehrten Ziffern ablehnen. Mathematisch gesehen ist es zwar die richtige Idee, aber nicht das Fizzbuzz-Programm, sagen die Arbeitgeber. Es ist bedauerlich, dass C # keine Array-Umkehrfunktion hat.
Geza Kerecsenyi
0

05AB1E , 34 Bytes

Verwendet Jonathans mathematische Einsicht, dass ceil(n/3+3)=floor((n+8)//3)+1

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

Probieren Sie es online aus!

Erläuterung

Ž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
quelle