피즈 버즈 .. 딱딱 팝! (일반화 된 피즈 버즈)


11

우리 모두 ol '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

선택적인 후행 줄 바꿈이 허용됩니다.

바이트 단위의 최단 코드가 이깁니다.

편집 :

분명히 나는 ​​많은 것을 놓쳤다. 죄송합니다.

  • 에서 입력 (C :) 콘솔과 STDIN은 아무것도는 5 바이트 얻는다 어디서나
  • 전체 프로그램을 참조하십시오.
  • strs에 비어 있지 않은 문자열을 가정
  • 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
입력이 너무 견고해야합니까? 또는 해시 테이블 / 사전 / 배열 등을 취할 수 있습니까? 언어의 기본 형식으로?
AdmBorkBork

2
또한 PPCG에 오신 것을 환영합니다!
AdmBorkBork

1
두 숫자가 같으면 어떻게합니까? 항상 고유 한 양의 정수입니까?
David Conrad

1
숫자에 대해 어떤 보증이 있습니까? 모두 긍정적이거나 최소한 0이 아닌가요? 문자열은 어떻습니까 : 모두 비어 있지 않습니까?
피터 테일러

1
더 나은 제목은입니다 Generalized Fizz Buzz.
mbomb007

답변:



4

자바 스크립트 (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 2012

@TuukkaX 좋은 지적, 감사합니다.
David Conrad

1
또한, 나는 당신이 할 수 있다고 확신합니다 p'\n':)
Yytsi

1

PHP, 99 바이트

primo의 FizzBuzz 답변을 기반으로 : õchr (245), 약간 거꾸로 된 줄 바꿈입니다.

for(;$i++<($a=$argv)[$z=$argc-1];){for($k=$s="";$z>$k+=2;)$s.=[$a[$k+1]][$i%$a[$k]];echo$s?:$i,~õ;}

첫 번째 인수를 무시합니다. 로 실행하십시오 -nr.


0

자바 스크립트 (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

자바, 331 바이트

자바 때문이다.

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

세 개의 개별 라인에 입력을 취합니다. 첫 번째 행에는 정수가 포함되고 n두 번째 행 에는 int str튜플이 대괄호 ( [])로 묶인 문자열이 있고 세 번째 행은 integer로 구성됩니다 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

이것은 다른 순서로 입력되지만 형식의 한 줄에 입력됩니다.

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.