모든 기지에서 Fizzbuzz


10

도전

입력:

2에서 62 사이 의 정수 b (포함)

산출:

숫자 에 대한 적절한 표현을 사용하여 에서 에 해당하는 1 에서 까지의 수를 계산 하십시오.500010b

하나:

  • 숫자를 로 나눌 수있는 경우 (반올림 됨, 예를 들어 7은 7 / 2 = 3.5, 3.5 + 1 = 4.5, 4로 반올림 됨 ) 숫자 대신 'Fizz'를 출력합니다. .b÷2+1

  • 숫자를 (반올림, 예 : 11 / 3 = 3.666, 3.666 + 3 = 6.666, 7로 반올림)로 나눌 수 있으면 'Buzz'를 출력합니다.b÷3+3

  • 짐작할 수 있듯이, 숫자를 둘 다 나눌 수 있으면 'Fizzbuzz'를 출력하십시오.

사용 [0-9] , [AZ][아리조나] 숫자로

(예제를 짧게 유지하기 위해 처음 10 개의 값만 포함했습니다. 일반적으로 각 시퀀스에 4990 개의 항목이 더 있습니다)

입력 : 10 (따라서 'Fizz'= 6 및 'Buzz'= 7)

출력 : 1, 2, 3, 4, 5, Fizz, Buzz, 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

규칙

  • 표준 허점은 금지되어 있습니다
  • 이것은 코드 골프이므로 바이트 단위의 최단 답변이 승리합니다.
  • 입력 및 출력은 콘솔 또는 함수 인수 / 반환을 통해 가능
  • 빈 줄과 마찬가지로 앞 / 뒤 공백이 좋습니다.
  • 'Fizz'와 'Buzz'사이의 공백은 허용되지 않습니다.
  • 'Fizz'/ 'Buzz'/ 'Fizzbuzz'의 대소 문자 변형은 괜찮습니다.
  • 출력은 개행으로 분리되어야합니다.
  • 문자로 표시하지 않고 10 진수로 된 '숫자'배열을 반환하면 올바른 순서 여야합니다!

2
난 정말 상관 없어 숫자 대신 이모티콘을 사용하려면 여전히 상관 없습니다. 표현이 아니라 중요한 기초입니다.
Geza Kerecsenyi

2
좋아, 지금 명확히했다.
Geza Kerecsenyi

5
기술적으로, 기본 36에서 단어 buzz는 index 553391, fizzat 724463fizzbuzzat 에 자체적으로 나타납니다 1216820199599. 슬프게도, 그들 중 어느 것도 그 기지의 숫자로 나눌 수 없습니다
Jo King

3
왜 원래 FizzBuzz를 기반으로하지 않습니까? : 기본 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하는 정수 시리즈 (숫자), 또는 중 하나를 포함하는 각 라인 출력 전체 프로그램 fizz, buzz또는 fizzbuzz(베이스 (62)를 넘어 미세한 작동).

온라인으로 사용해보십시오!

어떻게?

참고
÷2+1 =÷2+1
... 및
÷+=÷+2+1=(+6)÷+1=(+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에서 숫자는 있습니다. 또는 배열을 출력하는 것이 "게임을하는"방법이 아닙니다 ( "입력 및 출력은 콘솔 또는 함수 인수 / 반환"을 통해 가능). 다른 임의의 출력을 사용하는 것은 대체와 같이 간단하고 형식화는 단순한 평판이며 도전의 핵심에 직교합니다. [0,1]
Jonathan Allan

terser 구현은 다음 과 같이 숫자 기반 대신 원하는 숫자 목록을 가져올 수 있습니다 .
Jonathan Allan

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

R , 163131 바이트

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 바이트를 얻기 위해 귀하의 답변을 더 골프화하고 당신에게 크레딧을주었습니다. 잘 됐으면 좋겠다.
Nick Kennedy

물론 ! ;)
digEmAll

BTW, 만약 당신이 R에서의 골프에 관해 토론하고 있다면 이 대화
digEmAll

죄송합니다. 이미 R 답변이 있다는 것을 몰랐습니다. 내 답변이 좀 더 골프를 치는 데 도움이 될 수 있습니까?
ASCII-only

3

자바 스크립트 (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)

온라인으로 사용해보십시오!

(TIO의 출력이 폭발하지 않도록 100으로 제한)


가능성은 당신이 무엇을 설명 할 수 |0(5e3)합니까?
njras

0Math.floor(n)0<2315e35000


1

05AB1E , 39 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 바이트의 루핑 버전이 있습니다. 그래도 여전히 Jelly보다 긴 바이트 :(
Emigna

@Emigna 이미 게시 했습니까? 아니면 내 대답과 상당히 비슷하며 골프를 의미합니까? PS : 젤리는 예를 들어와 짧은 몇 컷 내장 명령이있다 [input, input+8](나는 이제 어떻게 된 이후 부분, 필터 부분을 DõQi yIв,하지만 난 그것을 좀 더 golfed 수있는 느낌이 있습니다 ..)
케빈 Cruijssen에게

Levenshtein-Distance와 현명한 것은 당신과는 매우 다릅니다 (그러나 당신과 더 비슷하게 부분을 다시 쓸 수는 있지만). 그러나 나는 또한 Jonathan의 n + 8 트릭을 사용하므로 원하는 경우 골프를 향해 골프를 칠 수 있다고 생각했습니다. 그렇지 않으면 별도의 답변으로 게시합니다.
Emigna

@Emigna 나는 현재 직장에서 조금 바쁘므로 실제로이 답변을 골프 할 시간이 없습니다. 따라서 원하는 경우 자신의 답변으로 게시 할 수 있습니다. 당신은 내 공감대를 가지고 있습니다. ;)
Kevin Cruijssen '12

불행히도 나는 내 버전에서 버그를 발견하여 지금 34입니다. 나는 당신이나 나의 것을 더 짧게 만들 수있는 아이디어를 가지고 있습니다. 뛰고 / 매는 젤리는 이제 힘들 것 같습니다.
Emigna



0

C 번호 (카메라 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 #에는 배열 역 기능이 없습니다.
Geza Kerecsenyi

0

05AB1E , 34 바이트

Jonathan의 수학적 통찰력 을 사용 하여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.