Clockのeasy 7-simulについて気づいたことの書き散らし
お久しぶりです。Ramiです。
もう二度とこのブログが動くことはないと思ってました。
今回の種目はクロックです。
"easy 7-simul" という解法に関してちょっと驚いた発見があったので、雑ではありますが書き残しておきます。
easy 7-simulを知らない方はいかのおすしさん(Twitter: @cube_224)のブログを先に見てください。
この後の話のベースになります。
非常にわかりやすく書かれているのですぐ戻ってこれるかと思います。
さて、一気に本題に入ります。
easy 7-simulをちょっと練習してみると、
step5(ピンがULDL)の右ダイヤルを幾つ回すのかの判断が難しい、ということに気づくと思います。
左ダイヤルでDエッジをRエッジに合わせる際にDLコーナーが動き、
DLコーナーが動いた後の針の向きに右ダイヤルでURコーナーをに合わせるという流れになっているため、
そもそも"simul"と言っているのに同時処理がほぼできないという問題があります。
...何とかできないものでしょうか。
「もしこの右ダイヤルを回す数が先にわかっていれば解決するのになあ」
と筋肉ムキムキのミシガン州に住んでいそうな少年はバスの中で考え、
試しに問題の右ダイヤルを回す前のDLコーナーとURコーナーの状態から回す数を計算してみることにしました。
まず、右ダイヤルを回す前のDLコーナーを*DL*、
同様にURコーナーを*UR*とします。
それぞれの針の向きは以下のように書き表すことができます。
*DL* = DL + {step1(L)} + {step2(L)} + {step3(L)} + {step4(L)} + {step5(L)}
*UR* = UR + {step1(R)} + {step2(R)} + {step3(L)} + {step4(R)}
※1 step1(L) → step1の左ダイヤルを回す数
※2 DL→スクランブル後のDLコーナーの針の向き
※3 ここでの表裏18個の時計の針の向きは
表:

裏(表からx2をした状態):

と表記しています。
それぞれのstepで回す数を代入すると以下のようになります。
*DL* = DL+{c-d}+{d-r}+{step3(L)}+{(D-R)+(ul-l)}+{R-D} = DL+c-r+(ul-l)+{step3(L)}
*UR* = UR+{(dr-r)+(U-L)}+{step3(L)}+{c-u} = UR+(dr-r)+(c-u)+{step3(L)}
最後に*DL* - *UR* をすると、
*DL*-*UR* = DL-UR+u+ul-dr-l
クロックのコーナーは
表 = ー裏
という関係のため、
DL = -ul
UR = -dr
よって
*DL*-*UR* = u-l
...
............
......................
???????それだけ???????
これはつまり、インスペクションの時点でu-lをすれば問題の右ダイヤルを回す数がわかる、ということです。
先にわかっていれば左右で同時に回すことができるので、よりタイムを縮めることができるでしょう。
また、以下のような針の向きが同じ隣接したエッジがあればuとlに置くことでスキップが狙えます。

dとrに置くことでstep2の左ダイヤルをスキップできますが、step5の難しさを考えると個人的にはuとlに置いたほうが早いと思います。
他の針の向きを見てどちらにすべきか判断するのもよいかもしれません。
以上が今回の書き散らしです。
また何かを発見したときはブログとして残そうと思います。
ではまた。
もう二度とこのブログが動くことはないと思ってました。
今回の種目はクロックです。
"easy 7-simul" という解法に関してちょっと驚いた発見があったので、雑ではありますが書き残しておきます。
easy 7-simulを知らない方はいかのおすしさん(Twitter: @cube_224)のブログを先に見てください。
この後の話のベースになります。
非常にわかりやすく書かれているのですぐ戻ってこれるかと思います。
さて、一気に本題に入ります。
easy 7-simulをちょっと練習してみると、
step5(ピンがULDL)の右ダイヤルを幾つ回すのかの判断が難しい、ということに気づくと思います。
左ダイヤルでDエッジをRエッジに合わせる際にDLコーナーが動き、
DLコーナーが動いた後の針の向きに右ダイヤルでURコーナーをに合わせるという流れになっているため、
そもそも"simul"と言っているのに同時処理がほぼできないという問題があります。
...何とかできないものでしょうか。
「もしこの右ダイヤルを回す数が先にわかっていれば解決するのになあ」
と筋肉ムキムキのミシガン州に住んでいそうな少年はバスの中で考え、
試しに問題の右ダイヤルを回す前のDLコーナーとURコーナーの状態から回す数を計算してみることにしました。
まず、右ダイヤルを回す前のDLコーナーを*DL*、
同様にURコーナーを*UR*とします。
それぞれの針の向きは以下のように書き表すことができます。
*DL* = DL + {step1(L)} + {step2(L)} + {step3(L)} + {step4(L)} + {step5(L)}
*UR* = UR + {step1(R)} + {step2(R)} + {step3(L)} + {step4(R)}
※1 step1(L) → step1の左ダイヤルを回す数
※2 DL→スクランブル後のDLコーナーの針の向き
※3 ここでの表裏18個の時計の針の向きは
表:

裏(表からx2をした状態):

と表記しています。
それぞれのstepで回す数を代入すると以下のようになります。
*DL* = DL+{c-d}+{d-r}+{step3(L)}+{(D-R)+(ul-l)}+{R-D} = DL+c-r+(ul-l)+{step3(L)}
*UR* = UR+{(dr-r)+(U-L)}+{step3(L)}+{c-u} = UR+(dr-r)+(c-u)+{step3(L)}
最後に*DL* - *UR* をすると、
*DL*-*UR* = DL-UR+u+ul-dr-l
クロックのコーナーは
表 = ー裏
という関係のため、
DL = -ul
UR = -dr
よって
*DL*-*UR* = u-l
...
............
......................
???????それだけ???????
これはつまり、インスペクションの時点でu-lをすれば問題の右ダイヤルを回す数がわかる、ということです。
先にわかっていれば左右で同時に回すことができるので、よりタイムを縮めることができるでしょう。
また、以下のような針の向きが同じ隣接したエッジがあればuとlに置くことでスキップが狙えます。

dとrに置くことでstep2の左ダイヤルをスキップできますが、step5の難しさを考えると個人的にはuとlに置いたほうが早いと思います。
他の針の向きを見てどちらにすべきか判断するのもよいかもしれません。
以上が今回の書き散らしです。
また何かを発見したときはブログとして残そうと思います。
ではまた。
この記事へのコメント