Fizz Buzz .. เสียงแตกป๊อป! (Fizz Buzz ทั่วไป)


11

เราทุกคนเคยได้ยินปัญหา ol Fizz Buzz แล้ว แต่จะเกิดอะไรขึ้นเมื่อคุณพยายามใช้กับปัจจัยอื่น ๆ Fizz Buzz Crackle Pop!

ความท้าทาย

เขียนโปรแกรมเต็มรูปแบบที่รับอินพุตจำนวนเต็มnจากนั้น n tuples ที่มีจำนวนเต็มและสตริงจากนั้นเป็นจำนวนเต็มอื่น (> 1) k ดังเช่น:

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

คุณสามารถใช้บรรทัดนี้จากบรรทัดคำสั่งหรือ STDIN

แล้วสำหรับจำนวนเต็มทั้งหมด 1 ถึง k ถ้ามันเป็นหารด้วยใด ๆ ของint1 , int2 ... intnผลผลิตทั้งหมดที่สอดคล้องSTR s เพื่อการป้อนข้อมูลตามด้วยการขึ้นบรรทัดใหม่ หากไม่ใช่ให้ส่งออกจำนวนเต็มตามด้วย newline

ตัวอย่างเช่นกับอินพุต

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)ที่ใดก็ได้
  • โปรดใช้โปรแกรมเต็ม
  • สมมติว่าสตริงที่ไม่ว่างเปล่าสำหรับ strs
  • ไม่มีการรับประกันความเฉพาะตัวของ ints

ตัวอย่างโปรแกรม 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
เกิดอะไรขึ้นถ้าตัวเลขสองตัวเหมือนกัน? พวกเขาจะเป็นจำนวนเต็มบวกเฉพาะเสมอหรือไม่
David Conrad

1
มีการรับประกันอะไรเกี่ยวกับตัวเลข: พวกเขาทั้งหมดจะเป็นบวกหรืออย่างน้อยก็ไม่ใช่ศูนย์? สิ่งที่เกี่ยวกับสตริง: พวกเขาทั้งหมดไม่ว่างเปล่า?
ปีเตอร์เทย์เลอร์

1
Generalized Fizz Buzzชื่ออาจจะดีกว่า
mbomb007

คำตอบ:



4

JavaScript (ES6), 90 ไบต์

สร้าง newline ชั้นนำ

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

Ungolfed:

#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 ดีมากขอบคุณ
David Conrad

1
นอกจากนี้ผมค่อนข้างแน่ใจว่าคุณสามารถทำp'\n':)
Yytsi

1

PHP, 99 ไบต์

ขึ้นอยู่กับคำตอบ FizzBuzz ของ Primo : õคือ 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

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

ใช้เวลาในแผนที่ของคู่ม. (จำนวนเต็มสตริง) และจำนวนเต็ม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 ไบต์

เพราะจาวา

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เพื่อประโยชน์ในการทดสอบฉันได้จัดเตรียมคลาส runnable ที่บรรทัดคำสั่งไว้ด้านล่าง

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 แยกบรรทัดบรรทัดแรกที่มีจำนวนเต็มnที่อยู่อาศัยที่สองint strtuples กับสตริงในวงเล็บเหลี่ยม ( []) 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.