Todos hemos oído hablar del viejo problema de Fizz Buzz, pero ¿qué sucede cuando intentas aplicarlo con más factores? Fizz Buzz Crackle Pop!
El reto
Escriba un programa completo que tome una entrada entera n , luego n tuplas que contengan un entero y una cadena, luego otro entero (> 1) k, como tal:
n int1 str1 int2 str2 (...) intn strn k
Puede tomar esta línea desde la línea de comando o STDIN.
Entonces, para todos los números enteros 1 a k, si es divisible por cualquiera de INT1 , INT2 ... INTN , la salida de todo correspondiente str s en el orden de entrada, seguido de una nueva línea. Si no es así, simplemente genera el número entero, seguido de una nueva línea.
Por ejemplo, con entrada
3 2 Fizz 3 Buzz 5 Crackle 10
obtenemos
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Pero con entrada (observe el cambio de orden)
3 3 Buzz 2 Fizz 5 Crackle 10
obtenemos
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
Nueva línea final opcional es aceptable.
El código más corto en bytes gana.
Ediciones:
Obviamente me he perdido mucho, lo siento.
- Entradas de la
consola y STDIN, cualquier otra cosa obtiene +5 bytes (: c) encualquier lugar - Programas completos por favor.
- Asumir cadenas no vacías para strs
- No hay garantías para la unicidad de las entradas.
Programa de muestra C ++ (limitado a 20 porque soy vago):
#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.