Fizzbuzz в будь-якій базі


10

Виклик

Вхід:

Ціле число b між 2 і 62 (включно).

Вихід:

Порахуйте від 1 до еквівалента 500010 в базі b , використовуючи будь-яке розумне подання для цифр.

Однак:

  • Якщо число ділиться на b÷2+1 (округлене вниз, наприклад, основа 7 буде 7/2 = 3,5, 3,5 + 1 = 4,5, округлена до 4 ), тоді виведіть "Fizz" замість числа.

  • Якщо число ділиться на b÷3+3 (округлюється, наприклад, 11/3 = 3.666, 3.666 + 3 = 6.666, округлюється до 7 ), тоді виведіть "Buzz".

  • Як ви, напевно, можете здогадатися, якщо ваш номер ділиться обома, виведіть "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' = 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" заборонені
  • Будь-який варіант з великої літери "Fizz" / "Buzz" / "Fizzbuzz" чудово.
  • Виходи повинні бути розділені новими рядками.
  • Якщо ви повернете масив бази 10 'цифр' замість того, щоб представляти їх символами, вони повинні бути у правильному порядку!

2
Я не дуже проти. Якщо ви хочете використовувати емоджи замість цифр, я все одно не проти. Це важлива база, а не представництво.
Geza Kerecsenyi

2
Гаразд, уточнено зараз.
Геза Кереценний

5
Технічно в базі 36 слово buzzз’являється саме собою в індексі 553391, fizzна 724463і fizzbuzzв 1216820199599. На жаль, жодна з них не поділяється за номерами бази
Джо Кінг,

3
Чому базовий 10 не є оригінальним FizzBuzz? : Я не міг придумати алгоритм, який би генерував початкові числа в базі 10, і добре передавав на інші бази. І я не хотів додавати особливий випадок для денарі, оскільки це просто ускладнить питання, на мою думку.
Геза Кереценний

3
Для майбутніх проблем ви можете дозволити більш гнучку введення-виведення. Напружений формат вводу-виводу є найбільш актуальною темою у Речах, яких слід уникати під час написання викликів .
Арнольд

Відповіді:


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

У виклику зазначено, що вихід повинен бути на окремих лініях
Втілення Невігластва,

Правда. Хоча я добре в представленні (хоча це є межею), виведення масиву не те саме, що грати в гру. Однак якщо ви виведете масив цифр у кожному рядку, я прийму його.
Геза Кереценний

3
[0,n1]

Термірна реалізація може просто взяти список бажаних цифр замість числової бази, як ця .
Джонатан Аллан

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 байт я працював над цим, не дивлячись на вашу відповідь, але це занадто схоже на іншу посаду;)
digEmВсі

@digEmВсі спасибі Далі я відповів вашою відповіддю, щоб отримати 131 байт і надав вам кредит; сподіваюся, що це нормально.
Нік Кеннеді

абсолютно! ;)
digEmAll

До речі, якщо у вас є якісь дискусії щодо гольфу в R, запитайте в цьому чаті
digEmВсі

На жаль, не зрозумів, що вже є відповідь 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


1

05AB1E , 39 37 36 байт

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

-2 байт шляхом створення порту @JonathanAllan Jelly відповіді «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 Ви це вже опублікували? Або він досить схожий на мою відповідь і мається на увазі як гольф? PS: У Jelly є кілька скорочених вбудованих елементів, наприклад, [input, input+8]частина, і фільтрувальна частина згодом (що я зараз роблю DõQi yIв, але в мене є відчуття, що це може бути ще більше в гольф ..)
Кевін Кройсейсен,

Левенштейн на відстані мудрий, це дуже відрізняється від вашої (хоча частини можна переписати, щоб бути схожішими на вашу). Але я також використовую трюк Джонатана n + 8, тому я подумав, що я дозволю вам спробувати перейти до нього, якщо хочете. Інакше я опублікую це як окрему відповідь.
Емінья,

@Emigna В даний час я трохи зайнятий на роботі, тому не дуже встигаю пограти у цю відповідь. Тож якщо ви хочете, можете опублікувати це як власну відповідь. Ви отримали мою нагороду. ;)
Кевін Кройсейсен

На жаль, я виявив помилку у своїй версії, тому зараз 34. У мене є кілька ідей, які можуть зробити вашу або мою коротшою, яку я вивчу пізніше. Побиття / зав'язування желе здається зараз важким.
Емінья

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 / ... . У запитання про це я додав уточнення.
Геза Кереценний


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

Результати, як відповідь Арнольда. Завдяки 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.