この挑戦は、私の最初の難解な言語、バックハンドを祝うために作成されました!
バックハンドは、非線形ポインターフローを備えた1次元言語です。ポインターは一度に3ステップ移動し、3命令ごとにのみ実行します。
プログラム1..1..+..O..@
は、終了する前に1 + 1を追加し、2を出力します。中間命令はスキップされるため1<>1()+{}O[]@
、まったく同じプログラムです。
ポインタがテープの終わりから離れようとするとき、その代わりに方向を逆にして逆方向にステップするので1.@1.O+.
、同じプログラムも同様です。終了命令は1回しかカウントされないことに注意してください。これにより、次のようなほとんどの線形プログラムを圧縮できます。1O+1@
ここでの課題は、文字列をとるプログラムまたは関数を記述し、プログラムがバックハンドのように解釈された場合に実行される命令を出力することです(実際のバックハンド命令を処理する必要はありません)。ポインターが文字列の最後の文字に到達するまでのみ出力します(この時点で、実行は通常逆方向になります)。
しかし、待ってください、それだけではありません!プログラム自体がこの方法で解釈されると、結果のコードは以下のいずれかを出力するはずです。
(Mostly) works
Turing complete
'Recreational'
(引用符はまたはのいずれ'
か"
ですが、両方ではありません)Perfectly okay
Only a few bugs
たとえば、ソースコードがのcode 2 backhand
場合、プログラムce cankb od2ahd
はこれらのフレーズのいずれかを出力する必要があります。
テストケース:
"1 1 + O @" -> "11+O@"
"1O+1@" -> "11+O@"
"HoreWll dlo!" -> "Hello World!"
"abcdefghijklmnopqrstuvwxyz" -> "adgjmpsvyxurolifcbehknqtwz"
"0123456789" -> "0369" (not "0369630369")
"@" -> "@"
"io" -> "io" (Cat program in Backhand)
"!?O" -> "!?O" (Outputs random bits forever in Backhand)
"---!---!" -> "-!-----!"
そして、もちろん、バックハンドで書かれたリファレンスプログラム(これは少しバグが多いかもしれません。
ルール。
- 標準的な抜け穴は禁止されています
- 最初のプログラムの入力は、(バイトであるのみ印刷可能なASCIIや改行が含まれています
0x20
-0x7E
も0x0Aのように) - 2番目のプログラムを最初のプログラムからバイト単位で変換するか、UTF-8文字で変換するかを選択できます。
- 2番目のプログラム:
- 大文字と小文字は区別されないため、必要に
pErFectLy OKay
応じて出力することができます。 - 任意の量の末尾/先頭の空白(改行、タブ、スペース)も使用できます。
- 2番目のプログラムは最初のプログラムと同じ言語である必要がありますが、必ずしも同じ形式(プログラム/機能)である必要はありません
- 余分なフレーズに関するコメントからの提案を含めることができます(短すぎない限り)
- 大文字と小文字は区別されないため、必要に
- これはcode-golfであるため、あなたの目的はあなたの言語の最短の回答を得ることです!
- 2週間以内に、最短バックハンド回答に200バウンティを授与します。
"---!---!"
または最後の文字が