Fizzbuzz ในทุกฐาน


10

ท้าทาย

การป้อนข้อมูล:

จำนวนเต็มระหว่าง 2 ถึง 62 (รวม)b

เอาท์พุท:

นับจากถึงเทียบเท่าในฐานโดยใช้การแทนค่าที่เหมาะสมสำหรับตัวเลข1500010b

อย่างไรก็ตาม:

  • หากจำนวนหารด้วย (ปัดลงเช่นฐาน 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]และ[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' = =และ 'Buzz' = = )2810s552210m55

เอาท์พุท: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, ฉัน, 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, ฉัน, J, K, L, M, N

กฎระเบียบ

  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือ Code Golf ดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
  • อินพุตและเอาต์พุตสามารถผ่านคอนโซลหรือฟังก์ชันอาร์กิวเมนต์ / ส่งคืน
  • ช่องว่างสีขาวนำหน้า / ส่วนท้ายนั้นใช้ได้เช่นเดียวกับบรรทัดว่าง
  • ไม่อนุญาตให้เว้นวรรคระหว่าง 'Fizz' และ 'Buzz'
  • ตัวพิมพ์ใหญ่ใด ๆ ของ 'Fizz' / 'Buzz' / 'Fizzbuzz' นั้นใช้ได้
  • เอาต์พุตควรคั่นด้วยบรรทัดใหม่
  • หากคุณคืนอาร์เรย์ 'หลัก' ฐาน 10 แทนการแสดงด้วยอักขระพวกมันจะต้องอยู่ในลำดับที่ถูกต้อง!

2
ฉันไม่รังเกียจจริงๆ หากคุณต้องการใช้อิโมจิแทนตัวเลขฉันก็ยังไม่สนใจ มันเป็นฐานที่สำคัญไม่ใช่การเป็นตัวแทน
Geza Kerecsenyi

2
ตกลงชี้แจงตอนนี้
Geza Kerecsenyi

5
เทคนิคในฐาน 36 คำbuzzปรากฏด้วยตัวเองที่ดัชนี553391, fizzที่724463และที่fizzbuzz 1216820199599น่าเศร้าที่ไม่มีฐานข้อมูลเหล่านี้หารด้วยจำนวนนั้น
Jo King

3
ทำไม FizzBuzz ดั้งเดิมไม่ถึง 10 ตัว? : ฉันไม่สามารถนึกถึงอัลกอริทึมที่ทั้งสองจะสร้างตัวเลขดั้งเดิมในฐาน 10 และถ่ายโอนไปยังฐานอื่นได้ดี และฉันไม่ต้องการเพิ่มกรณีพิเศษให้กับ denary เพราะนั่นจะทำให้คำถามซับซ้อนเกินไปในความคิดของฉัน
Geza Kerecsenyi

3
สำหรับความท้าทายในอนาคตของคุณโปรดพิจารณาอนุญาตให้ I / O มีความยืดหยุ่นมากขึ้น ยุ่งยาก I / O รูปแบบเป็นหัวข้อ upvoted ที่สุดในสิ่งที่ควรหลีกเลี่ยงเมื่อเขียนความท้าทาย
Arnauld

คำตอบ:


3

เยลลี่ ,  42 38 34 33 29  32 ไบต์

+3 เพื่อปฏิบัติตามกฎการจัดรูปแบบที่เข้มงวด

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

โปรแกรมเต็มรูปแบบที่พิมพ์ 5000 บรรทัดของข้อความแต่ละบรรทัดที่มีชุดของจำนวนเต็ม (ตัวเลข) หรือหนึ่งfizz, buzzหรือfizzbuzz(ทำงานได้ดีเกินกว่าฐาน 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
@GezaKerecsenyi อัปเดตแล้ว แต่ผมไม่เข้าใจว่าการแสดงคือ "เส้นเขตแดน" - ในฐานขตัวเลขอยู่ในn-1] หรือวิธีที่การแสดงผลอาร์เรย์ไม่ "เล่นเกม" ("อินพุตและเอาต์พุตสามารถผ่านคอนโซลหรือฟังก์ชันอาร์กิวเมนต์ / ส่งคืน") การใช้เอาต์พุตแบบกำหนดเองอื่น ๆ นั้นง่ายพอ ๆ กับการทดแทนและการจัดรูปแบบซึ่งเป็นเพียงแค่ต้นแบบและแนวตั้งฉากกับแกนกลางของความท้าทาย [0,n1]
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 , 163 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')

ลองออนไลน์!

ขอบคุณ @digEmAll สำหรับการบันทึก 23 ไบต์ จากนั้นฉันก็พยายามต่อไป @ digEmAll เพื่อประหยัดอีก 9


140 byteฉันทำงานนี้โดยไม่ต้องดูคำตอบของคุณ แต่มันก็คล้ายกันกับโพสต์อื่น;)
239223

