Учитывая целое число от 1 до 999 включительно, выведите истинное значение, если оно появляется по горизонтали, вертикали или диагонали, вперед или назад, в любом месте квадрата 3x3 цифр 1-9 на стандартной цифровой клавиатуре :
789
456
123
Если число не появляется, выведите ложное значение.
Точные 65 чисел, для которых нужно вывести правду:
1
2
3
4
5
6
7
8
9
12
14
15
21
23
24
25
26
32
35
36
41
42
45
47
48
51
52
53
54
56
57
58
59
62
63
65
68
69
74
75
78
84
85
86
87
89
95
96
98
123
147
159
258
321
357
369
456
654
741
753
789
852
951
963
987
Все остальное ложно.
Самый короткий код в байтах побеждает.
code-golf
number
decision-problem
integer
Кальвин Хобби
источник
источник
Ответы:
JavaScript (ES6),
83...7473 байтаПринимает ввод в виде строки.
Сохранено 3 байта благодаря ETHproductions
Как это устроено
Мы преобразуем цифровую панель, применяя смещение к каждой цифре в соответствии со строкой, к которой она принадлежит:
Все коды ниже представлены в шестнадцатеричном формате.
Давайте рассмотрим все комбинации XOR этих новых кодов клавиш. Смежные ключи выделены скобками.
Мы можем видеть, что два ключа являются смежными тогда и только тогда, когда XOR-кодирование их кодов приводит к одному из следующих значений:
Этот список может быть упакован в следующую двоичную маску:
Отсюда и тест, чтобы определить, соответствуют ли два кода клавиш (a, b) двум смежным ключам:
Для трех ключевых кодов (a, b, c) нам нужен этот дополнительный тест:
Пример:
демонстрация
Этот фрагмент выводит список истинных значений.
Показать фрагмент кода
источник
a-.5
возвращает true для любого массива,a
содержащего (ноль или) одно целое число.n=>([a,b,c]=[...n].map(v=>--v+v/3|0))-.5||n%10&&n<100|b*2==a+c&&45242&1<<(a^b)
1/a
еще короче и должно работать так же хорошо, я думаю.Python3, 72 байта
Ввод принимается в виде строки.
Предложения по игре в гольф приветствуются! : D
источник
s
, вы можете сохранить 1 байт.s
, после которой есть пробел84
, то вы ошибаетесь, поскольку это требуется. Если он не будет содержать пробелы, полученная строка будет иметь цепочку «8448», что приведет к неудачным тестам. Спасибо за предложения, хотя!Befunge,
169161159 байтПопробуйте онлайн!
Первые две строки просто помещают список тестовых номеров в стек. Это делается в порядке размера, поскольку иногда может быть проще сгенерировать число в качестве смещения от предыдущего в серии, чем сгенерировать его с нуля. Как только мы доберемся до больших чисел, мы также можем иногда сохранить байт, генерируя их в парах, например,
"kV"3*\3*
дает нам 258 и 321 в девяти байтах, где по отдельности они будут занимать пять байтов каждый.Основной цикл находится на третьей строке, выполняя справа налево с циклическим переходом. Это просто перебирает все тестовые числа в стеке, сравнивая само значение, значение% 100 и значение / 10. Если какой-либо из них соответствует входному номеру или числу <= 9, то мы выводим 1 и завершаем работу. Если совпадений нет, мы продолжаем цикл. Если у нас заканчиваются тестовые числа в стеке, мы выводим 0 и завершаем работу.
Спасибо Мисте Фиггинсу за то, что он спас мне пару байтов.
источник
0<@.!!<
чтобы сохранить 2 байта. Это зависит от того, что вершина стека ненулевая, когда IP опускается на вторую стрелку. Попробуйте онлайн!Желе ,
292419 байтСохранено 5 байтов благодаря предложению @ Dennis
K
иƓ
.Попробуйте онлайн!
объяснение
источник
9s3µUŒD;;Z;ŒDµ;UKƓẇ
экономит 5 байтов.123,456,789
должны быть такими же, как и789,456,123
Рубин, 77 байт
источник
86
и не24
получится.!!
ни сопутствующие скобки.Баш, 75
выводит что-то и возвращает 0 для всех значений в этом списке
ничего не печатает и возвращает 1 во всех остальных случаях
источник
Java, 397 байт
источник