今までの記事は
プ:ルキュを解く その1 http://www.iwai
プ:ルキュを解く その2 http://www.iwai
ルキュはルービックキューブの略。
解きたい問題:
ルービックキューブが揃った状態である。
東面を左回転90度、南面を左回転90度、
西面を左回転90度、北面を左回転90度
東面を左回転90度、南面を左回転90度、
西面を左回転90度、北面を左回転90度
・・・・・
とオペレーションを繰り返していくとき、いつまた揃った状態に戻るか?
■ネタ3-1:データを5×5×5で持つ
意味的にデータを5×5×5で持つことにした。3×3×3のルービックキューブの各正方形54枚に同じ色の立方体54個をボンドで貼り付けていった感じ。これで、54個の色立方体は3次元のインデックスで一意に表せる。5×5×5=125個のうちの54個が有効ということになる。
■ネタ3-2:3次元インデックスを統合id
3次元のインデックスを(x,y,z)→id=x*100+y*10+z
■ネタ3-3:統合idのままアクセスできるもとデータ
1000個(*1)の配列を作ってデータとする。int data[1000]; 統合idを使ってdata[統合id]と直接アクセスできる。1000個中54個のみ有効な値。
■ネタ3-4:アクセスは0~4で
ネタ3-2、ネタ3-3に関しては、-2~2アクセスでなく、0~4アクセスの方が調子がよさそう。
※ネタ2-3、ネタ2-5は、適用中止。
■ネタ3-5:各面回転装置からの見た目
各面回転装置からの見た目(つまりアクセス先)を実際に見てみてあってるかどうか確認。
東
100 110 120 130 140 ピンクは一段向こう側(100の位が1)。
101 011 021 031 141 灰色は意味なし部分。
102 012 022 032 142
103 013 023 033 143
104 114 124 134 144
西
340 330 320 310 300 東面と西面では南北(10の位)が逆になる。
341 431 421 411 301
342 432 422 412 302
343 433 423 413 303
344 334 324 314 304
南
010 110 210 310 410
011 101 201 301 411
012 102 202 302 412
013 103 203 303 413
014 114 214 314 414
北
430 330 230 130 030
431 341 241 141 031
432 342 242 142 032
433 343 243 143 033
434 334 234 134 034
〝その4〟に続く。
*1 記事を書いていてdataの配列の個数は1000も必要でなくて、445あれば大丈夫だということに気付いた。リベンジキューブ、プロフェッサーキューブ・・・、8×8×8キューブまでは解ける?