Herhangi bir bazda Fizzbuzz


10

Meydan okuma

Giriş:

2 ile 62 arasında (dahil) bir tamsayısı .b

Çıktı:

Count eşdeğer üssü b basamağı için herhangi bir makul gösterimi kullanılarak,.1500010b

Ancak:

  • Sayı b÷2+1 (aşağı yuvarlanır, örn. Temel 7 7/2 = 3,5, 3,5 + 1 = 4,5, 4'e yuvarlanır ), sonra sayı yerine 'Fizz' olur .

  • Sayı b÷3+3 (yuvarlanmış, örneğin 11/3 = 3.666, 3.666 + 3 = 6.666, 7'ye yuvarlanmış ), sonra 'Buzz' çıktısını alın.

  • Tahmin edebileceğiniz gibi, numaranız her ikisiyle de bölünebiliyorsa, 'Fizzbuzz' çıktısını alın.

Örnekler

Kullanma [0-9] , [AZ] ve [az] basamak olarak

(Örnekleri kısa tutmak için yalnızca ilk 10 değeri ekledim - normalde her sekansta 4990 daha fazla öğe olurdu)

Giriş: 10 (böylece 'Fizz' = 6 ve 'Buzz' = 7)

Çıkış: 1, 2, 3, 4, 5, Fizz, Buzz, 8, 9, 10

Giriş: 2 (böylece 'Fizz' = 2 ve 'Buzz' = 4)

Çıkış: 1, Fizz, 11, Fizzbuzz, 101, Fizz, 111, Fizzbuzz, 1001, Fizz

(Nasıl çalıştıklarını daha iyi göstermek için aşağıdakilerin ilk 50 değerini ekledim)

Girdi: 55 (böylece 'Fizz' = = ve 'Buzz' = = )2810s552210m55

Çıktı: 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

kurallar

  • Standart boşluklar yasaktır
  • Bu Code Golf, baytlarda en kısa cevap kazanıyor
  • Giriş ve çıkış konsoldan veya işlev bağımsız değişkenlerinden / dönüşlerinden olabilir
  • Boş satırlar gibi önde gelen / sondaki beyaz alan iyi
  • 'Fizz' ve 'Buzz' arasındaki boşluklara izin verilmiyor
  • 'Fizz' / 'Buzz' / 'Fizzbuzz' öğelerinin büyük / küçük harf varyasyonları iyidir.
  • Çıktılar yeni satırlarla ayrılmalıdır.
  • Onları karakterlerle temsil etmek yerine temel 10 'basamak' dizisini döndürürseniz, doğru sırada olmaları gerekir!

2
Gerçekten umrumda değil. Rakamlar yerine emoji kullanmak istiyorsanız, yine de umursamıyorum. Temsil değil, önemli olan temeldir.
Geza Kerecsenyi

2
Tamam, şimdi açıklığa kavuştum.
Geza Kerecsenyi

5
Teknik olarak, taban 36'da kelime buzzkendi başına index 553391, fizzat 724463ve fizzbuzzat adreslerinde görünür 1216820199599. Ne yazık ki, hiçbiri bu üssün numaralarına bölünemez
Jo King

3
Neden temel 10 orijinal FizzBuzz değil? : Hem taban 10'da orijinal sayıları üretecek hem de diğer üslere iyi aktarılacak bir algoritma düşünemedim. Bence bu soruyu çok fazla karmaşıklaştıracağından, inkar için özel bir dava eklemek istemedim.
Geza Kerecsenyi

3
Gelecekteki zorluklarınız için lütfen daha esnek G / Ç'ye izin vermeyi düşünün. Zorlu G / Ç formatları , zorlukları yazarken kaçınılması gereken konular'daki en güncel konu .
Arnauld

Yanıtlar:


3

Jöle ,  42 38 34 33 29  32 bayt

Sıkı biçimlendirme kurallarına uymak için +3

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

Metin 5000 hatları, bir tamsayı dizisi (basamak) ya da birini içeren her satır yazdırır tam bir program fizz, buzzya da fizzbuzz(baz 62 ötesine ince çalışır).

Çevrimiçi deneyin!

Nasıl?

Not bu ... ve
b÷2+1 =b÷2+1b ÷ 3 + 3 = b ÷ 3 + 2 + 1 = ( b + 6 ) ÷ 3 + 1 = ( b + 8 ) ÷ 3 + 1

b÷3+3=b÷3+2+1=(b+6)÷3+1=(b+8)÷3+1

güncellenmesi ...

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

Zorluk, çıktının ayrı satırlarda olması gerektiğini belirtiyor
Cehaletin Somutlaştırılması

Doğru. Temsilcilikte iyi olduğum halde (sınır çizgisi olsa da), bir dizi çıkarmak oyunu oynamakla aynı şey değil. Ancak, her satırdaki rakam dizisini çıkarırsanız, kabul edeceğim.
Geza Kerecsenyi

3
@GezaKerecsenyi Güncellendi. Ancak, gösterimin nasıl "sınırda" olduğunu anlamıyorum - baz b'de rakamlar . Ya da bir dizinin çıktısının nasıl "oyun oynamak" olmadığı anlamına gelir ("Girdi ve çıktılar konsoldan ya da işlev argümanları / iadeleriyle olabilir). Başka bir rasgele çıktı kullanmak, değiştirme ve biçimlendirme kadar basittir ve biçimlendirme sadece meydan okuma ve meydanın ortasına diktir. [0,n1]
Jonathan Allan

Ters bir uygulama, bunun gibi sayısal taban yerine istenen basamakların bir listesini alabilir .
Jonathan Allan

3

Kömür , 40 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

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 bayt

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

Çevrimiçi deneyin!

23 bayt kaydettiği için @digEmAll'a teşekkürler. Daha sonra @ digEmAll'ın 9 tane daha kaydetme çabalarına golf oynadım.


140 bayt Cevabınıza bakmadan bunun üzerinde çalıştım, ama başka bir yazı için çok benzer;)
digEmAll

@digEmAll teşekkürler. Ayrıca 131 bayt almak için cevabınızı golf ettik ve size kredi verildi; umarım sorun olmaz.
Nick Kennedy

kesinlikle! ;)
digEmTüm

