シナリオ
長い一日の仕事でオフィスで時間を過ごし、stackexchange.comを閲覧した後、私はようやく16:58にドアを出ました。私はまだインターンであるため、現在の交通手段は自転車です。信頼できるプジョーレイノルズ501に向かいますが、航海する前にロックを解除する必要があります。ロックは、フレームと前輪を通る標準の4桁のコンビネーションロック(0〜9)です。目を覚まそうとするとき、手を組んで組み合わせに入る。
挑戦
私の指はとても疲れているので、最小限の動きで正しい組み合わせにロックを回したいと思います。1つの動きは、1つの位置(36度)による回転として定義されます。たとえば、から5737
への1つの動きがあり5738
ます。ただし、連続する3つのリングを同時に把握し、1つとして回転させることができます。これは、1つの動きとしてカウントされます。たとえば、からまたはへの移動は1つだけです。桁番号1、2、および4は桁番号3とは無関係に同じ方向に移動したため、からに移動することは1つの動きではありません。5737
6837
5626
5737
6838
したがって、特定の組み合わせについては、自転車のロック(4桁の整数)で見ることができ、ロックを解除するためにできる最小の動きは何ですか、そして、はい、いつでもどちらの方向にも回転できます。これにより、ある方向にいくつかの数字を、別の方向に他の数字を回せることを意味します。ロックを解除するたびに、すべての動きが反時計回りまたは時計回りになるわけではありません。
私は怠け者なので、ロック解除コードは0000です。
これはコードゴルフです。多くのコードを書くのは面倒なので、バイト数の最も短いプログラムが勝ちます。
入力は標準入力からであり、コードは、各移動後に各ステップで表示できる組み合わせを出力する必要があります(末尾の0000を含む)。各組み合わせの出力は、スペース/改行/コンマ/ピリオド/アンパサンドで区切る必要があります。
例
Input: 1210
0100
0000
Input: 9871
9870
0980
0090
0000
Input: 5555
4445&3335&2225&1115&0005&0006&0007&0008&0009&0000
Input: 1234
0124 0013 0002 0001 0000
私はこれをhttp://bicycles.stackexchange.comに投稿しようとしましたが、彼らはそれを好きではありませんでした...
免責事項:最初のゴルフですので、壊れている情報や不足している情報はお知らせください!また、すべての例を手作業で行ったので、動きが少ないソリューションがあるかもしれません!
編集:等しい数の動き(実際にはすべて)を持つ複数のソリューションパスがある回答の場合、推奨されるソリューションはありません。