欢迎来到编译器高尔夫的世界。您的任务是编写一个程序,该程序会生成另一个程序,以按规范播放FizzBuzz的变体。
您的编译器
编写一个编译器,以生成符合规范的FizzBuzz程序。此变体的规范以整数/字符串对数组的形式表示。
- 输入可以采用任何方便您的语言的形式。(我的示例使用n:xxxx,但这只是出于说明目的。)
- 每次调用编译器时,每个整数输入只能使用一次。
- 每对的整数将具有至少一个值。
- 每对字符串仅由四个ASCII字母组成。
- 输出必须是符合以下规则的单个完整程序。
- 输出可以是任何方便的形式,只要它是文本程序即可。(因此,没有返回的lambda表达式。)
对于不符合上述规则的输入,行为未定义。
您生成的FizzBuzz程序
编译器生成的程序将使用单个整数n作为输入。它将输出一个从1到n的数字序列,并在需要时用FizzBuzz字符串替换数字。
- 生成的程序必须使用与编译器相同的语言。
- 输入n可以采用适合您的语言的任何形式。
- n的值至少为1。
- 输入编译器的至少一个整数的倍数的数字必须替换为所有与这些整数结合在一起的字符串。
- 不能用FizzBuzz字符串替换的数字必须以十进制ASCII输出。
例如;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
计分
您的条目将根据编译器生成的程序的长度加上编译器的长度进行评分。使用以下每个参数多次运行编译器,然后将生成的程序的长度与编译器的长度相加,以得出分数。
- 只是计数。(无输入-生成的程序将在没有替换的情况下从1到n计数。)
- 只是高尔夫。(1:Golf-生成的程序将输出n次“ Golf” 。)
- 经典FizzBuzz。(3:嘶嘶声,5:嗡嗡声)
(请注意,编译器需要为任何有效输入生成代码,而不仅仅是列出的这些。)