RSS

 

RSS


 前回提示した問題は、パズル仲間のえぢナガタ提供のもの。彼の作品はペンシルケースTriSheepなど。

 プログラムの全体の構造をまとめてみるとこんな感じ。

void main()
{
  回転装置  東、西、南、北、天、地;

    回転装置6個を初期化(東、西、南、北、天、地);
    本体を初期化(東、西、南、北、天、地);

    int count=0;
    for(;;){
   回す(東);  count++;
   if(判定(東、西、南、北、天、地)){ break; }
   回す(南);  count++;
   if(判定(東、西、南、北、天、地)){ break; }
   回す(西);  count++;
   if(判定(東、西、南、北、天、地)){ break; }
   回す(北);  count++;
   if(判定(東、西、南、北、天、地)){ break; }
    }
    結果表示(count);
}

 最初、5040オペレーションという答えをはじき出した。デバッグもそこそこに、えぢナガタに結果を打診してみると、「それはセンターキューブの方向まで考えた場合の答え」だとの指摘が・・・。

見直してみる。


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

 「灰色の部分は意味なし」と書きながらそこまで判定に入れていたのがまずかった。その点を直したら、めでたく1260オペレーションと答えが出た。それにしても長手数。

 せっかく、仕組みができたので、ルービックキューブに関する別の問題を解いてみる予定。


  • コメント (0)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/439