Bem-vindo ao mundo do golfe de compiladores. Sua tarefa é escrever um programa que gere outro programa para reproduzir uma variante do FizzBuzz na especificação.
Seu compilador
Escreva um compilador que gere variantes do programa FizzBuzz para especificar. A especificação desta variante é expressa na forma de uma matriz de pares de número inteiro / sequência.
- A entrada pode estar em qualquer forma que seja conveniente para o seu idioma. (Meus exemplos usam n: xxxx, mas isso é apenas para fins ilustrativos.)
- Cada entrada inteira pode ser usada apenas uma vez por chamada do seu compilador.
- O número inteiro de cada par terá um valor de pelo menos um.
- A sequência de cada par será composta apenas de exatamente quatro letras ASCII.
- A saída deve ser um único programa completo que esteja em conformidade com as regras abaixo.
- A saída pode estar em qualquer forma conveniente, desde que seja um programa textual. (Portanto, não retorne expressões lambda.)
O comportamento é indefinido para entradas que não estão em conformidade com as regras acima.
Seu programa FizzBuzz gerado
O programa gerado pelo seu compilador terá um único número inteiro, n , como entrada. Ele produzirá uma sequência de números começando de um até e incluindo n , substituindo números por sequências de caracteres do FizzBuzz, quando necessário.
- O programa gerado deve estar no mesmo idioma que o compilador.
- A entrada n pode estar de qualquer forma conveniente para o seu idioma.
- n terá um valor de pelo menos um.
- Um número que é múltiplo de pelo menos um dos números inteiros de entrada no compilador deve ser substituído por todas as seqüências de caracteres emparelhadas com os números inteiros unidos.
- Um número que não deve ser substituído por uma string do FizzBuzz deve ser emitido em ASCII decimal.
Por exemplo;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
Pontuação
Sua entrada será pontuada pela duração dos programas que o seu compilador gera adicionados à duração do seu compilador. Execute seu compilador várias vezes com cada um dos seguintes parâmetros e adicione os comprimentos dos programas gerados juntamente com o comprimento do compilador para encontrar sua pontuação.
- Apenas conte. (Nenhuma entrada - o programa gerado contará de 1 a n sem substituições.)
- Apenas golfe. (1: Golf - O programa gerado produzirá "Golf" n vezes.)
- FizzBuzz clássico. (3: Fizz, 5: Buzz)
(Observe que seu compilador é necessário para gerar código para qualquer entrada válida, não apenas as listadas.)