3桁のコンビネーションロックで自転車をロックしました。今、あなたは乗車に行きたいので、次のプログラムの助けを借りてそれを解除する必要があります。
入力
第1パラメーター
ロック状態のロックの数字の組み合わせ。2番目のパラメーター(= ロック解除状態の組み合わせ)とは異なる必要があります。(または、自転車が盗まれる可能性があります!)
範囲000..999。先行ゼロは省略できません。
2番目のパラメーター
ロック解除状態のロックの数字の組み合わせ。この値が目標です。
範囲000..999。先行ゼロは省略できません。
出力
初期状態(常に1番目のパラメーター)と最後のステップ(常に2番目のパラメーター)を含む各「回転」後の組み合わせロックの各状態のリスト。
アルゴリズム
ロック解除状態で正しい数字に到達するまで、最初の数字を1つずつ「回転」させます。ただし、ロック解除コード全体を理解しているため、ロック解除状態の数字に到達するために必要な回転量が最小になる方向に数字を回転させます。。同点の場合、好きな方向を選択できます。
正しい最初の桁に達したら、2番目から3番目まで同じ手順を開始します。
数字の順序は、円として理解することです。
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
つまり、1から9までの最小回転量は
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
しかし
1 -> 0 -> 9
= 2。
ノート
- デフォルトのI / Oルールに依存できます
- パラメーターの順序を変更できます。
例
例1、正しい
Input: 999 001
Output:
999
099
009
000
001
例2、正しい
Input: 000 292
Output:
000
100
200
290
291
292
例3、誤った出力
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
例4、間違った入力
Input: 1 212 // Wrong because no leading zeros.
これは、最短回答が勝つコードゴルフです。