我有一个柜台。这是一个小型设备,看起来像这样:
显示从0000
到9999
。它在顶部有一个小按钮,可将计数增加1,在右边有一个小旋钮,其目的是将计数器重置为0。
现在,关于小旋钮的事情是,如果您将其向后旋转,则可以使它再次增加任何所需的数字。因此,如果我按下计数器按钮10次以使计数器显示出来0010
,则可以向后旋转旋钮,直到听到微小的喀哒声,然后再次将其向前旋转并直接转到0090
。
但是,旋钮每次向前推动数字时,都会始终使同一数字的所有出现次数增加1。因此,如果计数器显示6060
,则只能使其增加到7070
,而不能增加到6070
或7060
。另外,旋钮将9
s 滚动0
而不携带,因此0990
将前进到0000
而不是1000
或1100
。
我想知道将计数器设置为特定数字的最有效方法。您的任务是编写一个程序或函数,该程序或函数将确定执行此操作所需的最短按钮按下和旋钮前进的顺序。
您的程序将输入从0000
到的4位数字9999
,并以以下格式返回一系列步骤:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
其中C
代表“按下计数器按钮”,而D
0到9之间的任何数字代表“使用旋钮将所有出现的次数D
增加1”。
您的程序必须针对所有可能的四位数组合生成有效的步骤顺序,并将对所有10,000个案例所需的步骤总数进行评分。在平局的情况下(最有可能在找到最佳算法时),较短的代码将获胜。
0010
为0020
在这种情况下?还是只能向后旋转旋钮?而且,每个“ D”都算作旋钮前进的“ D”数1234567
吗(例如,是否意味着先将旋钮先旋转1次,然后旋转2次,然后旋转3次,依此类推)?还是仅仅表示每个单独的旋钮旋转(例如,是否1234567
仅意味着将旋钮旋转7次)?