Вдохновленный генерировать дружественные номера клавиатуры .
Задний план
Многие цифровые планшеты имеют следующую раскладку:
789
456
123
0
Мы определяем окрестность числа как набор ячеек, ортогонально смежных с ним на показанной цифровой клавиатуре, включая самого себя. Например, соседство 2 равно, {1,5,3,0,2}
а соседство 0 {1,2,0}
. Ниже приведен список окрестностей каждого числа, над тестовыми примерами.
Мы определяем число, удобное для числовых чисел, как положительное целое число, где при записи в десятичном виде без начальных нулей каждая цифра, кроме первой, находится в окрестности предыдущей цифры.
Например,
- 7856 - число, удобное для числовых чисел, потому что 8 находится в окрестности 7, 5 - в соседнем доме 8, а 6 - в окрестности 5.
- 1201 является дружественным числом, потому что 2 находится в окрестности 1, 0 - в окрестности 2, а 1 - в окрестности 0.
- 82 не является числовым номером, потому что 2 не находится рядом с 8.
- 802 не является числовым значением, потому что 0 не находится в окрестности 8 (окрестности не переносятся).
Связанная последовательность OEIS . Обратите внимание, что эта связанная последовательность отличается, потому что она считается 0смежной, 7а не 1и 2.
Вызов
Если задано положительное целое число n
, верните числа, удобные для числа n-й n
или первых n
, где первое - 1. Вы можете использовать индексирование на основе 0, где число, удобное для чисел 0-го числа, будет равно 1.
Окрестности
Район каждой цифры указан здесь:
0:{0,1,2}
1:{0,1,2,4}
2:{0,1,2,3,5}
3:{2,3,6}
4:{1,4,5,7}
5:{2,4,5,6,8}
6:{3,5,6,9}
7:{4,7,8}
8:{5,7,8,9}
9:{6,8,9}
Тестовые случаи / последовательность
Это первые 100 терминов
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 20, 21, 22, 23, 25, 32, 33, 36, 41, 44, 45, 47, 52, 54, 55, 56, 58, 63, 65, 66, 69, 74, 77, 78, 85, 87, 88, 89, 96, 98, 99, 100, 101, 102, 110, 111, 112, 114, 120, 121, 122, 123, 125, 141, 144, 145, 147, 200, 201, 202, 210, 211, 212, 214, 220, 221, 222, 223, 225, 232, 233, 236, 252, 254, 255, 256, 258, 320, 321, 322, 323, 325, 332, 333, 336, 363, 365, 366, 369, 410, 411, 412, 414, 441, 444, 445, 447]
источник
Ответы:
JavaScript (ES6),
104938988 байтВозвращает N-й член последовательности, 1-индексированный.
демонстрация
Показать фрагмент кода
источник
k=(n,a=1)=>n?k(n-([...(x=a+[]).slice(0,-1)].reduce((a,c)=>a*!!~"012 0124 01235 236 1457 24568 3569 478 5789 689".split` `[c].indexOf(x[i++]),i=1)),a+1):a-1
может быть, что-то там поможет, мой тест, вероятно, слишком длинныйPerl 5 , 123 + 1 (-p) = 124 байта
Попробуйте онлайн!
источник
Желе ,
2724 байтаВозвращает N первых членов последовательности.
Попробуйте онлайн!
Это порт моего ответа JS .
источник
05AB1E ,
2423 байтаПопробуйте онлайн!
Возвращает n-е число в последовательности.
Пояснения:
Основная идея состоит в том, что, кроме
0
ключа, любая цифра, уменьшенная и преобразованная в основание 3, обладает следующими свойствами:Конечно, нам нужен
if
оператор для обработки0
ключа numpad.источник
MATL ,
2927 байтВыводит первые числа,
n
удобные для чисел.Попробуйте онлайн!
объяснение
Каждая цифра от
1
до9
кодируется как комплексное число, представляющее ее положение в цифровой клавиатуре, используя сетку шага 2, где действительная часть представляет вертикальное положение, а мнимая часть представляет горизонтальное положение. Так1
есть0+0j
,2
есть0+2j
,3
есть0+4j
,4
есть2+0j
, ...,9
есть4+4j
.Цифра
0
кодируется как0+1j
, то есть как если бы она была расположена точно между1
и2
.Для каждого кандидата Numpad людей числа, «десятичная» базовая преобразование применяется с использованием выше комплексных чисел вместо цифр
0
,1
...,9
. Это дает массив, из которого вычисляются абсолютные последовательные различия. Номер кандидата удобен для чисел, если и только если все абсолютные различия максимально2
(то есть шаг сетки). Если это так, номер остается в стеке.Код использует цикл
do
...while
, который завершается, когда количество чисел в стеке равно входному значениюn
.Единичная сетка была бы более естественным выбором. Цифры
1
,2
а0
затем будет соответствовать0+0j
,1+0j
и0.5+0j
соответственно. Но лучше использовать сетку шага 2, потому что умножение на2
(функцияE
) и нажатие0+1j
(функцияJ
) на один байт короче нажатия0+0.5j
(J2/
или.5j
)источник
Желе , 26 байт
Попробуйте онлайн!
-2 байта благодаря Caird Cinheringaahing
-2 байта благодаря Эрику Outgolfer
объяснение
источник
[]
за 2 байтаPython 2 , 134 байта
Попробуйте онлайн!
источник
f
а затем будете использовать его один раз , вы можете встроить его и сохранить два байта .Mathematica,
249234202 байтаПопробуйте онлайн!
спасибо user202729 за сжатие данных (-32 байта)
Мои результаты:
источник
IntegerDigits
:,IntegerDigits/@{210,4210,53210,632,7541,86542,9653,874,9875,986}
и использоватьFreeQ
,Tr
использоватьDo
вместоFor
, использовать инфиксную нотацию дляAppendTo
и использоватьDo
вместо того,While
чтобы повторятьTr[1^s]
времена, а также исключить переменнуюp
. Также вы не доказали, что алгоритм корректен, то есть результирующее число всегда меньше, чем его квадрат в квадрате, что необходимо для правильного ответа.PHP, 124 + 1 байт
Запустите как трубу с
-nR
или попробуйте онлайн .источник
Java 8,
192190 байтВозвращает (1-индексированное)
n
число в последовательности.Это было на удивление сложнее, чем я думал .. Вероятно, у меня было несколько головорезов сегодня днем ...
Объяснение:
Попробуй это здесь.
источник