Ласкаво просимо у світ гольфу-компілятора. Ваше завдання - написати програму, яка генерує іншу програму, щоб відтворити варіант 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: Гольф - створена програма виводить "Гольф" n разів.)
- Класичний FizzBuzz. (3: Fizz, 5: Buzz)
(Зверніть увагу, що ваш компілятор повинен генерувати код для будь-якого дійсного вводу, не тільки зазначеного.)