ज़ज़ूब ज़ज़ीफ़ (रिवर्स फ़िज़ बज़)


36

हटाए गए सभी नंबरों के साथ फ़िज़ी बज़ आउटपुट के एक स्निपेट को देखते हुए , सही संख्याओं को संभव न्यूनतम मानों के साथ भरें जैसे कि फ़िज़ी बज़ स्निपेट सही है। इस चुनौती के प्रयोजनों के लिए, fizzऔर buzzउनके सामान्य मूल्य क्रमशः 3 और 5 हैं।

यदि इनपुट एक अवैध अनुक्रम है fizz, buzzऔर खाली लाइनें हैं, तो इसके बजाय आउटपुट zzubzzif( सिर्फ या नई लाइनों के बिना)।

इनपुट और आउटपुट न्यूलाइन से अलग की गई लाइनें हो सकती हैं, या जो भी ऐरे-ऑफ-स्ट्रिंग्स प्रारूप आपकी भाषा के लिए सुविधाजनक है।

आप कैपिटलाइज़ेशन के साथ जो भी पसंद करते हैं उसे अनदेखा या कर सकते हैं।

आप इनमें से एक या अधिक को संभालने के लिए चयन करने के लिए की आवश्यकता होगी: fizzbuzz, fizz buzz, buzz fizz, आदि, लेकिन आप इन स्वरूपों में से कम से कम एक का चयन करना होगा।

आप मान सकते हैं कि सभी इनपुट कुछ अनुक्रम हैं fizz, buzzऔर खाली लाइनें हैं।

उदाहरण

इनपुट:
सीटी

आउटपुट:
2
fizz
4
इनपुट:
भनभनाना
सीटी

आउटपुट:
buzz
fizz
7
इनपुट:

fizzbuzz


आउटपुट:
13
14
fizzbuzz
16
17
इनपुट:


आउटपुट:

1
इनपुट:
सीटी
सीटी

आउटपुट:
zzubzzif
इनपुट:


आउटपुट:
zzubzzif

जवाबों:


17

जावा, 205 बाइट्स

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

एक String[]इनपुट के रूप में लेता है और एक रिटर्न देता है String

विस्तारित, रन करने योग्य कोड:

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

सी #, 212 बाइट्स

मैंने अकल्पनीय किया। मैंने एक gotoबयान का उपयोग किया एक लूप से बाहर निकलने के लिए!

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

यह इस तथ्य का लाभ उठाता है कि अनुक्रम पहले 15 तत्वों के भीतर शुरू होना चाहिए।

पठनीयता के लिए इंडेंटेशन और नई लाइनें:

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 # में कोई breakकीवर्ड नहीं है ?
बिल्ली

2
@cat, यह करता है, लेकिन gotoआंतरिक लूप से बाहर और बाकी बाहरी लूप के तर्क पर कूदता है।
हैंड-ई-फूड

पहली बार मैंने gotoC # के बारे में सुना ! यह भी नहीं पता था कि C # के पास है!
सेरगिओल

4

CJam, 72 बाइट्स

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

यदि zzubzzif को प्रिंट करना है तो प्रोग्राम एक त्रुटि से बाहर निकलेगा

जावा दुभाषिया का उपयोग करके, STDERR को अंतिम त्रुटि संदेश को दबाने के लिए बंद किया जा सकता है। यदि आप CJam दुभाषिया में कार्यक्रम की कोशिश करते हैं , तो पहली पंक्ति के बाद सभी आउटपुट को अनदेखा करें।

यह काम किस प्रकार करता है

"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

पर्ल, 140 बाइट्स

$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

व्याख्या

  1. @a इनपुट लाइनों की सरणी है
  2. whileलूप के अंदर ,
  3. @s उत्पन्न फ़िज़-बज़ अनुक्रम है
  4. @xके रूप में ही है, @sलेकिन खाली तारों के साथ बदल दिया गया है और हर तत्व के लिए एक नई लाइन (के साथ मैच करने के लिए @a)
  5. $c 1 से 15 तक का काउंटर है
  6. लूप तब तक चलता है जब तक @xवह इनपुट के समान न हो जाए@a
  7. लूप के बाहर, आउटपुट अपनी सीमा में है या नहीं इसके @sआधार पर zzufzzib है$c

1

पायथन, 176 बाइट्स

शायद बहुत बेहतर कर सकता था, लेकिन गोल्फ में पहला प्रयास। टिप्स की सराहना की :)

सिकुड़

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

मूल

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 में आपका स्वागत है! मानक स्वरूपण दिशानिर्देश आपके उत्तर को हेडर के साथ प्रस्तुत करने के लिए हैं, इसलिए पाठकों को भाषा पता है और लीडरबोर्ड स्निपेट्स आपके उत्तर को ठीक से पार्स कर सकते हैं। उदाहरण के लिए, #Java, 205 Bytesआपके उत्तर की पहली पंक्ति के रूप में।
AdmBorkBork

1
निम्नलिखित के साथ लंबो को बदलने का प्रयास करें: 'fizz'*(n%3<1)+'buzz'*(n%5<1)आप f और b असाइनमेंट को हटा सकते हैं। (f+b)[::-1]तब एक ज्ञात 'fizzbuzz' जैसे एक कॉल हो सकता है g(15)[::-1]
टॉड

सलाह के लिये धन्यवाद! 183 से नीचे! मुझे लगता है कि g(0)यह भी एक और बाइट को बचाने के लिए काम करता है :)
arcyqwerty

1
अजगर 2 कीवर्ड से पहले कुछ रिक्त स्थान को हटाने की अनुमति देता है जब कोई अस्पष्टता नहीं होती है: उदाहरण के लिए ..] for लिखा जा सकता है ..]for। इस ट्रिक को लागू करते हुए, आपको
डाइटर

जब आपने अगली बार कोड लिखा तो क्या आप अपने द्वारा ग्रहण किए गए इनपुट को शामिल कर सकते हैं। प्रपत्र की सूची जैसे ['','fizz','']यदि आप इनपुट सूची बनाम एक सूची COMP की तुलना करने के लिए सभी का उपयोग करने के बजाय कुछ और भी हटा रहे हैं ()if a==[g(i + x) for x in r(l)]
टोड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.