Fizz Buzz .. Crackle Pop! (Uogólniony buzz Fizz)

11

Wszyscy słyszeliśmy o starym problemie Fizz Buzz, ale co się stanie, gdy spróbujesz zastosować go z większą liczbą czynników? Fizz Buzz Crackle Pop!

Wyzwanie

Dodaj pełny program , który zajmuje całkowitą wejście n , a n krotki zawierający całkowitą i łańcuch, a następnie innej liczby całkowitej (> 1) k, w następujący sposób:

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

Możesz pobrać tę linię z wiersza poleceń lub STDIN.

Następnie, dla wszystkich liczb całkowitych od 1 do k, jeżeli jest podzielna przez żadną z INT1 , int2 ... INTN , wyjście wszystko odpowiada str ów w kolejności wprowadzania, a następnie linią. Jeśli tak nie jest, po prostu wypisz liczbę całkowitą, po której następuje nowa linia.

Na przykład z wejściem

3 2 Fizz 3 Buzz 5 Crackle 10

dostajemy

1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle

Ale z wejściem (zauważ zmianę zamówienia)

3 3 Buzz 2 Fizz 5 Crackle 10

dostajemy

1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle

Opcjonalny znak nowej linii jest dopuszczalny.

Najkrótszy kod w bajtach wygrywa.

Edycje:

Oczywiście przepraszam bardzo.

  • Wejścia z konsoli i STDIN, wszystko inne dostaje +5 bajtów (: c) w dowolnym miejscu
  • Proszę o pełne programy.
  • Załóżmy, że ciągi są niepuste
  • Brak gwarancji wyjątkowości int

Przykładowy program C ++ (ograniczony do 20, ponieważ jestem leniwy):

#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;
}
Thunda
źródło
5
Czy dane wejściowe muszą być tak sztywne? Czy możemy wziąć tablicę hashtable / słownik / tablicę / itp. w rodzimym formacie języka?
AdmBorkBork
2
Witamy również w PPCG!
AdmBorkBork,
1
Co jeśli dwie liczby są takie same? Czy zawsze będą unikalnymi dodatnimi liczbami całkowitymi?
David Conrad,
1
Jakie są gwarancje dotyczące liczb: czy wszystkie będą dodatnie, czy przynajmniej niezerowe? Co z ciągami: czy wszystkie są niepuste?
Peter Taylor,
1
Może być lepszy tytuł Generalized Fizz Buzz.
mbomb007

Odpowiedzi:

4

JavaScript (ES6), 90 bajtów

Generuje wiodącą nową linię.

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

Test

Arnauld
źródło
1

C ++, 194 bajty

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

Nie golfowany:

#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';
    }
}
David Conrad
źródło
1
Jeśli wynik x%atoi(a[i])nie może być ujemny, po prostu sprawdź x%atoi(a[i])<1.
Yytsi
@TuukkaX Dobra uwaga, dzięki.
David Conrad
1
Poza tym jestem pewien, że dasz radę p'\n':)
Yytsi,
1

PHP, 99 bajtów

Oparty na odpowiedzi FizzBuzz firmy primo : õto chr (245), nieco odwrócony nowy wiersz.

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

ignoruje pierwszy argument; biegać z -nr.

Tytus
źródło
0

JavaScript (ES6), 105 97 bajtów

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

Pobiera mapę par m (liczba całkowita, ciąg) i liczba całkowita k . Pochodzi z nowej linii końcowej.

Oto wersja nierekurencyjna (105 bajtów), ale nie zawiera końcowego nowego wiersza.

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

Wypróbuj online!

Yytsi
źródło
0

Java, 331 bajtów

Ponieważ 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);}}}

Jest to pełna klasa wymagana do tego. Jednak aby go uruchomić, musisz wywołać metodę xw istniejącej instancji A. Dla celów testowych podałem poniżej możliwą do uruchomienia klasę wiersza poleceń, która jest częściowo pozbawiona golfa.

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);
}
}
Addison Crump
źródło
0

ułożone w stos , 85 bajtów

args rev...2*nsgroup rev 2 chunk@s~>{!s[1#]map s[0#n|]map keep''join:[n]\¬if out}map

Wypróbuj online! Alternatywnie 86 bajtów:

args behead...@k sgroup 2 chunk@s k~>{!s[1#]map s[0#n|]map keep''join:[n]\¬if out}map
Conor O'Brien
źródło
0

dc , 121 bajtów

?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

Bierze dane wejściowe w 3 oddzielnych wierszach, pierwszy wiersz zawiera liczbę całkowitą n, drugi zawiera int strkrotki z ciągami zamkniętymi w nawiasach kwadratowych ( []), a trzeci wiersz składa się z liczby całkowitej k. Na przykład 3 2 Fizz 3 Buzz 5 Crackle 10można wprowadzić jako:

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

Wypróbuj online!

Lub przyjmowanie danych wejściowych w innej kolejności:

dc , 118 bajtów

?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

To pobiera dane wejściowe w innej kolejności, ale w jednym wierszu w formacie

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

Na przykład 3 2 Fizz 3 Buzz 5 Crackle 10można wprowadzić jako:

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

Wypróbuj online!

R. Kap
źródło