У меня есть счетчик. Это небольшое устройство, которое выглядит так:
Дисплей переходит от 0000
к 9999
. Он имеет маленькую кнопку сверху, которая увеличивает счет на 1, и небольшую ручку справа, цель которой - сбросить счетчик обратно на 0.
Теперь о маленькой ручке заключается в том, что если вы поворачиваете ее назад, вы можете заставить ее увеличивать любую цифру, какую захотите, когда вы снова поворачиваете ее вперед. Поэтому, если я нажму кнопку счетчика 10 раз, чтобы отобразился счетчик 0010
, я могу повернуть ручку назад, пока не услышу крошечный щелчок, затем снова повернуть ее вперед и заставить ее двигаться прямо 0090
.
Но ручка всегда увеличивает все вхождения одной и той же цифры на 1 каждый раз, когда она перемещает числа вперед. Поэтому, если счетчик показывает 6060
, вы можете увеличить его только до 7070
, а не до 6070
или 7060
. Кроме того , регулятор будет катиться 9
сек к 0
без проведения, так 0990
будет заранее 0000
вместо 1000
или 1100
.
Я хочу знать, как наиболее эффективно установить счетчик на определенное число. Ваша задача - написать программу или функцию, которая будет определять кратчайшую последовательность нажатий кнопок и нажатий кнопок, необходимых для этого.
Ваша программа примет в качестве ввода 4-значное число от 0000
до 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 раз)?