Fizzbuzz trong bất kỳ cơ sở


10

Thử thách

Đầu vào:

Một số nguyên nằm giữa 2 và 62 (đã bao gồm).b

Đầu ra:

Đếm từ đến tương đương trong cơ sở , sử dụng bất kỳ biểu diễn hợp lý nào cho các chữ số.1500010b

Tuy nhiên:

  • Nếu số chia hết cho (làm tròn xuống, ví dụ: cơ sở 7 sẽ là = 3,5, 3,5 + 1 = 4,5, làm tròn thành 4 ), sau đó xuất 'Fizz' thay vì số .b÷2+1

  • Nếu số chia hết cho (làm tròn lên, ví dụ 11/3 = 3.666, 3.666 + 3 = 6.666, làm tròn thành 7 ), sau đó xuất 'Buzz'.b÷3+3

  • Như bạn có thể đoán, nếu số của bạn chia hết cho cả hai, hãy xuất 'Fizzbuzz'.

Ví dụ

Sử dụng [0-9] , [AZ][az] làm chữ số

(Tôi chỉ bao gồm 10 giá trị đầu tiên để rút ngắn các ví dụ - thông thường sẽ có thêm 4990 mục trong mỗi chuỗi)

Đầu vào: 10 (vì vậy 'Fizz' = 6 và 'Buzz' = 7)

Đầu ra: 1, 2, 3, 4, 5, Fizz, Buzz, 8, 9, 10

Đầu vào: 2 (vì vậy 'Fizz' = 2 và 'Buzz' = 4)

Đầu ra: 1, Fizz, 11, Fizzbuzz, 101, Fizz, 111, Fizzbuzz, 1001, Fizz

(Tôi đã bao gồm 50 giá trị đầu tiên sau đây để thể hiện tốt hơn cách chúng hoạt động)

Đầu vào: 55 (vì vậy 'Fizz' = = và 'Buzz' = = )2810s552210m55

Đầu ra: 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

Quy tắc

  • Sơ hở tiêu chuẩn bị cấm
  • Đây là Code Golf, vì vậy câu trả lời ngắn nhất bằng byte thắng
  • Đầu vào và đầu ra có thể thông qua bàn điều khiển, hoặc đối số / trả về hàm
  • Khoảng trắng hàng đầu / dấu là tốt, cũng như các dòng trống
  • Khoảng cách giữa 'Fizz' và 'Buzz' không được phép
  • Bất kỳ biến thể viết hoa nào của 'Fizz' / 'Buzz' / 'Fizzbuzz' đều ổn.
  • Đầu ra nên được phân tách bằng dòng mới.
  • Nếu bạn trả về một mảng gồm 10 chữ số cơ bản thay vì biểu thị chúng bằng các ký tự, thì chúng phải theo đúng thứ tự!

2
Tôi không thực sự bận tâm. Nếu bạn muốn sử dụng biểu tượng cảm xúc thay vì chữ số, tôi vẫn không phiền. Đó là cơ sở quan trọng, không phải đại diện.
Geza Kerecsenyi

2
Ok, làm rõ bây giờ.
Geza Kerecsenyi

5
Về mặt kỹ thuật, trong cơ sở 36, từ này tự buzzxuất hiện tại chỉ mục 553391, fizztại 724463fizzbuzztại 1216820199599. Đáng buồn thay, không ai trong số họ chia hết cho các số cơ sở đó
Jo King

3
Tại sao không phải là cơ sở 10 FizzBuzz ban đầu? : Tôi không thể nghĩ ra một thuật toán vừa tạo ra các số gốc trong cơ sở 10, vừa chuyển tốt sang các cơ sở khác. Và theo tôi, tôi không muốn thêm một trường hợp đặc biệt nào để từ chối vì điều đó sẽ khiến cho câu hỏi trở nên quá phức tạp.
Geza Kerecsenyi

3
Đối với những thách thức trong tương lai của bạn, vui lòng xem xét cho phép I / O linh hoạt hơn. Các định dạng I / O cồng kềnh là chủ đề được nâng cao nhất trong Những điều cần tránh khi viết thử thách .
Arnauld

Câu trả lời:


3

Thạch ,  42 38 34 33 29  32 byte

+3 tuân thủ các quy tắc định dạng nghiêm ngặt

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

Một chương trình đầy đủ mà in 5000 dòng văn bản, mỗi dòng chứa một loạt các số nguyên (các chữ số) hoặc một trong fizz, buzzhoặc fizzbuzz(hoạt động tốt ngoài cơ sở 62).

Hãy thử trực tuyến!

Làm sao?

Lưu ý rằng
b÷2+1 =b÷2+1
... và
b÷3+3=b÷3+2+1=(b+6)÷3+1=(b+8)÷3+1

đang cập nhật ...

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

Thách thức nêu rõ rằng đầu ra phải nằm trên các dòng riêng biệt
Hiện thân của sự thiếu hiểu biết

