Fizz Buzz .. Crackle Pop! (Buzz Fizz tổng quát)


11

Chúng ta đều đã nghe về vấn đề Fizz Buzz của ol, nhưng điều gì xảy ra khi bạn cố gắng áp dụng nó với nhiều yếu tố hơn? Fizz Buzz Crackle Pop!

Các thách thức

Viết một chương trình đầy đủ có một đầu vào số nguyên n , sau đó n bộ chứa một số nguyên và một chuỗi, sau đó một số nguyên khác (> 1) k, như sau:

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

Bạn có thể lấy dòng này từ dòng lệnh hoặc STDIN.

Sau đó, với tất cả các số nguyên từ 1 đến k, nếu nó chia hết cho bất kỳ int1 , int2 ... intn nào , hãy xuất tất cả các str tương ứng theo thứ tự đầu vào, theo sau là một dòng mới. Nếu không, thì chỉ cần xuất số nguyên, theo sau là một dòng mới.

Ví dụ: với đầu vào

3 2 Fizz 3 Buzz 5 Crackle 10

chúng tôi nhận được

1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle

Nhưng với đầu vào (chú ý thay đổi thứ tự)

3 3 Buzz 2 Fizz 5 Crackle 10

chúng tôi nhận được

1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle

Dòng mới tùy chọn là chấp nhận được.

Mã ngắn nhất trong byte thắng.

Chỉnh sửa:

Rõ ràng là tôi đã bỏ lỡ rất nhiều, xin lỗi.

  • Đầu vào từ bàn điều khiển và STDIN, bất cứ thứ gì khác nhận được +5 byte (: c) ở bất cứ đâu
  • Chương trình đầy đủ xin vui lòng.
  • Giả sử các chuỗi không trống cho strs
  • Không đảm bảo cho tính duy nhất của ints

Chương trình mẫu C ++ (giới hạn ở mức 20 vì tôi lười biếng):

#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
Đầu vào có cần phải quá cứng nhắc không? Hoặc chúng ta có thể lấy một hashtable / dictionary / mảng / vv. trong định dạng bản địa của ngôn ngữ?
admBorkBork 6/2/2017

2
Ngoài ra, chào mừng bạn đến với PPCG!
admBorkBork

1
Nếu hai trong số đó giống nhau thì sao? Họ sẽ luôn là số nguyên dương duy nhất?
David Conrad

1
Những gì đảm bảo có về các con số: tất cả chúng sẽ tích cực, hoặc ít nhất là khác không? Thế còn các chuỗi: tất cả chúng đều không trống?
Peter Taylor

1
Một tiêu đề tốt hơn có thể là Generalized Fizz Buzz.
mbomb007

Câu trả lời:



4

JavaScript (ES6), 90 byte

Tạo ra một dòng mới hàng đầu.

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

Kiểm tra



1

C ++, 194 byte

#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';}}

Ung dung:

#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
Nếu kết quả x%atoi(a[i])không thể âm tính, thì chỉ cần kiểm tra x%atoi(a[i])<1.
Yytsi

@TuukkaX Điểm tốt, cảm ơn.
David Conrad

1
Ngoài ra, tôi khá chắc chắn bạn có thể làm được p'\n':)
Yytsi

1

PHP, 99 byte

Dựa trên câu trả lời FizzBuzz của primo : õlà chr (245), một dòng mới đảo ngược một chút.

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

bỏ qua đối số đầu tiên; chạy với -nr.


0

JavaScript (ES6), 105 97 byte

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):""

Đưa vào bản đồ các cặp m (số nguyên, chuỗi) và số nguyên k . Đi kèm với một dòng mới.

Đây là phiên bản không đệ quy (105 byte), nhưng không mang lại một dòng mới.

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

Hãy thử trực tuyến!


0

Java, 331 byte

Vì 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);}}}

Đây là lớp đầy đủ cần thiết cho việc này. Tuy nhiên, để chạy nó, bạn phải gọi phương thức xtrên một thể hiện hiện có của A. Để thử nghiệm, tôi đã cung cấp một lớp có thể chạy dòng lệnh bên dưới, một phần không được cung cấp.

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 byte

?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

Đưa đầu vào vào 3 dòng riêng biệt, dòng đầu tiên chứa số nguyên n, phần thứ hai chứa các int strbộ dữ liệu với các chuỗi được đặt trong dấu ngoặc vuông ( []) và dòng thứ ba bao gồm số nguyên k. Ví dụ: 3 2 Fizz 3 Buzz 5 Crackle 10có thể là đầu vào như:

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

Hãy thử trực tuyến!

Hoặc lấy đầu vào theo thứ tự khác:

dc , 118 byte

?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

Điều này nhận đầu vào theo một thứ tự khác, nhưng trên một dòng trong định dạng

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

Ví dụ: 3 2 Fizz 3 Buzz 5 Crackle 10sẽ là đầu vào như:

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.