Я думаю, что большинство людей здесь знают, что такое 7-сегментный дисплей для цифр:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Мы можем определить 7-сегментную разницу (7SD) между двумя цифрами как количество сегментов, которые необходимо переключить для переключения с одного на другой. Например, 7SD между 1
и 2
равен 5 (три горизонтальных сегмента и два нижних вертикальных сегмента должны быть переключены), а 7SD между 6 и 8 равен 1 .
Кроме того, мы можем определить 7SD между двумя числами, чтобы быть суммой 7SD между их соответствующими цифрами. Если одно число длиннее другого, мы предполагаем, что они выровнены по правому краю, и добавим количество сегментов, необходимое для отображения дополнительных наиболее значимых цифр большего числа. В качестве примера рассмотрим 7SD между 12345
и 549
:
x: 1 2 3 4 5
y: 5 4 9
7SD: 2+5+2+0+1 = 10
Ваша задача - вычислить 7SD между n и n + 1 , учитывая n .
Для удобства приведена полная таблица 7SD между отдельными цифрами. Строка _
представляет пустую позицию.
_ 0 1 2 3 4 5 6 7 8 9
_ 0 6 2 5 5 4 5 6 3 7 6
0 6 0 4 3 3 4 3 2 3 1 2
1 2 4 0 5 3 2 5 6 1 5 4
2 5 3 5 0 2 5 4 3 4 2 3
3 5 3 3 2 0 3 2 3 2 2 1
4 4 4 2 5 3 0 3 4 3 3 2
5 5 3 5 4 2 3 0 1 4 2 1
6 6 2 6 3 3 4 1 0 5 1 2
7 3 3 1 4 2 3 4 5 0 4 3
8 7 1 5 2 2 3 2 1 4 0 1
9 6 2 4 3 1 2 1 2 3 1 0
вход
- Ввод - одно положительное целое число
n
. - Вы можете написать программу или функцию, используя ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции.
- Вы можете предположить, что входные данные по крайней мере на единицу меньше наибольшего числа, которое может быть представлено стандартным целочисленным типом вашего языка, при условии, что этот тип поддерживает как минимум значения до 127 включительно.
Выход
- Вы должны напечатать одно целое число, 7SD между
n
иn+1
. - Вы можете выводить через STDOUT (или ближайшую альтернативу), возвращаемое значение функции или аргумент функции (out).
счет
Применяются стандартные правила игры в гольф , самый короткий код (в байтах) выигрывает.
Тестовые случаи
По какой-то неясной причине эта последовательность еще не включена в OEIS, хотя есть тесно связанная последовательность A123587 . Вот первые 100 номеров (начиная с n = 1, 2, 3, ...
):
5, 2, 3, 3, 1, 5, 4, 1, 4, 4, 5, 2, 3, 3, 1, 5, 4, 1, 7, 4, 5, 2, 3, 3, 1,
5, 4, 1, 4, 4, 5, 2, 3, 3, 1, 5, 4, 1, 5, 4, 5, 2, 3, 3, 1, 5, 4, 1, 5, 4,
5, 2, 3, 3, 1, 5, 4, 1, 3, 4, 5, 2, 3, 3, 1, 5, 4, 1, 7, 4, 5, 2, 3, 3, 1,
5, 4, 1, 6, 4, 5, 2, 3, 3, 1, 5, 4, 1, 3, 4, 5, 2, 3, 3, 1, 5, 4, 1, 6, 4
Первый вход, для которого 7SD больше 9, 1999
должен дать 11. Вот еще несколько примеров:
n 7SD
1999 11
12345 1
999999 14
5699999 15
8765210248 1
Python,
5048 байтовобъяснение
Эта функция работает с наименьшей значащей цифрой числа
n
, суммируя 7SD цифр при увеличении на единицу до первой нецифровой9
цифры.26523308
является битовой маской, которая кодирует отображение для цифр0-8
. Когдаn=0
, что происходит только тогда, когдаn
содержит только9
s, ответ будет отклонен на два. Это компенсируется выражением0**n*2
. Что касается цифры9
, битовая маска оценивается как ноль, что вызовет рекурсивный вызов при добавлении2
в 7SD.источник
05AB1E ,
3130282726 байтовКод:
Объяснение ( устаревшее ):
Мы изменяем следующее на последнюю не-9 цифру:
Для особых случаев:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
28 байт альтернатива:
D[¤©•2X›ùì•sès®9Ê#¨]\rÚ9Q4*O
.источник
Java, 63 байта
Мир выровнялся, когда Python снова прошел Java.
Потому что, вы знаете, Java.
Посмотри на Ideone
Максимум на 2147483647, так как это Java
Integer.MAX_VALUE
.Это порт моего ответа Python, который является портом ответа ES6 .
источник
MATL ,
613936 байтПопробуйте онлайн!
объяснение
источник
Юлия, 44 байта
Попробуй это здесь.
Денис спас байт!
источник
Python,
7166 байт48 байтов xsot . Еще больше волшебной математики!
Посмотри на Ideone
Потому что предыдущий ответ Python не работает и далек от оптимального. Простой порт предыдущей версии ES6 . Теперь, используя немного твидлинга (из альтернативной формулировки ES6), вырежьте бросок!
Можно заставить работать с Python 3, явно используя floordiv для +1 байта.
источник
9
e
это допустимое письмо после числа, например, в9e9
.n%10==9
наn%10<9
не сохраняется, поскольку в этом порядке не требуется пробел.Джольф, 32 байта
Попробуй это здесь!
объяснение
Это перевод ответа Нила.
источник
Pyth -
783027 байтовТот первый был смущающим.
Тестовый пакет .
источник
J, 53 байта
Первоначально основано на решении @ Neil . Затем улучшается сохранение байта с использованием той же формулы в решении @ Lynn .
54-байтовая версия на основе строки
использование
источник
Сетчатка , 34 байта
Попробуйте онлайн! (Первая строка позволяет обрабатывать сразу несколько тестовых случаев.)
объяснение
Как и большинство ответов, обнаруженных к настоящему времени, нам не нужно использовать полную таблицу, так как
9
при увеличении изменяется только наименее значимая нецифровка . Вот так и работает этот ответ.Это соответствует (
M
) регулярному выражению,.9*$
то есть первой цифре, которая отделена только9
s от конца.!
Говорит Retina заменить вход с этим матчем, отбрасывая все , что не влияет на 7SD.Если ввод теперь начинается с «
9
что», то сам ввод состоит только из9
s, поэтому 7-сегментный дисплей должен предвосхитить1
стоимость2
. Самый простой способ справиться с этим - заменить9
в этом случае начальную букву на0
, поскольку стоимость увеличения9
(до0
) равна,2
а стоимость увеличения0
(до1
) равна4
, так что это увеличивает общую стоимость по2
мере необходимости.Теперь у нас есть этап транслитерации, который заменяет каждую цифру стоимостью ее увеличения (поскольку
d
расширяется до0123456789
). Обратите внимание, что это первая поддиагональ таблицы 7SD.Это заменяет каждую цифру
n
сn
копиями1
, т.е. он преобразует каждую цифру унарный, и так как нет сепараторов немедленно добавляет их вместе.Наконец, мы подсчитываем количество символов (то есть количество совпадений
.
) в результате, который преобразует унарную сумму обратно в десятичную.источник