プレリュード、120順列、2045 2035バイト
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+9409-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-5809-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-99+58992++96+99+09-9-9-3- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+993+09-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-49197+09-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-595+96+09-9-9-9-9-9-9-1-99+58992++96+95+109-9-9-9-9-9-9-1-41809-9-9-9-9-9-9-1-99+5992++991++9991++09-9-9-9-9-9-9-1-991++909-9-6- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4- (9+9+9+9+9+9+9+9+9+9+6+!)
これにより、結局、PreludeとCJamには子供が必要だと確信しました。Preludeの非常に限定された命令セットがなければ、この提出は実際には非常に競争力があり、CJamに勝るものさえないでしょう。
基本的な考え方は次のとおりです
"push line 4" print
"push line 1"print
"push line 3" print
"push line 2" print
"push line 5" print
Preludeでは、各ラインは独自のスタックを持つ独自の「ボイス」であり、これらのボイスは並行して実行されます。つまり、完全なプログラムでは、各行が文字列を個別に構成し、最後に出力します。しかし、printステートメントのオフセットのため、実行は上から下ではなく左から右であるため、行の順序は出力の順序にはまったく関係ありません。
さて、なぜ行がそれほど長いのですか?Preludeはスタックに数値のみを保存します。さらに、一度に1桁の数値しかプッシュできないため、加算と減算からより大きな数値を構成する必要があります(乗算も他の算術もありません)。したがって、コードの最大の部分は、適切な文字コードを計算してプッシュすることです。これを少し短くするために、でオフセットしました96
。最後に、印刷するために、スタックが空になる(つまりa 0
が検出される)までループし、各数値に96を追加して印刷します。
文字列は最後から最初の文字まで印刷されるため、文字列が逆にプッシュされることに注意してください。
これは、PythonインタプリタがNUMERIC_OUTPUT = False
(仕様がI / Oを定義する方法で)使用することを前提としています。
次のCJamコードを使用して文字列構成を生成しました。
"Brother bought a coconut, he bought it for a dime
"W%{i96-_0<{zLa*9/:,'-*'-+0\+}{La*9/:,_,'+*W<}?}%
最後に、楽しみのために、Preludeに文字列の概念がある場合、これは本当に短いと思うのはなぜですか。
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emid a rof ti thguob eh ,tunococ a thguob rehtorB"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emil a rof ti diap ehs ,eno rehtona dah retsis siH"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
これで、印刷ステートメント!
は既に正しい順序になっているので、オフセットする必要さえありません。いつかこれを実装することにします。