@digEmAll ขอบคุณ ฉันตอบคำถามของคุณเพิ่มเติมเพื่อรับ 131 ไบต์และให้เครดิตคุณ หวังว่าไม่เป็นไร
Nick Kennedy

อย่างแน่นอน! ;)
digEmAll

BTW ถ้าคุณมีการสนทนาใด ๆ เกี่ยวกับการเล่นกอล์ฟใน 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

@psinaught การแสดงค่าบิตหรือด้วยบนจำนวนบังคับให้มันถูกบังคับให้เป็นจำนวนเต็มขนาดเล็กที่ใกล้ที่สุดดังนั้นโดยทั่วไปจะเทียบเท่ากับ(ยกเว้นจะใช้ได้เฉพาะกับ ) เป็นสัญกรณ์ชี้แจง- ซึ่งเป็นที่นี่อาร์กิวเมนต์ส่งผ่านไปยังฟังก์ชั่นด้านนอกลูกศรกรัมn 0 n < 2 31กรัม0nMath.floor(n)0n<2315e35000g
Arnauld


1

05AB1E , 39 37 36 ไบต์

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

-2 ไบต์โดยการสร้างพอร์ตของ@JonathanAllan 's คำตอบวุ้น

ลองใช้ออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด (แต่เป็นรายการเอาท์พุทและมี 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 ไบต์ในกรณีที่คุณต้องการลองและเพิ่มประสิทธิภาพนี้ ยังคงเป็นไบต์นานกว่า Jelly แม้ว่า :(
Emigna

@Emigna คุณโพสต์ไปแล้ว? หรือมันค่อนข้างคล้ายกับคำตอบของฉันและมันก็มีความหมายเหมือนกอล์ฟ? PS: เยลลี่มีบิวด์ช็อตช็อตอยู่สองสามตัวตัวอย่างเช่นชิ้น[input, input+8]ส่วนและตัวกรองหลังจากนั้น (ซึ่งตอนนี้ฉันทำDõQi yIвแต่ฉันมีความรู้สึกว่ามันสามารถเล่นกอล์ฟได้อีก .. )
Kevin Cruijssen

ระยะทาง Levenshtein ฉลาดแตกต่างจากของคุณมาก (แม้ว่าชิ้นส่วนสามารถเขียนใหม่ให้เหมือนของคุณได้มากกว่า) แต่ฉันก็ใช้เคล็ดลับ n + 8 ของโจนาธานด้วยดังนั้นฉันจึงคิดว่าฉันจะให้คุณลองเล่นกอล์ฟของคุณเองหากคุณต้องการ มิฉะนั้นฉันจะโพสต์มันเป็นคำตอบที่แยกจากกัน
Emigna

@Emigna ฉันกำลังยุ่งอยู่กับการทำงานดังนั้นอย่ามีเวลาตีกอล์ฟกับคำตอบนี้ ดังนั้นหากคุณต้องการคุณสามารถโพสต์มันเป็นคำตอบของคุณเอง คุณมี upvote ของฉัน ;)
Kevin Cruijssen

น่าเสียดายที่ฉันพบข้อผิดพลาดในรุ่นของฉันดังนั้นตอนนี้มันเป็น 34 ฉันมีความคิดบางอย่างที่อาจทำให้คุณหรือสั้นกว่าที่ฉันจะสำรวจในภายหลัง แม้ว่าการตี / มัดวุ้นดูเหมือนว่าจะยากในขณะนี้
Emigna

0

Perl 6 , 91 ไบต์

{$!=0;('Fizz'x++$!%%($_/2+|0+1)~'Buzz'x$!%%(($_+8)/3+|0+1)||[R,] $!.polymod($_ xx*))xx𐄦}

ลองออนไลน์!

บล็อกโค้ดแบบไม่ระบุชื่อที่ส่งคืนรายการสตริงFizz/Buzz/FizzBuzzหรือรายการย้อนกลับของจำนวนเต็มในฐาน


ดูcodegolf.stackexchange.com/questions/180247/... ฉันได้เพิ่มความกระจ่างในคำถามเกี่ยวกับเรื่องนี้
Geza Kerecsenyi


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.