У мене лічильник. Це невеликий пристрій, який виглядає приблизно так:
Дисплей переходить від 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".
Ваша програма повинна створити дійсну послідовність кроків для всіх можливих чотиризначних комбінацій, і вона буде набрана загальною кількістю кроків, необхідних для всіх 10000 випадків. У випадку зв'язання (швидше за все, коли знайдеться оптимальний алгоритм), коротший код виграє.
0010
в0020
в цьому випадку? Або ви можете лише повернути ручку назад? А також, чи вважає кожен "D" числом "D" кількість просування ручки (наприклад, чи1234567
означає повернути ручку 1 раз, потім 2 рази, потім 3 рази і так далі)? Або це просто означає кожен поворот ручки (наприклад, це1234567
означає просто повернути ручку 7 разів)?