BLOG

展開ルービックキューブをScratchでプログラミングしてみて思ったこと

2019/08/17
ロゴ

「展開ルービックキューブをScratchでプログラミングしてみて思ったこと」

 

先日、SNSでルービックキューブをレゴマインドストームのロボットが全面そろえる動画を見ました。初めて見たときは驚きましたが、今では、こんな時代になったか…それにしても見事だなあぐらいに思っていたのですが、Scratchでルービックキューブの展開図を作ったらどんなものだろう…と思って、今朝2~3時間で作ってみました。下向き矢印を押すと青面を中心に左に回転します。右向き矢印を押すと三行目を右方向に移動します。

 

 

私がプログラムを作成するときは、ほぼ完成までの動きを頭の中でイメージします。今回のプログラムで最も重要視したのは、展開図の形です。結果的に最もシンプルなものになりました。この展開図を選択した理由は、見た目の整い加減、操作性、プログラムのしやすさです。UI(ユーザーインターフェース)の部分は、簡潔性を重視し、こちらも結果的に、レゴのロボットがルービックキューブを動かすようなUIになりました。

 

見た目の動きで言えば、0.5秒でキューブを移動させるのですが、できあがったら何となく美しく動いてくれたというもので、意図した美しさではありません。移動は、座標計算です。高校数学で、三角関数を使った座標の回転を思い出せれば、プログラムは簡単に書けます。できあがったと思ったあとで気付いたのは、底面の移動と共に生じる回転です。ルービックキューブの底面を回転させれば、当然のことなのですが、平面上に実現した際には、それを自分でプログラムしなければなりません。

 

察しの良い人は、2方向の回転と回転数(0~3)だけで、ルービックキューブの問題を簡単に表現できると思ったはずです。この、方向の回転と回転数を適当な数並べる、すなわちそのような動かし方をすると、ルービックキューブの面はバラバラになり、その状態から逆の方向に動かせば、元に戻ります。ルービックキューブをレゴロボットが全面そろえる動画ですが、実は、プログラム的に逆回しにしているだけではないかと個人的には疑い始めました。

 

私が作ったScratchのプログラムを動かしてみてもらえばわかるのですが、元に戻すのはそう簡単ではありません。そう簡単ではない、というところから、実は暗号を思いつきました。バラバラにした手順の逆の手順で元に戻りますが、バラバラにした手順を例えば、回転の方向ごとに2つに分ければ、復号の鍵が2つになり、より暗号は複雑化します。

 

問題は、復号の鍵がなかったとき、元に戻すのはどれほど簡単ではないかですが、今の私にはわかりません。しかし、ルービックキューブを見ていて思ったもう一つのことは、細胞分裂です。簡単に元に戻せないから、若返りは難しい。生物、生命的には正しい気がします。

 

※ 8月19日に未実装の回転方向を実装し、操作方法を以下のように変更しました。
左向き矢印を押すと初期状態青面を中心に左に回転します。
右向き矢印を押すと三行目を右方向に移動します。
下向き矢印を押すと縦下方に回転します。

 

考える力をみがく、プログラミング教室の先生が書いた本