O 3x3 Hexa Prime Square Puzzle
Introdução
Consideramos quadrados 3x3 de dígitos hexadecimais (de 0
a F
) como:
2 E 3 1 F 3
8 1 5 7 2 7
D D 5 B B 9
Definimos um Hexa Prime Square 3x3 ( HPS3 ) como um quadrado para o qual todos os números hexadecimais lidos da esquerda para a direita e de cima para baixo são números primos ímpares (ou seja, números primos maiores que 2).
Isso é verdadeiro para o quadrado esquerdo e falso para o quadrado direito:
2 E 3 --> 0x2E3 = 739 1 F 3 --> 0x1F3 = 499
8 1 5 --> 0x815 = 2069 7 2 7 --> 0x727 = 1831
D D 5 --> 0xDD5 = 3541 B B 9 --> 0xBB9 = 3001
| | | | | |
| | +---> 0x355 = 853 | | +---> 0x379 = 889 = 7 x 127
| +-----> 0xE1D = 3613 | +-----> 0xF2B = 3883 = 11 x 353
+-------> 0x28D = 653 +-------> 0x17B = 379
Objetivo
Dada uma lista de 9 dígitos hexadecimais, seu objetivo é encontrar um arranjo que forme um HPS3.
Exemplo:
Input: 123558DDE
Possible output: 2E3815DD5 (a flattened representation of the above left example)
Entrada / Saída
Os formatos de entrada e saída são flexíveis. O único requisito é que os dígitos de saída sejam ordenados da esquerda para a direita e de cima para baixo. Abaixo estão algumas opções possíveis:
"2E3815DD5"
[ 0x2, 0xE, 0x3, 0x8, 0x1, 0x5, 0xD, 0xD, 0x5 ]
[ "2", "E", "3", "8", "1", "5", "D", "D", "5" ]
[
[ 0x2, 0xE, 0x3 ],
[ 0x8, 0x1, 0x5 ],
[ 0xD, 0xD, 0x5 ]
]
[ "2E3", "815", "DD5" ]
etc.
Não é necessário usar o mesmo formato para entrada e saída.
Regras
- Isso é código-golfe, então a resposta mais curta em bytes vence. As brechas padrão são proibidas.
- Seu algoritmo deve ser determinístico
- Você não pode simplesmente classificar a matriz até que ela seja válida, mesmo de maneira determinística (usando uma semente aleatória constante).
- Você pode listar todas as soluções possíveis para uma determinada entrada, mas isso não é necessário nem está sujeito a um bônus.
- Você não precisa dar suporte a entradas que não admitem nenhuma solução. (Está perfeitamente bem se o seu código estiver repetindo para sempre ou travando nesse caso.)
Casos de teste
Input Possible output
---------------------------
123558dde 2e3815dd5
1155578ab a7b851551
03bddffff ffd0dfb3f
35899beff 8f99e3bf5
15899bbdf 581bb9fd9
14667799f 6f1469779
13378bcdd 78d1cd33b
24577bbdd 7274bd5db
1118bbddd 11b18dbdd
223556cdd 623c25dd5
12557899a 8a5295971
113579bbd 5b3db7191
code-golf
primes
hexadecimal
Arnauld
fonte
fonte
Respostas:
05AB1E ,
2321 bytesUsa a codificação CP-1252 .
Muito lento para o TIO.
Explicação
fonte
Python 2,
212206197194 bytesRequer entrada entre aspas, como
"123558dde"
Salvando 9 e 3 bytes graças a Jonathan Allan
Encontrado novo filtro principal do xnor (modificado o quadrado de distância, já que não queremos 2 como primos aqui), o filtro principal antigo é de Bob
fonte
P+=[k][:p%k]
- quandop%k
não é0
a fatia cederá[k]
, quando é0
que vai ceder[]
.from itertools import*
é um truque de golfe que poupa alguns bytes. Também renuncie à eficiência e façak<5e3
.P
é ótimo.print[s for s in map(''.join,permutations(input()))if all(int(s[3*i:][:3],16)in P and int(s[i::3],16)in P for i in(0,1,2))]
Pitão,
2321 bytesO tempo limite termina online, mas termina em 1,5 minutos no meu laptop. Recebe entrada entre aspas.
Explicação
fonte
Geléia ,
3430 bytes(Eu devo poder usar um nfind para buscar a primeira correspondência,
1#
no lugar deÐfḢ
, por menos bytes e mais velocidade, mas estou vendo erros quando tento. EDIT: escreveu algumas alterações para possivelmente implementar isso no Jelly.)Pesquisa por força bruta de todas as permutações, filtrada pelos critérios, retornando a primeira correspondência.
Muito lento para TtyItOnline. Exemplos de saída local:
Quão?
fonte
J, 49 bytes
Pesquisa por força bruta que testa todas as permutações e gera todas as permutações que satisfazem as condições do quebra-cabeça.
O desempenho é bom o suficiente para calcular cada caso de teste em cerca de 3 segundos.
Uso
Explicação
fonte
Mathematica, 115 bytes
A entrada deve ser uma lista de caracteres (por exemplo
{"1", "2", "3", "5", "5", "8", "D", "D", "E"}
)fonte
Ruby, 146 bytes
A função anônima pega uma matriz de nove números inteiros, retorna uma solução como uma matriz de nove números inteiros. Baseia-se na função auxiliar
g
e arequire
.Esta versão de 140 bytes imprime todas as soluções possíveis, com os números inteiros como decimais (não tenho certeza se isso é permitido).
Ungolfed in program program
fonte
Groovy, 134 bytes
Encontra todas as soluções possíveis e as retorna como uma matriz, retorna
[]
se não houver uma solução.Exemplo de entrada:
123558dde
Saída:
Exemplo de entrada:
222222222
Saída:[]
Se alguém quiser que eu comente, grite com um irmão.
fonte