フレーバーテキスト
スタックベースのesolang Underloadは、関数型プログラミングといくつかの興味深い結びつきを持っています。それらの1つは、数値データ型の処理です。ラムダ計算のように、アクションをN回実行する関数によって自然数Nを表します。
物事を簡単にするために、Underloadコマンドの次のサブセットのみを考慮します。
:
-このコマンドは、スタックの一番上のアイテムを複製します。*
- このコマンドは、単一の項目にスタックの一番上の二つのアイテムを連結します。
私たちは、定義過少数字Nを文字列として:
と*
、実行した、スタックの一番上の項目を消費し、そのアイテムが一緒に連結さのn個のコピーを生成します。いくつかの例:
- アンダーロードの数字0、-1、1 / 2、πはありません。
- 空の文字列
は、スタックに手を付けないため、Underloadの数字1です。
:*
それはトップ・アイテムを複製し、次に単一の項目にまとめ、それらの2つのコピーを連結しているため、不足負荷数字2:(A):*
=(A)(A)*
=(AA)
。::**
アンダーロードの数字3です。(A)::**
=(A)(A):**
=(A)(AA)*
=(AAA)
です。:::***
アンダーロードの数字4です。:*:*
また、アンダーロード数字4:(A):*:*
=(AA):*
=(AA)(AA)*
=(AAAA)
です。
一般に、M
およびN
がアンダーロードの数字MおよびNである場合:N*
、数字N + 1でありMN
、数字M×N であることがわかります。
チャレンジ
あなたの仕事は、文字列としての入力に対してアンダーロード数値の最短表現を生成する最短プログラム(STDINで入力を取得する)または関数(引数で入力を取得する)を記述することです。つまり、入力が正の自然数N> 1である場合、文字の長さが他のすべてのアンダーロード数字N以下であるアンダーロード数字Nを生成する必要があります。
サンプルの入力と出力:( "Input- OUTPUT
。")
- 1-
。
- 2-
:*
。 - 5-
::*:**
(2×2 + 1)。 - 7-
::*::***
(2×3 + 1)または:::**:**
(3×2 + 1)。 - 33-
::*:*:*:*:**
(2×2×2×2×2 + 1)。 - 49-
::*:*:*:*::***
(16×3 + 1、長さ14)ではなく::*::***::*::***
(7×7、長さ16)。
入力が正の自然数でない場合、自由にエラーを返したり、未定義の動作を生成したり、終了することさえできません。提出物の答えを見つける方法の説明を歓迎します。
標準的な抜け穴の制限が適用されます。余分な入力、Webリクエスト、出力/戻り値は、:
and *
やなどの無限のランダムストリームではなく、正確に答えである必要があります。
x
は2*A117498(x)
、A117498が加算チェーンを見つけるためのバイナリとファクターメソッドの最適な組み合わせを与える場所です。