ルービックキューブに関しての簡単な問題1個をプログラムで解いてみようと思っている。今回はそれの準備、問題の内容は次回以降に提示予定。タイトルに書いてある〝ルキュ〟はルービックキューブの略。
とりあえず、1層を回すシクミを考える。
ここで、アイデアをひとつ。「立方体9個が回る」とするのではなくて「正方形が21枚が回る」としてみること。
利点:立方体として扱うと位置の他に方向の情報が必要になるが、単色・絵なしの正方形ならば、その必要がない。
「単純化されるのでいいじゃん」と思っている。立方体の向きをどうやって表すかという問題から解放される。実際に作っていく過程や全体的に出来たときに吟味。
デバッグ用にはこんな感じに描いてみたい。従来は3×3とその横の面3×4個の部分的な展開図。
■■■■■
■□□□■
■□□□■
■□□□■
■■■■■
アイデアをもうひとつ。その表示通り、5×5の配列を使う。
仮に正方形1個をSint32(32ビット符号付整数)で表すと、90度回転の関数はこんな感じ。XとYを取り替えて、片方の符号が反転する。
試してみる。 disp(s);
{
Sint32 s[5][5];
Sint32 d[5][5];
Sint32 num=0;
for(Sint32 y=0;y<5;y++){
for(Sint32 x=0;x<5;x++){
s[x][y]=num;
num++;
}
}
rot90(d,s);
disp(d);
}
これでこの件は完了。