Abbiamo tutti sentito parlare del vecchio problema di Fizz Buzz, ma cosa succede quando provi ad applicarlo con più fattori? Fizz Buzz Crackle Pop!
La sfida
Scrivi un programma completo che accetta un input intero n , quindi n tuple contenenti un numero intero e una stringa, quindi un altro numero intero (> 1) k, come tale:
n int1 str1 int2 str2 (...) intn strn k
Puoi prendere questa linea da riga di comando o STDIN.
Quindi, per tutti i numeri interi da 1 a k, se è divisibile per uno qualsiasi di int1 , int2 ... intn , genera tutte le str corrispondenti nell'ordine di input, seguito da una nuova riga. In caso contrario, emettere semplicemente il numero intero, seguito da una nuova riga.
Ad esempio, con input
3 2 Fizz 3 Buzz 5 Crackle 10
noi abbiamo
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Ma con input (nota la modifica dell'ordine)
3 3 Buzz 2 Fizz 5 Crackle 10
noi abbiamo
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
La nuova riga finale facoltativa è accettabile.
Vince il codice più breve in byte.
modifiche:
Ovviamente mi sono perso molto, scusa.
- Input da
console e STDIN, qualsiasi altra cosa ottiene +5 byte (: c)ovunque - Programmi completi per favore.
- Supponiamo stringhe non vuote per le stringhe
- Nessuna garanzia per l'unicità degli ints
Esempio di programma C ++ (limitato a 20 perché sono pigro):
#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;
}
Generalized Fizz Buzz.