あらゆるベースのFizzbuzz


10

チャレンジ

入力:

2〜62の整数。b

出力:

カウントの等価に基部における桁ための任意の合理的な表現を使用して、。1500010b

しかしながら:

  • 数はで割り切れる場合(丸みを帯びた下、例えば、ベース7は、7/2 = 3.5となり、3.5 + = 4.5 1、に丸め4)の代わりに数、出力'フィズ' 。b÷2+1

  • 数はで割り切れる場合(切り上げ、例えば11月3日= 3.666、3.666 + 6.666 = 3、に丸め7)、出力'バズ'。b÷+

  • おそらく推測できると思いますが、数値が両方で割り切れる場合は、「Fizzbuzz」を出力します。

使用[0-9] [AZ][AZ]数字として

(例を短くするために、最初の10個の値のみを含めました。通常、各シーケンスにはさらに4990項目あります)

入力: 10(「フィズ」= 6および「バズ」= 7)

出力: 1、2、3、4、5、フィズ、バズ、8、9、10

入力: 2(「フィズ」= 2および「バズ」= 4)

出力: 1、Fizz、11、Fizzbuzz、101、Fizz、111、Fizzbuzz、1001、Fizz

(それらがどのように機能するかをよりよく示すために、以下の最初の50の値を含めました)

入力: 55( 'Fizz' = =および 'Buzz' = =)2810s552210メートル55

出力:1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、g、h、i、j、k、l、バズ、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

ルール

  • 標準の抜け穴は禁止されています
  • これはコードゴルフなので、バイトでの最短の答えが勝ちます
  • 入力と出力は、コンソールまたは関数の引数/戻りを介して行うことができます
  • 空行と同様に、先頭/末尾の空白は問題ありません
  • 「Fizz」と「Buzz」の間のスペースは許可されていません
  • 「Fizz」/「Buzz」/「Fizzbuzz」の大文字と小文字の違いは問題ありません。
  • 出力は改行で区切る必要があります。
  • 文字で表すのではなく、ベース10の「数字」の配列を返す場合、それらは正しい順序でなければなりません!

2
気にしません。数字の代わりに絵文字を使用したい場合でも、私は気にしません。重要なのはベースであり、表現ではありません。
Geza Kerecsenyi

2
はい、わかりました。
Geza Kerecsenyi

5
技術的には、基数36では、単語buzzは単独でindex 553391fizzat 724463、およびfizzbuzzatに表示され1216820199599ます。悲しいことに、それらのどれもその基地の数で割り切れません
Jo King

3
ベース10が元のFizzBu​​zzではないのはなぜですか?:私は、基数10で元の数を生成し、他の基数にうまく転送するアルゴリズムを考えることができませんでした。私の意見では、それは質問を過度に複雑にするため、拒否の特別なケースを追加したくありませんでした。
Geza Kerecsenyi

3
今後の課題については、より柔軟なI / Oを許可することを検討してください。厄介なI / Oフォーマットは、課題を書くときに避けるべきものの中で最も支持されているトピックです。
Arnauld

回答:


3

ゼリー 42 38 34 33 29  32 バイト

+3厳格なフォーマットルールに準拠する

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

テキストの5000行を印刷する完全なプログラム、各行の整数シリーズ(桁)を含むか、のいずれかfizzbuzzまたはfizzbuzz(ベース62を超えて微細な作品)。

オンラインでお試しください!

どうやって?

なお
b÷2+1 =b÷2+1
...と
b÷+=b÷+2+1=b+6÷+1=b+8÷+1

更新しています...

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

課題は、出力は別の行にある必要があると述べています
無知の実施形態

そうだね。表現は問題ありませんが(境界線ですが)、配列を出力することはゲームをプレイすることと同じではありません。ただし、各行に数字の配列を出力する場合は、それを受け入れます。
Geza Kerecsenyi

