Zzub Zzif (ters Fizz Buzz)


36

Tüm sayılar kaldırılmış olarak bir fizz buzz çıkışı snippet'i verildiğinde, fizz buzz snippet'inin doğru olması için mümkün olan en düşük değerlerle doğru numaraları doldurun . Bu meydan okuma amaçlar için fizzve buzzsırasıyla 3 ve 5 olağan değerleri vardır.

Giriş, bir geçersiz sekansı ise fizz, buzzsadece boş çizgiler, bunun yerine çıkış zzubzzif(veya yeni satır olmadan).

Giriş ve çıkış, yeni satırlarla ayrılmış satırlar veya dizelerin dizisi biçimi ne olursa olsun dilinize uygun olabilir.

Büyük harf kullanımı ile ne istersen onu göz ardı edebilir veya yapabilirsin.

: Bir veya bunlardan daha işlemek için seçmek gerekir fizzbuzz, fizz buzz, buzz fizz, vs, ama bu biçimlerin en az birini seçmelisiniz.

Sen tüm giriş bazı dizisidir varsayabiliriz fizz, buzzve satırları boşaltın.

Örnekler

Giriş:
fışırtı

Çıktı:
2
fizz
4
Giriş:
vızıltı
fışırtı

Çıktı:
buzz
fizz
7
Giriş:

fizzbuzz


Çıktı:
13
14
fizzbuzz
16
17
Giriş:


Çıktı:

1
Giriş:
fışırtı
fışırtı

Çıktı:
zzubzzif
Giriş:


Çıktı:
zzubzzif

Yanıtlar:


17

Java, 205 bayt

s->{o:for(int i=0,j,h=s.length;++i<16;){for(j=h;j-->0;)if(s[j].contains("fizz")^(i+j)%3<1||s[j].contains("buzz")^(i+j)%5<1)continue o;String z=i+"";for(j=1;j<h;)z+="\n"+(i+j++);return z;}return"zzubzzif";}

Bir Alır String[]giriş ve iadeler bir şekilde String.

Genişletilmiş, çalıştırılabilir kod:

public class C {

    static final java.util.function.Function<String[], String> f = s -> {
        o:
        for (int i = 0, j, h = s.length; ++i < 16;) {
            for (j = h; j --> 0;) {
                if (s[j].contains("fizz") ^ (i + j) % 3 < 1 ||
                    s[j].contains("buzz") ^ (i + j) % 5 < 1) {
                    continue o;
                }
            }
            String z = i + "";
            for (j = 1; j < h;) {
                z += "\n" + (i + j++);
            }
            return z;
        }
        return "zzubzzif";
    };

    public static void main(String[] args) {
        System.out.print(f.apply(new String[]{"fizz", "", "buzz"}));
    }
}

1
s / fizz / f, s / buzz / b
djechlin

10

C #, 212 bayt

Düşünülemez olanı yaptım. gotoBir döngüden kopmak için bir ifade kullandım !

string[]R(string[]a){for(int i,l=a.Length,n=0;n++<15;){for(i=l;i-->0;)if(((n+i)%3<1?"fizz":"")+((n+i)%5<1?"buzz":"")!=a[i])goto z;for(i=l;i-->0;)a[i]=a[i]==""?""+(n+i):a[i];return a;z:;}return new[]{"zzubzzif"};}

Bu, dizinin ilk 15 element içerisinde başlaması gerektiği gerçeğinden yararlanır.

Girinti ve okunabilirlik için yeni çizgiler:

string[]R(string[]a){
    for(int i,l=a.Length,n=0;n++<15;){
        for(i=l;i-->0;)
            if(((n+i)%3<1?"fizz":"")+((n+i)%5<1?"buzz":"")!=a[i])
                goto z;
        for(i=l;i-->0;)
            a[i]=a[i]==""?""+(n+i):a[i];
        return a;
    z:;
    }
    return new[]{"zzubzzif"};
}

C # breakanahtar kelimesi yok mu?
kedi

2
@ cat, öyle yapar, ancak gotoiç döngüden ve dış döngü mantığının geri kalanından atlar.
El-E-Gıda

gotoC # ' yı ilk defa duydum ! C #’nun olduğunu bile bilmiyordum!
sergiol,

4

CJam, 72 bayt

"zzubzzif":MaqN/:Q,_F+{)_[Z5]f%:!MW%4/.*s\e|}%ew{:sQ1$A,sff&:s.e|=}=N*o;

Program, zzubzzif basması gerekiyorsa bir hata ile çıkar .

Java yorumlayıcısını kullanarak, bir hata mesajını bastırmak için STDERR kapatılabilir. Programı CJam yorumlayıcısında denerseniz , ilk satırdan sonraki tüm çıktıları yoksayın.

Nasıl çalışır

