Dado um número inteiro de 1 a 999 inclusive, imprima um valor verdadeiro se ele aparecer horizontal, verticalmente ou diagonalmente, para frente ou para trás, em qualquer lugar do quadrado 3x3 dos dígitos 1-9 em um teclado numérico padrão :
789
456
123
Se o número não aparecer, digite um valor falso.
Os 65 números exatos para os quais você precisa gerar verdade são:
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
Tudo o resto é falso.
O código mais curto em bytes vence.
code-golf
number
decision-problem
integer
Passatempos de Calvin
fonte
fonte
Respostas:
JavaScript (ES6),
83...7473 bytesRecebe a entrada como uma sequência.
Economizou 3 bytes graças a ETHproductions
Como funciona
Transformamos o teclado numérico aplicando um deslocamento para cada dígito de acordo com a linha à qual ele pertence:
Todos os códigos abaixo são representados em hexadecimal.
Vamos considerar todas as combinações XOR desses novos códigos de chave. Teclas contíguas são destacadas entre colchetes.
Podemos ver que duas chaves são contíguas se, e somente se, XORing seus códigos levar a um dos seguintes valores:
Esta lista pode ser compactada na seguinte máscara binária:
Portanto, o teste para determinar se dois códigos de chave (a, b) correspondem a duas chaves contíguas:
Para três códigos-chave (a, b, c), precisamos deste teste adicional:
Exemplo:
Demo
Este trecho gera a lista de valores verdadeiros.
Mostrar snippet de código
fonte
a-.5
retorna true para qualquer matriz quea
contenha (zero ou) um número inteiro.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
é ainda mais curto e deve funcionar tão bem, eu acho.Python3, 72 bytes
A entrada é tomada como uma sequência.
Sugestões de golfe são bem-vindas! : D
fonte
s
, você pode salvar 1 byte.s
, que possui um espaço em branco depois84
, então você está incorreto, pois é necessário. Se não contivesse um espaço em branco, a sequência resultante teria uma cadeia '8448', o que levaria a casos de teste com falha. Obrigado pelas sugestões!Befunge,
169161159 bytesExperimente online!
As duas primeiras linhas estão apenas empurrando a lista de números de teste para a pilha. Isso é feito em ordem de tamanho, pois às vezes pode ser mais fácil gerar um número como um deslocamento do número anterior da série, em vez de gerá-lo do zero. Quando chegamos aos números maiores, às vezes também podemos salvar um byte, gerando-os em pares, por exemplo,
"kV"3*\3*
nos dá 258 e 321 em nove bytes, onde individualmente eles pegariam cinco bytes cada.O loop principal está na linha três, executando da direita para a esquerda com o contorno. Isso apenas repete todos os números de teste na pilha, comparando o valor em si, o valor% 100 e o valor / 10. Se qualquer uma dessas combinações com o número de entrada ou o número <= 9, produzimos 1 e saímos. Se não houver correspondência, continuamos em loop. Se ficarmos sem números de teste na pilha, produziremos 0 e sairemos.
Agradeço a Mistah Figgins por me salvar alguns bytes.
fonte
0<@.!!<
para salvar 2 bytes. Isso depende do topo da pilha ser diferente de zero quando o IP desce na segunda seta. Experimente Online!Geléia ,
292419 bytesEconomizou 5 bytes graças à sugestão de @ Dennis de
K
eƓ
.Experimente online!
Explicação
fonte
9s3µUŒD;;Z;ŒDµ;UKƓẇ
economiza 5 bytes.123,456,789
devem ser os mesmos que:789,456,123
Ruby, 77 bytes
fonte
86
e24
falhará.!!
dos parênteses.festança, 75
gera algo e retorna 0 para todos os valores nessa lista
imprime nada e retorna 1 em todos os outros casos
fonte
Java, 397 bytes
fonte