バックグラウンド
多くの難解なプログラミング言語にはリテラルに数値が組み込まれていないため、実行時に計算する必要があります。これらの多くの場合、数値表現は非常に興味深いものになります。Underloadの数値の表現については、すでに課題がありました。この課題は、モジュラーSNUSPで数値を表現することです。(この課題を完了するためにSNUSPを学ぶ必要はないことに注意してください。必要な情報はすべて仕様に含まれていますが、背景が興味深いかもしれません。)
タスク
この課題の目的のために、モジュラーSNUSP数は、文字のうちに形成された文字列である@、+と=最後の文字があることを除いて、#最後から二番目の文字がでなければならず、ということ+か=(それがすることはできません@)。例えば、有効な数字が含まれ@+#、==#と@@+@=#。無効な数字の例としては+=、@@#、と+?+#。
Modular SNUSP番号の値は、次のように再帰的に計算されます。
#値は0です(これが基本ケースです)。- 数値の形式
=xが任意の文字列xである場合、その値はの値と同じですx。 - 数値の形式がの場合、
+x任意の文字列についてx、その値はの値にx1を加えたものに等しくなります。 - 数値の形式が
@cx1つの文字cと文字列のx場合、その値はの値にの値をx足したものに等しくなりますcx。
この課題では、非負の整数を入力として受け取り、入力と等しい値を持つ最短のModular SNUSP番号である文字列を出力するプログラムを作成する必要があります。
明確化
- 同じ値を持つ複数の文字列が存在することは完全に可能です。特に、一部の整数については、その値を持つ最短のModular SNUSP番号が同点になります。そのような場合、同点で関係する数値を出力できます。
- 数を見つけるために使用するアルゴリズムに制限はありません。たとえば、文字列を総当たりで評価することは合法的な戦術ですが、検索スペースを減らすために賢いことをしています。
- PPCGでの通常のように、提出物は完全なプログラムまたは関数のいずれかです(言語でより簡潔な方を選択します)。
- これは入力形式と出力形式の処理に関する問題ではないので、非負の整数を入力して文字列を出力するための適切な手段を使用できます。metaに関する完全なガイドがありますが、最も一般的に使用される有効なメソッドには、関数の引数/戻り値、コマンドライン引数、および標準入力/標準出力が含まれます。
テストケース
以下は、最初の数の最も短い表現です。
- 0:
# - 1:
+# - 2:
++# - 3:
+++#または@++# - 4:
++++#または+@++#または@=++# - 5:
@+++#または@@++# - 6:
+@+++#または+@@++#または@=+++#または@=@++#または@@=++# - 7:
@++++#または@+@++# - 8:
@@+++#または@@@++# - 9:
+@@+++#または+@@@++#または@+++++#または@++@++#または@+@=++#または@@=+++#または@@=@++# - 10:
@=@+++#または@=@@++#または@@@=++#(考えられるすべての回答に含まれるため、これは確認するのにかなり重要なテストケースです=) - 11:
@+@+++#または@+@@++#または@@++++#または@@+@++# - 12:
+@+@+++#or+@+@@++#または+@@++++#or+@@+@++#または@=+@+++#or@=+@@++#または@=@=+++#or@=@=@++#または@=@@=++#or@@=++++#または@@=+@++#orまたは@@=@=++# - 13:
@@@+++#または@@@@++# - 14:
+@@@+++#または+@@@@++#または@=@++++#または@=@+@++#または@@+++++#または@@++@++#または@@+@=++# - 15:
@+@++++#または@+@+@++#または@@=@+++#または@@=@@++#または@@@=+++#または@@@=@++#
大きなテストケースとして、入力から出力40があるべきである@@@=@@+++#、@@@=@@@++#、@@@@=@+++#、または@@@@=@@++#。
勝利条件
コードゴルフの挑戦、勝者はバイト単位で測定、最短のエントリです。
=として最適に発生し@=ますか?