Thật. Mặc dù tôi ổn với đại diện (mặc dù đó là đường biên giới), nhưng việc xuất ra một mảng không giống như chơi trò chơi. Tuy nhiên, nếu bạn xuất mảng các chữ số trên mỗi dòng, tôi sẽ chấp nhận nó.
Geza Kerecsenyi

3
[0,n1]

Việc thực hiện terser chỉ có thể lấy một danh sách các chữ số mong muốn, thay vì cơ sở số, như thế này .
Jonathan Allan

3

Than , 40 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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 , 163 131 byte

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

Hãy thử trực tuyến!

Cảm ơn @digEmAll đã lưu 23 byte. Sau đó, tôi tiếp tục đánh gôn @ digEmAll để cứu thêm 9 người nữa.


140 byte Tôi đã làm việc với điều này mà không cần nhìn vào câu trả lời của bạn, nhưng nó quá giống với bài đăng khác;)
digEmAll

@digEmAll cảm ơn. Tôi đã đánh gôn thêm câu trả lời của bạn để nhận được 131 byte và cung cấp cho bạn tín dụng; hy vọng đó là ok.
Nick Kennedy

chắc chắn rồi ! ;)
digEmAll

BTW, nếu bạn có bất kỳ cuộc thảo luận nào về việc chơi golf trong R, hãy hỏi về cuộc trò chuyện này
digEmAll

Rất tiếc, không nhận ra đã có câu trả lời R, câu trả lời của tôi có thể hữu ích cho việc chơi gôn hơn một chút?
ASCII - chỉ

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)

Hãy thử trực tuyến!

(giới hạn ở 100 để đầu ra của TIO không nổ)


Bất kỳ cơ hội bạn có thể giải thích những gì |0(5e3)làm?
njras

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

2

Python 2 , 116 byte

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

Hãy thử trực tuyến!

Hoặc với 0-9a-zA-Zđầu ra:

Python 2 , 143 byte

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

Hãy thử trực tuyến!


1

05AB1E , 39 37 36 byte

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

-2 byte bằng cách tạo ra một cổng của @JonathanAllan Jelly câu trả lời 's .

Dùng thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm (nhưng là đầu ra danh sách và với 100 đầu tiên thay vì 5000).

Giải trình:

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)

Xem mẹo 05AB1E này của tôi (phần Làm thế nào để sử dụng từ điển? ) Để hiểu tại sao ”FizzÒÖ”"Fizz Buzz".


Tôi có một phiên bản lặp ở 33 byte trong trường hợp bạn muốn thử và tối ưu hóa điều này. Vẫn là một byte dài hơn Jelly mặc dù :(
Emigna

@Emigna Bạn đã đăng nó chưa? Hoặc nó khá giống với câu trả lời của tôi và nó có nghĩa là một sân golf? PS: Jelly có một vài nội dung được cắt ngắn, ví dụ như [input, input+8]phần đó và phần bộ lọc sau đó (mà bây giờ tôi làm như vậy DõQi yIв, nhưng tôi có cảm giác nó có thể được đánh gôn thêm ..)
Kevin Cruijssen

Khoảng cách Levenshtein rất khác so với của bạn (mặc dù các phần có thể được viết lại để giống với bạn hơn). Nhưng tôi cũng sử dụng thủ thuật n + 8 của Jonathan vì vậy tôi nghĩ rằng tôi sẽ cho phép bạn thử và đánh gôn xuống nếu bạn muốn. Nếu không, tôi sẽ đăng nó như một câu trả lời riêng biệt.
Emigna

@Emigna Tôi hiện đang hơi bận rộn trong công việc, vì vậy không thực sự có thời gian để chơi câu trả lời này. Vì vậy, nếu bạn muốn bạn có thể đăng nó như là câu trả lời của riêng bạn. Bạn đã có upvote của tôi. ;)
Kevin Cruijssen

Thật không may, tôi đã phát hiện ra một lỗi trong phiên bản của mình vì vậy bây giờ là 34. Tôi có một số ý tưởng có thể khiến bạn hoặc của tôi ngắn hơn mà tôi sẽ khám phá sau. Mặc dù vậy, đập / buộc Jelly có vẻ khó khăn.
Emigna



0

C # (Trình biên dịch tương tác Visual C #) , 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);}}

Đầu ra như câu trả lời của Arnauld. Cảm ơn digEmAll cho ý tưởng sử dụng ngăn xếp để đảo ngược đầu ra.

Hãy thử trực tuyến!


1
Tôi sẽ phải nói 'không' với các chữ số ngược. Mặc dù đó là ý tưởng chính xác về mặt toán học, nhưng đó không phải chương trình Fizzbuzz, nói rằng một nhà tuyển dụng sẽ muốn. Thật không may khi C # không có chức năng đảo ngược mảng.
Geza Kerecsenyi

0

05AB1E , 34 byte

Sử dụng cái nhìn sâu sắc toán học của Jonathan rằng ceil(n/3+3)=floor((n+8)//3)+1

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

Hãy thử trực tuyến!

Giải trình

Ž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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.