在任何基础上进行Fizzbuzz


10

挑战

输入:

2到62(含)之间的整数b

输出:

使用任何合理的数字表示形式,从1到以b为底的500010的等值数。b

然而:

  • 如果该数量是由整除b÷2+1(四舍五入,例如基体7将是7/2 = 3.5,3.5 + 1 = 4.5,四舍五入到4),则输出'嘶嘶声',而不是数。

  • 如果该数量是由整除b÷3+3(四舍五入,例如11/3 = 3.666,3.666 + 3 = 6.666,四舍五入到7),则输出'巴兹'。

  • 您可能会猜到,如果您的电话号码可被两者整除,则输出“ Fizzbuzz”。

例子

使用[0-9][AZ][az]作为数字

(为了使示例简短,我仅包括前10个值-通常每个序列中有4990个以上的项目)

输入: 10(因此“ Fizz” = 6,“ Buzz” = 7)

输出: 1,2,3,4,4,嘶嘶声,嗡嗡声,8,9,10

输入: 2(因此'Fizz'= 2和'Buzz'= 4)

输出: 1,Fizz,11,Fizzbuzz,101,Fizz,111,Fizzbuzz,1001,Fizz

(我已包含以下内容的前50个值,以更好地展示它们的工作原理)

输入: 55(因此'Fizz'= 2810 = s55和'Buzz'= 2210 = m55

输出: 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

规则

  • 禁止出现标准漏洞
  • 这是Code Golf,所以最短答案以字节为单位
  • 输入和输出可以通过控制台或函数自变量/返回
  • 前导/后缀空格很好,空行也一样
  • “嘶嘶声”和“嗡嗡声”之间不允许有空格
  • 'Fizz'/'Buzz'/'Fizzbuzz'的所有大写变体都可以。
  • 输出应以换行符分隔。
  • 如果您返回以10为基数的数字数组,而不是用字符表示它们,那么它们必须采用正确的顺序!

2
我真的不介意 如果您想使用表情符号而不是数字,我还是不介意。重要的是基础,而不是表示形式。
格扎·凯雷克森伊

2
好的,现在澄清。
Geza Kerecsenyi

5
从技术上讲,该单词在基数36中独自buzz出现在index 553391fizzat 724463fizzbuzzat 1216820199599。可悲的是,他们都无法被该基地的数字整除
乔·金

3
为什么原始FizzBu​​zz不以10为基数?:我想不出一个既能以10为基数生成原始数字,又能很好地转移到其他基数的算法。而且我不想为拒绝提供特殊情况,因为我认为这会使问题变得更加复杂。
格扎·凯雷克森伊

3
对于您未来的挑战,请考虑允许使用更灵活的I / O。笨拙的I / O格式Things在编写挑战时应避免的话题。
Arnauld

Answers:


3

果冻 42 38 34 33 29  32 字节

+3遵守严格的格式设置规则

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

一个完整的程序,其打印5000行文字,含有一系列整数(数字)或一种每行fizzbuzzfizzbuzz(正常工作超出基座62)。

在线尝试!

怎么样?


b÷2+1 =b÷2+1

b÷3+3=b÷3+2+1=(b+6)÷3+1=(b+8)÷3+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
[0,n1]

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

R163131字节

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

在线尝试!

感谢@digEmAll节省了23个字节。然后,我进一步打高尔夫@digEmAll的努力,以进一步保存9。


140个字节,我在不考虑您的回答的情况下进行了此工作,但对于另一篇文章来说却太相似了;)
digEmAll

@digEmAll谢谢。我进一步研究了您的答案,以获得131个字节,并给予您信誉;希望没事。
肯尼迪

绝对!;)
digEmAll19年

顺便说一句,如果您有关于R中打高尔夫球的任何讨论,请在此聊天中
digEmAll

糟糕,没有意识到已经有R答案了,我的答案可能会有助于打高尔夫球吗?
仅ASCII格式,

3

的JavaScript(ES6), 117个  116字节

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)

在线尝试!

(限制为100,以便TIO的输出不会爆炸)


您有机会解释什么|0(5e3)做什么吗?
njras

0nMath.floor(n)0n<2315e35000g

2

Python 2,116字节

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

在线尝试!

0-9a-zA-Z输出:

Python 2 143字节

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

在线尝试!


1

05AB1E39 37 36 字节

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

通过创建@JonathanAllan的Jelly答案端口创建-2字节。

在线尝试验证所有测试用例(但以列表输出的形式显示,并且前100个而不是5000个)。

说明:

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字节的循环版本,以防您想尝试和优化它。仍然比果冻长一个字节:(
Emigna '19

@Emigna您已经发布了吗?还是与我的答案非常相似,它意味着打高尔夫球?PS:Jelly有一些快捷方式内置的[input, input+8]部件,例如滤嘴部件,然后是过滤器部件(我现在是这样做的DõQi yIв,但我觉得它可以打更多的球。)
Kevin Cruijssen

Levenshtein距离明智的做法与您的做法有很大不同(尽管可以重写某些部分,使其更像您的部分)。但是我也使用乔纳森(Jonathan)的n + 8技巧,所以我想如果您愿意,我会让您尝试一下。否则,我会将其作为单独的答案发布。
Emigna '19

@Emigna我目前工作有点忙,所以真的没有时间打高尔夫球。因此,如果您愿意,可以将其发布为您自己的答案。你有我的支持。;)
Kevin Cruijssen

不幸的是,我发现了我的版本中的一个错误,所以现在是34。我有一些想法可能会使您或我的想法更短,以后再进行探讨。打/绑果冻现在似乎很难。
Emigna


0

R,138字节

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)

在线尝试!


0

C#(Visual C#中交互式编译器)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#没有数组反向函数。
格扎·凯雷克森伊

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.