Вы заблокировали свой велосипед с кодовым замком из 3 цифр. Теперь вы хотите покататься и разблокировать его с помощью следующей программы.
вход
1-й параметр
Цифровая комбинация вашего замка в заблокированном состоянии. Он должен отличаться от 2-го параметра (= комбинация разблокированного состояния). (Или ваш велосипед может быть украден!)
Диапазон 000 .. 999. Ведущие нули не должны быть опущены.
2-й параметр
Цифровая комбинация вашего замка в разблокированном состоянии. Это значение является вашей целью.
Диапазон 000 .. 999. Ведущие нули не должны быть опущены.
Выход
Список каждого состояния кодовой блокировки после каждого «вращения», включая начальное состояние (которое всегда является первым параметром) и последний шаг (который всегда является вторым параметром).
Алгоритм
Вы начинаете «вращать» первую цифру одну за другой, пока не достигнете правильной цифры в разблокированном состоянии. Но, поскольку вы знаете весь код разблокировки, вы поворачиваете цифру в направлении, в котором вам нужно наименьшее количество вращений, чтобы достичь цифры в разблокированном состоянии . В случае галстука вы можете выбрать любое направление, которое вы предпочитаете.
Когда вы наберете правильную первую цифру, вы начнете ту же процедуру со второго и затем с третьего.
Порядок цифр следует понимать как кружок:
... 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
Заметки
- Вы можете положиться на правила ввода / вывода по умолчанию
- Вы можете изменить порядок параметров.
Примеры
Пример 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.
Это код-гольф, выигрывает самый короткий ответ.
источник
Ответы:
Python 2 ,
1131071059995 байтПопробуйте онлайн!
Принимает ввод как списки целых чисел
Добавлено:
источник
//
Желе , 15 байт
Попробуйте онлайн!
Как?
источник
JavaScript (ES6),
73 7270 байтСохранено 2 байта благодаря @tsh
Принимает ввод как 2 массива цифр в синтаксисе карри
(a)(b)
. Возвращает строку.Попробуйте онлайн!
комментарии
источник
d/6&1^d>0||9
->d/5>5/d?9:1
Желе , 25 байт
Попробуйте онлайн!
Полная программа.
источник
Python 2 ,
10197 байтПопробуйте онлайн!
3 байта спасибо Джоэлу .
Принимает ввод как списки целых.
источник
//
то же самое/
, так что получен дополнительный байт.for x,y,i in zip(a,c,[0,1,2])
что я вспомнил ...Желе , 30 байт
Попробуйте онлайн!
Диадическая ссылка, принимающая в качестве левого аргумента код разблокировки, а справа - текущее заблокированное состояние, как списки целых чисел.
Это слишком долго!
источник
PHP , 114 байт
Попробуйте онлайн!
Мое решение, вероятно, отстой, но это лучшее, что я могу придумать на данный момент!
источник
Древесный уголь , 48 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Напечатайте начальную позицию.
Измените начальную строку позиции в массив числовых цифр для целей расчета.
Обведите каждую цифру по очереди.
Рассчитайте количество вращений, необходимых для разблокировки этой цифры. Это число от
-5
до ,4
где-5
означает 5 нисходящих вращения и4
средство 4 вверх вращений.Зацикливайтесь на каждом повороте.
Обновите цифру в соответствии со знаком вращения.
Выведите цифры в виде строки на новой строке.
источник
T-SQL 2008, 170 байт
Я добавил несколько разрывов строк, чтобы сделать его читабельным
Попробуйте онлайн
источник
C # (интерактивный компилятор Visual C #) , 101 байт
Попробуйте онлайн!
источник
J , 36 байт
Попробуйте онлайн!
Завтра добавлю объяснение.
источник
MATLAB,
10089 байтДругой подход (использование неявного расширения для создания матрицы вычитания) сокращает 11 байтов:
[Оригинальное 100-байтовое решение]
Оба вызываются путем передачи входных данных как трехэлементных массивов, например
f([9 1 1], [2 3 2])
источник
Java (JDK) , 139 байт
Попробуйте онлайн!
Тот же алгоритм, что и у всех, по-другому, потому что Java
System.out.println
довольно дорогой!источник
C (лязг) , 125 байт
Попробуйте онлайн!
источник
Котлин , 162 байта
Попробуйте онлайн!
источник