Cubicallyは、問題の非常に特定のサブセットに対してゴルフのような短い答えを作成できる、かなり新しい難解な言語です。3x3ルービックキューブの形でメモリを格納するという点で独特であり、計算はほとんどの言語よりもはるかに簡単です。Cubicallyでは、プログラマーは面に格納された値を操作するために内部の立方体を回転させ、それらの値を計算に使用する必要があります。計算は、「ノートパッド」と呼ばれる架空の面に保存されている単一の32ビット整数で実行されます。さらに、Cubicallyはユーザー入力を要求し、それを単一の整数値のみで構成される入力バッファーに格納できます。
キューブ
立方体の面は、U p、D own、L eft、R ight、F ront、およびB ackです。
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
プログラムが開始すると、その面の各正方形がその面の0ベースのインデックスと等しくなるようにキューブが初期化されます。
000
000
000
111222333444
111222333444
111222333444
555
555
555
面が回転するときは常に、常に時計回りに回転します。
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
面の値は、その面のすべての正方形の合計として定義されます。たとえば、上のキューブでは、faceの値0
は3です。
構文
コマンドを実行するには、まずコマンドをメモリにロードし、次に引数をコマンドに渡してコマンドを実行します。たとえば、コマンドF1
はコマンドF
をメモリにロードし、引数を指定して呼び出します1
。さらに、F13
コマンドF
をメモリにロード1
してから、引数を指定して呼び出し、次に引数を指定して呼び出します3
。数字以外の文字はコマンドとして扱われ、数字は引数として扱われます。
あなたのタスク
あなたの仕事は、選択した言語でCubicallyの内部メモリキューブを実装することです。コードは、言語の非常に小さなサブセットを実行できる必要があります。
コマンド
R
-立方体の右側面を指定された回数時計回りに回転させます。L
-立方体の左面を指定された回数時計回りに回転させます。U
-立方体の上面を指定された回数時計回りに回転させます。D
-立方体の底面を指定された回数時計回りに回転させます。F
-立方体の前面を指定された回数時計回りに回転させます。B
-立方体の背面を指定された回数時計回りに回転させます。%
-指定された面の値を出力します。面の値は、その面のすべての正方形の合計として定義されます。
ルール
- この課題が投稿された日付の前または後に作成された任意の言語を使用して、この課題を解決できるプログラムまたは関数を作成できます。
- 入力は、STDINを介して、文字列として、または文字配列として渡されます(選択、指定してください)。
- 出力はSTDOUTに渡すか、関数の出力として渡す必要があり、整数、数字のみを含む文字列、または数字の配列のいずれかでなければなりません。使用言語で末尾の改行を出力する必要がある場合は、そうすることができます。
- 入力は常に次の形式になります
([UDLRFB]\d*)*%[0-5]
。入力に空白文字は含まれません。 - の入力
%
は常に0ベースのインデックスを使用します。
これはcode-golfなので、バイト単位の最短の回答が優先されます。
テストケース
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
その他のテストケースについては、TIOインタープリターを確認してください。TIOが機能しない場合は、代わりにLuaインタープリターを使用できます。
4
間にある間R
で倍数を見逃しましたか?D
RD3F2%5 -> 30