Dado un número entero de 1 a 999 inclusive, genera un valor verdadero si aparece horizontal, vertical o diagonal, hacia adelante o hacia atrás, en cualquier lugar del cuadrado de 3x3 de los dígitos 1-9 en un teclado numérico estándar :
789
456
123
Si el número no aparece, genera un valor falso.
Los 65 números exactos para los que debe generar la verdad son:
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
Todo lo demás es falso.
El código más corto en bytes gana.
code-golf
number
decision-problem
integer
Pasatiempos de Calvin
fuente
fuente

Respuestas:
JavaScript (ES6),
83...7473 bytesToma la entrada como una cadena.
Guardado 3 bytes gracias a ETHproductions
Cómo funciona
Transformamos el teclado numérico aplicando un desplazamiento a cada dígito de acuerdo con la fila a la que pertenece:
Todos los códigos a continuación están representados en hexadecimal.
Consideremos todas las combinaciones XOR de estos nuevos códigos clave. Las teclas contiguas se resaltan con corchetes.
Podemos ver que dos claves son contiguas si y solo si XORing sus códigos conduce a uno de los siguientes valores:
Esta lista se puede empaquetar en la siguiente máscara binaria:
De ahí la prueba para determinar si dos códigos clave (a, b) corresponden a dos claves contiguas:
Para tres códigos clave (a, b, c), necesitamos esta prueba adicional:
Ejemplo:
Manifestación
Este fragmento genera la lista de valores verdaderos.
Mostrar fragmento de código
fuente
a-.5devuelve verdadero para cualquier matriz queacontenga (cero o) un entero.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/aes incluso más corto y debería funcionar igual de bien, creo.Python3, 72 bytes
La entrada se toma como una cadena.
Sugerencias de golf bienvenidas! :RE
fuente
s, puede guardar 1 byte.s, que tiene un espacio en blanco después84, entonces es incorrecto, ya que es obligatorio. Si no contuviera un espacio en blanco, la cadena resultante tendría una cadena '8448', lo que conduciría a casos de prueba fallidos. ¡Gracias por las sugerencias!Befunge,
169161159 bytesPruébalo en línea!
Las primeras dos líneas simplemente están empujando la lista de números de prueba a la pila. Esto se hace en orden de tamaño, ya que a veces puede ser más fácil generar un número como un desplazamiento del anterior en la serie en lugar de generarlo desde cero. Una vez que llegamos a los números más grandes, a veces también podemos guardar un byte al generarlos en pares, por ejemplo,
"kV"3*\3*nos da 258 y 321 en nueve bytes, donde individualmente tomarían cinco bytes cada uno.El bucle principal está en la línea tres, ejecutándose de derecha a izquierda con una envoltura. Esto solo itera a través de todos los números de prueba en la pila, comparando el valor en sí, el valor% 100 y el valor / 10. Si alguno de ellos coincide con el número de entrada o el número <= 9, entonces sacamos 1 y salimos. Si no hay coincidencia, continuamos en bucle. Si se nos acaban los números de prueba en la pila, sacamos 0 y salimos.
Gracias a Mistah Figgins por salvarme un par de bytes.
fuente
0<@.!!<para guardar 2 bytes. Esto se basa en que la parte superior de la pila no es cero cuando la IP baja a la segunda flecha. Pruébalo en línea!Jalea ,
292419 bytesGuardado 5 bytes gracias a la sugerencia de @ Dennis de
KyƓ.Pruébalo en línea!
Explicación
fuente
9s3µUŒD;;Z;ŒDµ;UKƓẇahorra 5 bytes.123,456,789debería ser lo mismo que789,456,123Ruby, 77 bytes
fuente
86y24fallará.!!los paréntesis correspondientes.bash, 75
genera algo y devuelve 0 para todos los valores de esa lista
no imprime nada y devuelve 1 en todos los demás casos
fuente
Java, 397 bytes
fuente