场景
经过一整天的辛苦工作,在办公室里浏览并浏览了stackexchange.com之后,我终于在16:58走出家门,已经疲倦了。因为我仍然只是一名实习生,所以我目前的交通方式是骑自行车。我前往值得信赖的Peugeot Reynolds 501,但是在我不能驶向它之前,我需要将其解锁。该锁是通过框架和前轮的标准四位数密码锁(0-9)。当我尝试保持清醒时,我将手向上拉以进入组合。
挑战
因为我的手指很疲劳,所以我想用最少的动作将锁调到正确的位置。一移动定义为旋转一个位置(36度),例如,从5737
到移动一5738
。但是,我能够同时抓取最多三个连续的环,并将它们旋转为一个,这仅算作一个动作。例如,从到到仅有一个移动。从到移动不是一个动作,因为数字1,2和4向同一方向移动,但独立于数字3。5737
6837
5626
5737
6838
因此,对于给定的组合,我可以在自行车锁上看到(任何4位整数),使锁解锁的最低移动量是多少,是的,我可以随时朝任一方向旋转。我的意思是,我可以在一个方向上转动一些数字,而在另一个方向上转动其他数字:对于每次解锁,并非我的所有动作都是顺时针或顺时针方向。
因为我很懒,所以我的解锁码是0000。
这是我无法打扰的代码编写工作,因此以字节数为单位的最短程序获胜。
输入来自stdin,您的代码应输出每次移动后每一步都能看到的组合,包括末尾的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上,但他们不喜欢它...
免责声明:第一次打高尔夫球,所以任何损坏的信息/遗失信息都请通知我!我也手动完成了所有示例,因此可能会有涉及较少动作的解决方案!
编辑:对于具有多个具有相等移动量(实际上是全部)的解决方案路径的答案,没有首选的解决方案。