Наиболее распространенные раскладки клавиатуры компьютера имеют клавиши с десятичными цифрами
1234567890
пробегая по их вершине, над клавишами для писем.
Пусть окрестность десятичной цифры будет набором цифр из ее собственной цифровой клавиши и из цифровых клавиш сразу влево и вправо, если они существуют.
Например, окрестность 0 есть {0, 9}
, а окрестность 5 есть {4, 5, 6}
.
Теперь определите дружественное клавиатуре число как положительное целое число (в десятичной форме без начальных нулей), которое можно набрать на схеме выше так, чтобы каждая последующая цифра в числе после первой цифры находилась в окрестности предыдущей цифры.
Все однозначные числа (1-9) тривиально удобны для клавиатуры.
Число, такое как 22321, дружественно к клавиатуре, потому что каждая цифра (не считая первую) находится рядом с цифрой непосредственно перед ней.
Число, такое как 1245, не дружественно к клавиатуре, потому что 4 не находится рядом с 2 (и наоборот).
Число, такое как 109, не подходит для клавиатуры, потому что 0 не находится рядом с 1. Концы не зацикливаются.
Размещая числа, удобные для клавиатуры, по порядку от наименьшего к наибольшему, мы можем создать целочисленную последовательность .
Вот первые 200 членов последовательности чисел, дружественных к клавиатуре:
N KFN(N)
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 11
11 12
12 21
13 22
14 23
15 32
16 33
17 34
18 43
19 44
20 45
21 54
22 55
23 56
24 65
25 66
26 67
27 76
28 77
29 78
30 87
31 88
32 89
33 90
34 98
35 99
36 111
37 112
38 121
39 122
40 123
41 211
42 212
43 221
44 222
45 223
46 232
47 233
48 234
49 321
50 322
51 323
52 332
53 333
54 334
55 343
56 344
57 345
58 432
59 433
60 434
61 443
62 444
63 445
64 454
65 455
66 456
67 543
68 544
69 545
70 554
71 555
72 556
73 565
74 566
75 567
76 654
77 655
78 656
79 665
80 666
81 667
82 676
83 677
84 678
85 765
86 766
87 767
88 776
89 777
90 778
91 787
92 788
93 789
94 876
95 877
96 878
97 887
98 888
99 889
100 890
101 898
102 899
103 900
104 909
105 987
106 988
107 989
108 990
109 998
110 999
111 1111
112 1112
113 1121
114 1122
115 1123
116 1211
117 1212
118 1221
119 1222
120 1223
121 1232
122 1233
123 1234
124 2111
125 2112
126 2121
127 2122
128 2123
129 2211
130 2212
131 2221
132 2222
133 2223
134 2232
135 2233
136 2234
137 2321
138 2322
139 2323
140 2332
141 2333
142 2334
143 2343
144 2344
145 2345
146 3211
147 3212
148 3221
149 3222
150 3223
151 3232
152 3233
153 3234
154 3321
155 3322
156 3323
157 3332
158 3333
159 3334
160 3343
161 3344
162 3345
163 3432
164 3433
165 3434
166 3443
167 3444
168 3445
169 3454
170 3455
171 3456
172 4321
173 4322
174 4323
175 4332
176 4333
177 4334
178 4343
179 4344
180 4345
181 4432
182 4433
183 4434
184 4443
185 4444
186 4445
187 4454
188 4455
189 4456
190 4543
191 4544
192 4545
193 4554
194 4555
195 4556
196 4565
197 4566
198 4567
199 5432
200 5433
Вызов
Напишите программу или функцию, которая принимает положительное целое число N (через stdin / командную строку / аргумент функции) и печатает (в стандартный вывод) или возвращает N-й член в последовательности чисел, дружественных клавиатуре.
Например, если вход есть 191
, выход должен быть 4544
.
Выходные данные могут опционально содержать один завершающий символ новой строки.
Самая короткая подача в байтах побеждает.
источник
Ответы:
Pyth,
2724 байтаДемонстрация.
Улучшения к оригиналу:
Использование
metd
вместо.r ... _UJ
: на 2 байта меньше. 1 прямой, 1 за то, что не нужно использовать J.Использование
s
и`T
вместоJT10
: 1 байт меньше.Начну с строковым представлением числа:
`T
.Затем мы преобразуем строку в список цифр и вращаем цифры назад на единицу (9876543210) с помощью
metsd
. Затем мы берем 2 подпоследовательности элемента с.: ... 2
. Эти подпоследовательности фильтруются/h-FY3
. Это выражение соответствует((a-b)+1)/3
нулю в том и только в том случае, если разница междуa
иb
составляет не более 1. Таким образом, отфильтрованный список будет пустым тогда и только тогда, когда число будет удобным для клавиатуры. С!
, результат верен, только если число является дружественным к клавиатуре.f ... hG
Отфильтровывает вверх,G+1
пока результат не станет истинным, давая первое дружественное клавиатуре число на уровнеG+1
или выше.u ... Q0
применяет эту функцию к собственнымQ
временам вывода , начиная с 0, гдеQ
вводится. Это даетQ
дружественный номер клавиатуры, по желанию.источник
Python 3,
112102 байтаМы отслеживаем количество дружественных номеров, которые еще нужно найти,
n
и последний проверенный номерk
.5 и 5 байтов сохранены благодаря @isaacg и @ Sp3000.
источник
[:-1]
вzip
CJam,
2928 байтПопробуйте онлайн в интерпретаторе CJam .
источник
N ** 4
довольно легко, так как ниже есть по крайней мере2 ** k
KFN10 ** k < 16 ** k
. Замена_*
на4#
не изменит количество байтов, но сделает код ужасно неэффективным.CJam,
3431 байт3 байта сохранены Денисом.
Я уверен, что разрыв с Pyth можно как-то закрыть, но сейчас у меня нет времени заниматься этим дальше ...
Проверьте это здесь.
источник
)_++
с ,:_
чтобы сохранить 2 символов и-z1>
с ,m2/
чтобы спасти другого.JavaScript (ES6), 95
Ungolfed
Тест : выполнить фрагмент в Firefox
Показать фрагмент кода
источник
abs(p-d)>1
а неp-d>1|p-d<-1
?Math.abs(p-d)>1
длиннееp-d>1|p-d<-1
Math.
префикс.Haskell,
9080 байтовЭто функция без имени. Чтобы использовать его, вызовите его с параметром, например,
([x|x<-[0..],all((<2).abs)$zipWith(-)=<<tail$[mod(1+fromEnum c)10|c<-show x]]!!) 199
который возвращает5432
.Как это работает:
Изменить: @Mauris нашел несколько байтов для сохранения. Благодарность!
источник
x<-[1..]
...!!n-1
, вы можете сделатьx<-[0..]
...!!n
.f n=[...]!!n
можноf=([...]!!)
.a
:f=([x|x<-[0..],all((<2).abs)$zipWith(-)=<<tail$[mod(1+fromEnum c)10|c<-show x]]!!)
a
мыf
тоже можем устранить .Дротик, 92 байта
С переносами строк:
Посмотреть / запустить его на DartPad
источник
Пакет - 520 байт
Shudder.
источник
Bash + coreutils, 120 байт
Некоторые тестовые случаи:
источник
JavaScript ES6, 126 байт
Разоблаченный код и тесты ниже. Это, безусловно, может быть улучшено больше.
источник
Кобра - 135
Давненько этого не делал, но вот:
Ungolfed:
источник
Желе , 11 байт
Попробуйте онлайн!
источник
Pyth, 19 байт
Попробуй это здесь.
Примечание: использует коммит новее, чем этот вызов, поэтому не должен рассматриваться как результат ответа Исаака. Это все еще конкурирует, хотя.
источник