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-.5
devuelve verdadero para cualquier matriz quea
contenga (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/a
es 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
K
yƓ
.Pruébalo en línea!
Explicación
fuente
9s3µUŒD;;Z;ŒDµ;UKƓẇ
ahorra 5 bytes.123,456,789
debería ser lo mismo que789,456,123
Ruby, 77 bytes
fuente
86
y24
fallará.!!
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