Introducción
Para los propósitos de este desafío, definiremos los vecinos de un elemento en una matriz cuadrada A (tal que E = A i , j ) como todas las entradas de A que están inmediatamente adyacentes en diagonal, horizontal o vertical a E (es decir ellos "rodean" E , sin envolver).
Para los pedantes, una definición formal de los vecinos de para unn×nmatixAes (0-indexado): N i , donde E i ,
Digamos que el elemento en el índice
Tarea
Suficientes historias: dada una matriz cuadrada de enteros positivos, arroje uno de los siguientes:
- Una lista plana de elementos (deduplicados o no) que indica todas las entradas que ocupan algunos índices en modo que los vecinos sean hostiles.M N i ,
- Una matriz booleana con s en las posiciones donde los vecinos son hostiles y caso contrario (puede elegir cualquier otro valor consistente en lugar de y ).0 0 1
- La lista de pares de índices que representan vecindarios hostiles.
Implementación de referencia en Physica : también admite la sintaxis de Python para E / S. Puede tomar entradas y proporcionar salidas a través de cualquier método estándar y en cualquier formato razonable, mientras toma nota de que estas lagunas están prohibidas de forma predeterminada. Este es el código de golf, por lo que gana el código más corto en bytes (en todos los idiomas).
Además, también puede tomar el tamaño de la matriz como entrada y, además, puede tomar la matriz como una lista plana, ya que siempre será cuadrada.
Ejemplo
Considere la siguiente matriz:
Los vecinos correspondientes de cada elemento son:
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
Y, por lo tanto, el resultado debe ser uno de los siguientes:
{27; 53}
{{0; 0; 0}; {1; 0; 0}; {1; 0; 0}}
{(1; 0); (2; 0)}
Casos de prueba
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)]
fuente
Respuestas:
APL (Dyalog) , 17 bytes
Pruébalo en línea! (créditos a ngn por traducir los casos de prueba a APL)
Breve explicacion
(×/∘,↓)⌺3 3
obtiene el producto de cada elemento con sus vecinos.Luego divido por el argumento
÷⊢
, de modo que cada entrada en la matriz ha sido asignada al producto de sus vecinos.Finalmente, tomo el mcd del argumento con esta matriz
⊢∨
y compruebo la igualdad con 1,1=
Tenga en cuenta que, al igual que con la respuesta de ngn , esto falla para algunas entradas debido a un error en el intérprete.
fuente
JavaScript (ES6), 121 bytes
Devuelve una matriz de valores booleanos, donde falso significa hostil.
Pruébalo en línea!
¿Cómo?
El método utilizado para aislar a los 8 vecinos de cada celda es similar al que describí aquí .
Comentado
fuente
MATL , 22 bytes
La entrada es una matriz. La salida es todos los números con vecinos hostiles.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación con ejemplo trabajado
Considere la entrada
[38, 77, 11; 17, 51, 32; 66, 78, 19]
como un ejemplo. El contenido de la pila se muestra de abajo hacia arriba.fuente
APL (Dyalog Classic) ,
2322 bytes-1 byte gracias a @ H.PWiz
Pruébalo en línea!
no admite matrices menores de 3x3 debido a un error en el intérprete
fuente
(⊃∨⊢)
->∨∘⊂⍨
CreoJalea , 24 bytes
Hmm, parece largo.
Un enlace monádico que acepta una lista de listas de enteros positivos que devuelve una lista de cada uno de los valores que se encuentran en vecindades hostiles (versión 1 sin deduplicación).
Pruébalo en línea! O ver un conjunto de pruebas .
¿Cómo?
fuente
Python 2 ,
182177166 bytesPruébalo en línea!
Emite una lista de listas con entradas verdaderas / falsas.
fuente
Haskell , 95 bytes
Pruébalo en línea!
La función
?
toma la matrizm
como una lista de listas y el tamaño de la matrizn
; devuelve la lista de entradas en hostilidad .fuente