BTW, R'de golf hakkında herhangi bir tartışmanız varsa bu sohbete
digEmAll

Hata! Zaten bir R cevabı olduğunu fark etmedim, cevabım biraz daha golf oynamak için yardımcı olabilir mi?
Yalnızca ASCII

3

JavaScript (ES6),  117  116 bayt

Çıkışlar virgülle ayrılmış hane, her bir basamak (örneğin, bir ondalık miktar olarak ifade edilir olan ve olan ).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)

Çevrimiçi deneyin!

(100 ile sınırlıdır, böylece TIO'nun çıkışı patlamaz)


Ne |0ve ne olduğunu açıklamak için herhangi bir şans (5e3)?
njras

@psinaught Bir sayı ile bitsel VEYA gerçekleştirmek , en yakın daha küçük tam sayıya zorlanmaya zorlar, bu nedenle temelde eşdeğerdir (sadece ). burada dış ok fonksiyonuna iletilen argüman olan üstel gösterimdir . . n 0 n < 2 31 g0nMath.floor(n)0n<2315e35000g
Arnauld

2

Python 2 , 116 bayt

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

Çevrimiçi deneyin!

Veya 0-9a-zA-Zçıktı ile:

Python 2 , 143 bayt

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

Çevrimiçi deneyin!


1

05AB1E , 39 37 36 bayt

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

@JonathanAllan'ın Jelly cevabı portu oluşturarak -2 bayt .

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın (ancak liste çıktısı olarak ve 5000 yerine ilk 100 ile).

Açıklama:

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)

Neden ”FizzÒÖ”olduğunu anlamak için bu 05AB1E bahşişime bakın ( sözlük nasıl kullanılır? )"Fizz Buzz" .


Bunu denemek ve optimize etmek istemeniz durumunda 33 baytta döngüsel bir sürümüm var. Yine de
Jelly'den

@Emigna Daha önce gönderdiniz mi? Ya da benim cevabımla oldukça benzer ve bir golf mü demek? Not: Jöle, örneğin [input, input+8]parçası ve daha sonra filtre kısmı ile birkaç kısa kesilmiş yapıya sahiptir (ki şimdi yapıyorum DõQi yIв, ama biraz daha golfe girebileceğini hissediyorum.)
Kevin Cruijssen

Levenshtein-mesafe akıllıca sizinkinden çok farklıdır (ancak parçalar sizinki gibi daha fazla yeniden yazılabilir). Ama aynı zamanda Jonathan'ın n + 8 numarasını da kullanıyorum, bu yüzden eğer istersen sana doğru golf oynamaya izin vereceğimi düşündüm. Aksi takdirde ayrı bir cevap olarak gönderirim.
Emigna

@Emigna Şu anda işte biraz meşgulüm, bu yüzden bu cevabı golf oynamak için gerçekten zamanım yok. Yani isterseniz kendi cevabınız olarak gönderebilirsiniz. Benim oyumu aldın. ;)
Kevin Cruijssen

Ne yazık ki versiyonumda bir hata keşfettim, bu yüzden şimdi 34. Sizinkini veya benimkini daha kısa sürebileceğim bazı fikirlerim var. Yine de Jelly'i yenmek / bağlamak zor görünüyor.
Emigna



0

C # (Visual C # Etkileşimli derleyicisi) , 180 171 bayt

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'un cevabı gibi çıktılar. Çıkışı tersine çevirmek için bir yığın kullanma fikri için digEmAll'a teşekkürler.

Çevrimiçi deneyin!


1
Ters rakamlara 'hayır' demem gerekecek. Matematiksel olarak doğru bir fikir olsa da, değil Fizzbuzz programı, bir işveren isteyeyim ki. C # 'ın bir dizi ters fonksiyonu olmaması talihsiz bir durumdur.
Geza Kerecsenyi

0

05AB1E , 34 bayt

Kullanımları Jonathan'ın matematiksel fikir olduğunu ceil(n/3+3)=floor((n+8)//3)+1

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

Çevrimiçi deneyin!

açıklama

Ž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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.