Bienvenido al mundo del compilador de golf. Su tarea es escribir un programa que genere otro programa para reproducir una variante de FizzBuzz en las especificaciones.
Su compilador
Escriba un compilador que genere variantes del programa FizzBuzz según las especificaciones. La especificación de esta variante se expresa en forma de una matriz de pares enteros / cadenas.
- La entrada puede ser de cualquier forma que sea conveniente para su idioma. (Mis ejemplos usan n: xxxx, pero esto es solo para fines ilustrativos).
- Cada entrada entera solo puede usarse una vez por invocación de su compilador.
- El entero de cada par tendrá un valor de al menos uno.
- La cadena de cada par estará compuesta de solo cuatro letras ASCII exactamente.
- El resultado debe ser un solo programa completo que cumpla con las siguientes reglas.
- La salida puede estar en cualquier forma conveniente, siempre que sea un programa textual. (Entonces no hay expresiones lambda que regresen).
El comportamiento no está definido para las entradas que no se ajustan a las reglas anteriores.
Su programa generado de FizzBuzz
El programa generado por su compilador tomará un solo entero, n , como entrada. Producirá una secuencia de números comenzando desde uno hasta e incluyendo n , reemplazando los números con cadenas FizzBuzz cuando sea necesario.
- El programa generado debe estar en el mismo idioma que el compilador.
- La entrada n puede estar en cualquier forma conveniente para su idioma.
- n tendrá un valor de al menos uno.
- Un número que es un múltiplo de al menos uno de los enteros ingresados al compilador debe ser reemplazado por todas las cadenas emparejadas con esos enteros unidos.
- Un número que no debe ser reemplazado por una cadena FizzBuzz debe enviarse en ASCII decimal.
Por ejemplo;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
Puntuación
Su entrada se puntuará según la duración de los programas que genera su compilador agregados a la duración de su compilador. Ejecute su compilador muchas veces con cada uno de los siguientes parámetros y agregue las longitudes de los programas generados junto con la longitud del compilador para encontrar su puntaje.
- Solo cuenta. (Sin entradas: el programa generado contará de 1 a n sin reemplazos).
- Solo golf. (1: Golf: el programa generado generará "Golf" n veces).
- FizzBuzz clásico. (3: Fizz, 5: Zumbido)
(Tenga en cuenta que se requiere que su compilador genere código para cualquier entrada válida, no solo estas enumeradas).