"zzubzzif" e# Push that string.
:Ma        e# Save it in M and wrap in in an array.
qN/:Q      e# Split the input into lines and save in Q.
,_F+       e# Count the lines and add 15 to a copy of the result.
{          e# For each integer I between 0 and lines+14:
  )_       e#   Increment I and push a copy.
  [Z5]     e#   Push [3 5].
  f%       e#   Map % to push [(I+1)%3 (I+1)%5].
  :!       e#   Apply logical NOT to each remainder.
  MW%4/    e#   Push ["fizz" "buzz"].
  .*       e#   Vectorized string repetition.
  s\       e#   Flatten the result and swap it with I+1.
  e|       e#   Logical OR; if `s' pushed an empty string, replace it with I+1.    
}%         e#
ew         e# Push the overlapping slices of length "lines".
{          e# Find; for each slice:
  :s       e#   Cast its elements to string (e.g., 1 -> "1").
  Q1$      e#   Push the input and a copy of the slice.
  A,s      e#   Push "0123456789".
  ff&      e#   Intersect the slice's strings' characters with that string.
  :s       e#   Cast the results to string. This replaces "fizz", "buzz"
           e#   and "fizzbuzz" with empty strings.
  .e|      e#   Vectorized logical OR; replace empty lines of the input
           e#   with the corresponding elements of the slice.
  =        e#   Check the original slice and the modified input for equality.
}=         e# Push the first match or nothing.
           e# We now have ["zzubzzif"] and possibly a solution on the stack.
N*         e# Join the topmost stack item, separating by linefeeds.         
o          e# Print the result.
;          e# Discard the remaining stack item, if any.

1

Perl, 140 bayt

$f=fizz;$b=buzz;@a=<>;@x=map{s!\d!!gr.$/}@s=map{$_%15?$_%3?$_%5?$_:$b:$f:$f.$b}(++$c..$c+$#a)while$c<15&&"@x"ne"@a";print$c<15?"@s":zzubzzif

açıklama

  1. @a giriş satırları dizisidir
  2. whileDöngünün içinde
  3. @s oluşturulan fizz-buzz dizisine sahiptir
  4. @xaynıdır @sama her elemana appened boş dizeleri ve yeni bir satır ile değiştirilir sayılarla (ile eşleşecek @a)
  5. $c 1'den 15'e kadar olan bir sayaç
  6. Döngü @xgirişle aynı hale gelene kadar çalışır@a
  7. Döngünün dışında, çıkış sınırlarında @solup olmadığına bağlı olarak zzufzzib $cveya

1

Python, 176 Bayt

Muhtemelen çok daha iyi yapabilirdi, ama ilk Golf denemede. Takdir takdir :)

Çökmüş

def f(a):l=len(a);g=lambda n:'fizz'*(n%3<1)+'buzz'*(n%5<1);r=range;return next(([g(x)or x for x in r(i%15,i%15+l)]for i in r(1,16)if all(g(i+x)==a[x]for x in r(l))),g(0)[::-1])

orijinal

def f(a):
  l = len(a)
  g = lambda n: 'fizz'*(n%3<1)+'buzz'*(n%5<1)
  r = range
  return next(
    (
      [g(x) or x for x in r(i % 15,i % 15 + l)]
      for i in r(1,16)
      if all(
        g(i + x) == a[x] for x in r(l)
      )
    ),
    g(0)[::-1]
  )

PPCG'ye Hoşgeldiniz! Standart biçimlendirme kuralları, cevabınızı bir başlıkla işaretlemektir, böylece okuyucular dili ve liderlik snippet'lerinin cevabınızı uygun şekilde ayrıştırdığını bilir. Örneğin, #Java, 205 Bytescevabınızın ilk satırı olarak.
AdmBorkBork

1
Lambda'yı aşağıdakilerle değiştirmeyi deneyin: 'fizz'*(n%3<1)+'buzz'*(n%5<1)f ve b atamasını daha sonra kaldırabilirsiniz. (f+b)[::-1]o zaman bilinen bir 'fizzbuzz' çağrısı olabilir, örneğin g(15)[::-1].
Todd,

Önerin için teşekkürler! 183'e kadar! Sanırım g(0)ayrıca başka bir bayt kurtarmak için de çalışıyor :)
arcyqwerty

1
python 2, belirsizlik olmadığında anahtar kelimelerin önünde bazı boşlukları kaldırmanıza izin verir: örneğin ..] for yazılabilir ..]for. Bu numarayı uygulayarak 177 karakter kazanırsın
diyet

Bir dahaki sefere kodu yazarken yazdığınız girişi ekleyebilir misiniz? Formun örn listesi ['','fizz','']Bir liste comp vs giriş listesini karşılaştırdığımızda oldukça bütün () kullanmaktan daha kaldırmak için de birkaç tane daha varif a==[g(i + x) for x in r(l)]
Todd
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.