3
@GezaKerecsenyi更新されました。しかし、私は表現がどのように「境界線」であるかを理解していません-ベースbでは、数字はます。または、配列を出力することが「ゲームをプレイする」ことではありません(「入出力は、コンソールまたは関数の引数/戻りを介して行うことができます」)。他の任意の出力の使用は、置換と同じくらい簡単であり、フォーマットは定型文であり、課題の中心に直角です。[01]
ジョナサンアラン

terser実装は、このように、数値の基数ではなく、目的の数字のリストを取得するだけで済みます。
ジョナサンアラン

3

チャコール、40バイト

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

オンラインでお試しください!リンクはコードの詳細バージョンです。説明:

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

3

R163 131バイト

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

オンラインでお試しください!

23バイトを節約してくれた@digEmAllに感謝します。次に、@ digEmAllの取り組みをさらに活用して、さらに9を節約しました。


140バイト私はあなたの答えを見ずにこれに取り組みましたが、別の投稿には似すぎています;)
digEmAll

@digEmAllありがとう。私はさらに131バイトを獲得するためにあなたの答えをゴルフして、あなたにクレジットを与えました。大丈夫だと思います。
ニックケネディ

絶対に!;)
digEmAll

ところで、Rでのゴルフについての議論がある場合は、このチャットで
digEmAll

おっと、すでにRの回答があったことに気づかなかった。私の回答は、もう少しゴルフに役立つかもしれない。
ASCIIのみ

3

JavaScriptの(ES6)、 117の  116バイト

192019212011

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)

オンラインでお試しください!

(TIOの出力が爆発しないように100に制限されています)


万が一、あなたが何を説明できる|0(5e3)しますか?
njras

0Math.floor(n)0<2315e35000g


1

05AB1E39 37 36 バイト

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

@JonathanAllanのJelly回答のポートを作成することにより、-2バイト。

オンラインそれを試してみたり、すべてのテストケースを検証する(ただし、リストとして出力し、代わりに5000の最初の100で)。

説明:

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)

この05AB1Eのヒント(「辞書の使用方法」のセクション)を参照して、理由を理解し”FizzÒÖ”てください"Fizz Buzz"


これを試して最適化したい場合に備えて、33バイトのループバージョンがあります。ただし、ジェリーよりも1バイト長い:(
Emigna '26 / 02/26

@Emignaもう投稿しましたか?それとも私の答えとかなり似ていて、ゴルフを意味しているのですか?PS:Jellyには、たとえば[input, input+8]パーツやフィルターパーツなどのDõQi yIвいくつかの
ショートカットビルトインがあり

Levenshtein-distance賢いです。それはあなたのものとは非常に異なります(ただし、パーツをあなたのように書き直すことができます)。しかし、私はジョナサンのn + 8トリックも使用しているので、必要に応じて、それに向かってゴルフを試してみようと思いました。それ以外の場合は、別の回答として投稿します。
Emigna

@エミグナ私は現在仕事で少し忙しいので、実際にこの答えをゴルフする時間はありません。したがって、必要に応じて、独自の回答として投稿できます。あなたは私の賛成票を持っています。;)
Kevin Cruijssen

残念ながら、自分のバージョンにバグを発見したので、現在は34になっています。後で説明するように、あなたや私の鉱山を短くするアイデアがいくつかあります。ジェリーを打つ/結ぶことは今でも厳しいようです。
Emigna



0

C#(Visual C#Interactive Compiler)180 171バイト

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

Arnauldの回答のような出力。スタックを使用して出力を元に戻すというアイデアを提供してくれたdigEmAllに感謝します。

オンラインでお試しください!


1
私は逆の数字に「いいえ」と言わなければなりません。数学的には正しい考えですが、雇用主が望むと言っても、それ Fizzbuzzプログラムではありません。C#に配列逆関数がないのは残念です。
Geza Kerecsenyi

0

05AB1E、34バイト

ジョナサンの数学的な洞察を使用しますceil(n/3+3)=floor((n+8)//3)+1

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

オンラインでお試しください!

説明

Ž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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.