コンパイラーゴルフの世界へようこそ。あなたの仕事は、仕様でFizzBuzzのバリアントを再生する別のプログラムを生成するプログラムを書くことです。
コンパイラー
FizzBuzzプログラムのバリアントを仕様に合わせて生成するコンパイラーを作成します。このバリアントの仕様は、整数/文字列のペアの配列の形式で表されます。
- 入力は、言語に都合のよい形式であればどのような形式でもかまいません。(私の例ではn:xxxxを使用していますが、これは単に説明のためです。)
- 各整数入力は、コンパイラーの呼び出しごとに1回のみ使用できます。
- 各ペアの整数は、少なくとも1つの値を持ちます。
- 各ペアの文字列は、ちょうど4つのASCII文字で構成されます。
- 出力は、以下の規則に準拠する単一の完全なプログラムでなければなりません。
- テキスト形式のプログラムである限り、出力は任意の便利な形式にすることができます。(したがって、ラムダ式を返しません。)
上記の規則に準拠していない入力の動作は未定義です。
生成されたFizzBuzzプログラム
コンパイラが生成するプログラムは、入力として単一の整数nを受け取ります。1からnまでの一連の数値を出力し、必要に応じて数値をFizzBuzz文字列に置き換えます。
- 生成されたプログラムは、コンパイラーと同じ言語である必要があります。
- 入力nは、言語に適した任意の形式にすることができます。
- nには少なくとも1つの値があります。
- コンパイラーへの整数入力の少なくとも1つの倍数である数値は、それらの整数を結合したすべてのストリングで置き換える必要があります。
- FizzBuzz文字列に置き換えられない数値は、10進数のASCIIで出力する必要があります。
例えば;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
得点
エントリーは、コンパイラーが生成するプログラムの長さをコンパイラーの長さに追加することによってスコアリングされます。以下の各パラメーターを使用してコンパイラーを何度も実行し、生成されたプログラムの長さとコンパイラーの長さを加算して、スコアを見つけます。
- ただカウント。(入力なし-生成されたプログラムは、置換なしで1からnまでカウントされます。)
- ただのゴルフ。(1:ゴルフ-生成されたプログラムは「ゴルフ」をn回出力します。)
- クラシックFizzBuzz。(3:フィズ、5:バズ)
(リストされているものだけでなく、有効な入力のコードを生成するためにコンパイラが必要なことに注意してください。)