Fizz Buzz .. Crackle Pop!(一般化されたフィズバズ)


11

古くからあるFizz Buzzの問題を聞いたことはありますが、より多くの要因でそれを適用しようとするとどうなりますか?フィズバズクラックルポップ!

チャレンジ

整数入力n、次に整数と文字列を含むn個のタプル、さらに別の整数(> 1)kを受け取る完全なプログラムを作成します。

 n int1 str1 int2 str2 (...) intn strn k

この行は、コマンドラインまたはSTDINから取得できます。

次に、1〜kのすべての整数について、int1、int2 ... intnのいずれかで割り切れる場合、対応するすべてのstrを入力順に出力し、その後に改行を続けます。そうでない場合は、整数を出力し、その後に改行を続けます。

たとえば、入力あり

3 2 Fizz 3 Buzz 5 Crackle 10

我々が得る

1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle

ただし、入力あり(順序の変更に注意)

3 3 Buzz 2 Fizz 5 Crackle 10

我々が得る

1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle

オプションの末尾の改行も使用できます。

バイト単位の最短コードが優先されます。

編集:

明らかに、私は多くのことを逃しました、ごめんなさい。

  • 以下からの入力コンソールとSTDIN、何か他のものは5バイトで取得します(:C)のどこでも
  • 完全なプログラムをお願いします。
  • strに空でない文字列を想定
  • intの一意性の保証はありません

サンプルC ++プログラム(私は怠け者だから20に制限されています):

#include <iostream>
#include <string>
using namespace std;

int main() {
  string names[20];
  int mods[20], n, max;
  cin >> max >> n;
  for (int i=0; i<n; i++) {
    cin >> mods[i] >> names[i];
  }
  for (int i=1; i<=max; i++) {
    bool found = false;

    for (int j=0; j<n; j++) {
      if (i % mods[j] == 0) {
        found = true;
        cout << names[j];
      }
    }
    if (!found)
     cout << i;
    cout << endl;
  }

  return 0;
}

5
入力はそれほど厳格である必要がありますか?または、hashtable / dictionary / array / etcを取得できますか。言語のネイティブ形式で?
— AdmBorkBork

2
また、PPCGへようこそ!
— AdmBorkBork

1
2つの数字が同じ場合はどうなりますか?それらは常に一意の正の整数ですか?
— デビッドコンラッド

1
数値に関してどのような保証がありますか?それらはすべて正であるか、少なくともゼロ以外ですか?文字列はどうですか:それらはすべて空ではありませんか?
— ピーターテイラー

1
より良いタイトルはかもしれませんGeneralized Fizz Buzz。
— mbomb007

回答:



4

JavaScript(ES6)、90バイト

主要な改行を生成します。

f=(a,i=a.pop())=>i?f(a,i-1)+`
`+(a.map((_,j)=>++j>a[0]|i%a[j*2-1]?'':a[j*2]).join``||i):''

テスト



1

C ++、194バイト

#include <iostream>
#define p std::cout<<
int main(int c,char**a){c=2*atoi(a[1])+2;int x,f,i,n=atoi(a[c]);for(x=1;x<=n;x++){f=0;for(i=2;i<c;i+=2)if(x%atoi(a[i])<1)f=1,p a[i+1];if(!f)p x;p'\n';}}

ゴルフをしていない:

#include <iostream>

int main(int c, char **a) {
    c = 2 * atoi(a[1]) + 2;
    int x, f, i, n = atoi(a[c]);
    for (x = 1; x <= n; x++) {
        f = 0;
        for (i = 2; i < c; i += 2)
            if (x % atoi(a[i]) < 1) f = 1, std::cout << a[i+1];
        if (!f) std::cout << x;
        std::cout << '\n';
    }
}

1
の結果x%atoi(a[i])が負にならない場合は、をチェックしx%atoi(a[i])<1ます。
— Yytsi

@TuukkaX良い点、ありがとう。
— デビッドコンラッド

1
また、私はあなたができると確信していますp'\n':)
— Yytsi


0

JavaScript(ES6)、105 97バイト

g=(m,k,i=1)=>i<-~k?([...m.keys()].filter(j=>i%j<1).map(j=>m.get(j)).join``||i)+"\n"+g(m,k,i+1):""

ペアm(整数、文字列)と整数kのマップを受け取ります。末尾に改行が付いています。

これは非再帰バージョン(105バイト)ですが、末尾の改行を生成しません。

m=>k=>[...Array(k).keys()].map(x=>[...m.keys()].filter(j=>-~x%j<1).map(j=>m.get(j)).join``||x+1).join`\n`

オンラインでお試しください!


0

Java、331バイト

なぜならJava。

import java.util.*;class A{A(int c,String x){i=c;v=x;}int i;String v;void x(String[]x){ArrayList<A>l=new ArrayList();int n=0;for(;++n<x.length-1;)l.add(new A(Integer.valueOf(x[n++]),x[n]));n=Integer.valueOf(x[n]);for(int i=1;i++<n;){String o="";boolean y=1>0;for(A a:l)if(i%a.i==0){y=1<0;o+=a.v;}if(y)o+=i;System.out.println(o);}}}

これは、これに必要な完全なクラスです。ただし、それを実行するにxは、の既存のインスタンスでメソッドを呼び出す必要がありますA。テストのために、コマンドラインで実行可能なクラスを以下に提供します。

import java.util.*;
class A{
A(int c,String x){i=c;v=x;}
int i;
String v;
void x(String[]x){
ArrayList<A>l=new ArrayList();
int n=0;
for(;++n<x.length-1;)
l.add(new A(Integer.valueOf(x[n++]),x[n]));
n=Integer.valueOf(x[n]);
for(int i=1;i++<n;){
String o="";
boolean y=1>0;
for(A a:l)if(i%a.i==0){y=1<0;o+=a.v;}
if(y)o+=i;
System.out.println(o);
}
}
public static void main(String[] args) {
new A(0,"").x(args);
}
}


0

dc、121バイト

?dstsw?[rdlt:Y:Rlt1-dst0<q]dsqx?sb1sm[ln;Y;RnlP1+sP]ss[lmn]sF[1sn0sP[lnd;Ylmr%0=s1+dsnlw!<g]dsgxlP0=Flm1+dsm10Plb!<i]dsix

入力を3行に分けます。最初の行は整数を含み、2行n目int strは文字列が角括弧([])で囲まれたタプルを格納し、3行目は整数で構成されkます。たとえば、次の3 2 Fizz 3 Buzz 5 Crackle 10ように入力できます。

3
3 [Buzz] 2 [Fizz] 5 [Crackle]
10

オンラインでお試しください!

または、異なる順序で入力を取得します。

dc、118バイト

?dstsw[dlt:Y:Rlt1-dst0<q]dsqxsb1sm[ln;Y;RnlP1+sP]ss[lmn]sF[1sn0sP[lnd;Ylmr%0=s1+dsnlw!<g]dsgxlP0=Flm1+dsm10Plb!<i]dsix

これは異なる順序で入力を受け取りますが、形式は1行です

k [str1] int1 [str2] int2 (...) [strn] intn n

たとえば、次の3 2 Fizz 3 Buzz 5 Crackle 10ように入力します。

10 [Buzz] 3 [Fizz] 2 [Crackle] 5 3

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.