通常、コードを手動で記述するのは面倒です。あなたの課題は、ASCIIテキストをCubicallyソースコードに変換することです。
キュビック
これは、Cubicallyの簡単な概要です。リポジトリには、より完全なガイドと詳細を持っています。
Cubicallyは、私が少し前に書いた、使用するのが苦痛になるように設計されたエゾランです。2つのメモリ、3x3x3ルービックキューブと「メモ帳」と呼ばれるレジスタが含まれています。
記憶
内部ルービックキューブは次のように初期化されます。
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
右面を時計回りに90°回転すると、メモリキューブは次のようになります。
002
002
002
111225333044
111225333044
111225333044
554
554
554
コマンド
非整数文字はデフォルトのコマンドを設定します。デフォルトのコマンドが再度設定される前の各整数に対して、その整数でコマンドが実行されます。たとえば、5でx524y312
コマンドx
を実行し、2でコマンドy
を実行し、4でコマンドを実行し、3でコマンドを実行し、1でコマンドを実行し、2でコマンドを実行します。
コマンドが使用する整数は、フェイスインデックスを表します。したがって、UP(0インデックス)面でx0
実行x
します。x1
行うであろうx
ようにLEFT(1-インデックス付き)面上に、そして。
でコマンドを6
実行すると、メモ帳の値に対してそのコマンドが実行されます。6を超える整数でコマンドを実行すると、エラーが発生します。
コマンドの例を次に示します。
R1
-内部の立方体が上の2番目の例のようになるように、右の面を時計回りに90°回転R11
-右面を時計回りに90°に2回回します。R2
+0
-UPフェイスのすべての値をメモ帳に追加します+000
-UPフェイスのすべての値をメモ帳に3回追加します@6
-存在しない6番目のインデックス付きの面(メモリ)を文字として印刷する%4
-BACKフェースのすべての値の合計を整数として出力します
チャレンジ
入力としてASCIIテキストを受け取り、出力としてCubicallyプログラムを印刷します。
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
ルール
- プログラムには、100個のテストケースの翻訳を含む辞書が含まれていない場合があります。
- プログラムは180秒未満で終了する必要があります(数週間かかるブルートフォースプログラムはありません)。
- プログラムは、180秒未満で終了する有効なCubicallyコードを出力する必要があります。
- テストドライバーをいじりたくない限り、プログラムは標準入力を介して入力を受け取ります。
- プログラムは、実行時にプログラムの入力のみを生成するコードをCubicallyで出力する必要があります。ಠ_ಠ
得点
擬似ランダム長の100の擬似ランダム文字列でプログラムをテストします。(これを行うためのbashスクリプトが提供されています。)以下にスコアを付ける方法を示します。
- 出力プログラムの長さをoとします。
- 入力文字列の長さをlとします。
- 変数rをo / lの結果とします。
- すべてのrの平均を求めます:(r 1 + r 2 + r ... + r 100)/ 100。
このスクリプトでテストします。指示に従って変更する必要があります。プログラムは、出力が有効なCubicallyコードであるかどうかをチェックしないことに注意してください。スクリプトが機能しない場合は、私がお手伝いできます。Cubicallyチャットルームで私にPingしてください。
@6
-存在しない6番目のインデックス付き顔(メモ帳)の合計を文字として印刷する」の方が正確でしょうか?である%4
にも合計?されている+
コマンドは、和顔そして...すべての値かにそれを追加しますか?
@6
/ %6
は、メモ帳の値を文字/整数として直接印刷します。@x
/ %x
(xは既存の面)x
-indexed面にすべての値を追加し、合計を文字/整数として出力します。+
指定された面のすべての値をレジスタに追加します。