Добро пожаловать в мир компилятора гольфа. Ваша задача - написать программу, которая генерирует другую программу для воспроизведения варианта FizzBuzz по спецификации.
Ваш компилятор
Напишите компилятор, который генерирует варианты программы FizzBuzz для спецификации. Спецификация этого варианта выражается в виде массива пар целое число / строка.
- Ввод может быть в любой форме, удобной для вашего языка. (Мои примеры используют n: xxxx, но это только для иллюстративных целей.)
- Каждый целочисленный ввод может использоваться только один раз за вызов вашего компилятора.
- Целое число каждой пары будет иметь значение не менее одного.
- Строка каждой пары будет состоять только из четырех букв ASCII.
- Выходные данные должны быть единой законченной программой, которая соответствует приведенным ниже правилам.
- Вывод может быть в любой удобной форме, если это текстовая программа. (Так что нет возврата лямбда-выражений.)
Поведение не определено для входных данных, не соответствующих вышеуказанным правилам.
Ваша сгенерированная программа FizzBuzz
Программа, сгенерированная вашим компилятором, примет одно целое число n в качестве входных данных. Он выведет последовательность чисел, начиная с одного до n включительно , заменяя числа строками FizzBuzz при необходимости.
- Сгенерированная программа должна быть на том же языке, что и компилятор.
- Ввод n может быть в любой форме, удобной для вашего языка.
- n будет иметь значение по крайней мере один.
- Число, кратное хотя бы одному из целых чисел, введенных в компилятор, должно быть заменено всеми строками в паре с этими целыми числами, соединенными вместе.
- Число, которое не должно заменяться строкой FizzBuzz, должно быть выведено в десятичном формате ASCII.
Например;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
счет
Ваша запись будет оцениваться по длине программ, которые генерирует ваш компилятор, добавленных к длине вашего компилятора. Запустите ваш компилятор много раз с каждым из следующих параметров и добавьте длины сгенерированных программ вместе с длиной компилятора, чтобы найти ваш счет.
- Просто посчитай. (Нет входных данных - сгенерированная программа будет считать от 1 до n без замен.)
- Просто Гольф. (1: Golf - сгенерированная программа выдаст «Golf» n раз.)
- Классический FizzBuzz. (3: Fizz, 5: Buzz)
(Обратите внимание, что ваш компилятор должен генерировать код для любого допустимого ввода, а не только перечисленных.)