Introdução
Para os propósitos deste desafio, definiremos os vizinhos de um elemento em uma matriz quadrada (como ) como todas as entradas de que são imediatamente adjacentes na diagonal, horizontal ou vertical a (ou seja, eles "envolvem" , sem envolver).A E = A i , j A E E
Para pedantes, uma definição formal dos vizinhos de para um matix é (indexada 0): onde n×nA N i ,E i ,
Digamos que o elemento no índice hostil se for coprime para todos os seus vizinhos (ou seja, ). Infelizmente, essa entrada ruim não pode emprestar nem um copo de açúcar de seus rudes residentes nas proximidades ...
Tarefa
Histórias suficientes: dada uma matriz quadrada de números inteiros positivos, produza um dos seguintes:
- Uma lista simples de elementos (deduplicados ou não) indicando todas as entradas que ocupam alguns índices em modo que os vizinhos sejam hostis.
- Uma matriz booleana com s nas posições em que os vizinhos são hostis e caso contrário (você pode escolher outros valores consistentes no lugar de e ).
- A lista de pares de índices que representam bairros hostis.
Implementação de referência no Physica - suporta também a sintaxe do Python para E / S. Você pode obter entrada e fornecer saída através de qualquer método padrão e em qualquer formato razoável, observando que essas brechas são proibidas por padrão. Isso é código-golfe, então o código mais curto em bytes (em todos os idiomas) vence!
Além disso, você pode considerar o tamanho da matriz como entrada e, adicionalmente, a matriz como uma lista simples, pois sempre será quadrada.
Exemplo
Considere a seguinte matriz:
Os vizinhos correspondentes de cada elemento são:
i j – E -> Neighbours | All coprime to E?
|
0 0 – 64 -> {10; 27; 22} | False
0 1 – 10 -> {64; 14; 27; 22; 32} | False
0 2 – 14 -> {10; 22; 32} | False
1 0 – 27 -> {64; 10; 22; 53; 58} | True
1 1 – 22 -> {64; 10; 14; 27; 32; 53; 58; 36} | False
1 2 – 32 -> {10; 14; 22; 58; 36} | False
2 0 – 53 -> {27; 22; 58} | True
2 1 – 58 -> {27; 22; 32; 53; 36} | False
2 2 – 36 -> {22; 32; 58} | False
E, portanto, a saída deve ser uma das seguintes:
{27; 53}
{{0; 0; 0}; {1; 0; 0}; {1; 0; 0}}
{(1; 0); (2; 0)}
Casos de teste
Input –> Version 1 | Version 2 | Version 3
[[36, 94], [24, 69]] ->
[]
[[0, 0], [0, 0]]
[]
[[38, 77, 11], [17, 51, 32], [66, 78, 19]] –>
[38, 19]
[[1, 0, 0], [0, 0, 0], [0, 0, 1]]
[(0, 0), (2, 2)]
[[64, 10, 14], [27, 22, 32], [53, 58, 36]] ->
[27, 53]
[[0, 0, 0], [1, 0, 0], [1, 0, 0]]
[(1, 0), (2, 0)]
[[9, 9, 9], [9, 3, 9], [9, 9, 9]] ->
[]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]] ->
[1, 1, 1, 1, 1, 1, 1, 1, 1] or [1]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[[35, 85, 30, 71], [10, 54, 55, 73], [80, 78, 47, 2], [33, 68, 62, 29]] ->
[71, 73, 47, 29]
[[0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]
[(0, 3), (1, 3), (2, 2), (3, 3)]
fonte
Respostas:
APL (Dyalog) , 17 bytes
Experimente online! (créditos para ngn por traduzir os casos de teste para APL)
Breve explicação
(×/∘,↓)⌺3 3
obtém o produto de cada elemento com seus vizinhos.Em seguida, divido pelo argumento
÷⊢
, para que cada entrada na matriz seja mapeada para o produto de seus vizinhos.Finalmente, pego o MDC do argumento com essa matriz
⊢∨
e verifico a igualdade com 1,1=
Observe que, como na resposta de ngn , isso falha em algumas entradas devido a um erro no intérprete.
fonte
JavaScript (ES6), 121 bytes
Retorna uma matriz de valores booleanos, onde false significa hostil.
Experimente online!
Como?
O método usado para isolar os 8 vizinhos de cada célula é semelhante ao descrito aqui .
Comentado
fonte
MATL , 22 bytes
Entrada é uma matriz. Saída é todos os números com vizinhos hostis.
Experimente online! Ou verifique todos os casos de teste .
Explicação com exemplo trabalhado
Considere a entrada
[38, 77, 11; 17, 51, 32; 66, 78, 19]
como um exemplo. O conteúdo da pilha é mostrado de baixo para cima.fonte
APL (Dyalog Classic) ,
2322 bytes-1 byte graças a @ H.PWiz
Experimente online!
não suporta matrizes menores que 3x3 devido a um erro no intérprete
fonte
(⊃∨⊢)
->∨∘⊂⍨
Eu achoGelatina , 24 bytes
Hmm, parece longo.
Um link monádico que aceita uma lista de listas de números inteiros positivos que retorna uma lista de cada um dos valores que estão em vizinhanças hostis (versão 1 sem redução de duplicação).
Experimente online! Ou veja uma suíte de testes .
Como?
fonte
Python 2 ,
182177166 bytesExperimente online!
Produz uma lista de listas com entradas True / False.
fonte
Haskell , 95 bytes
Experimente online!
A função
?
leva a matrizm
como uma lista de listas e o tamanho da matrizn
; retorna a lista de entradas em hostilidade .fonte