introduction
Aux fins de ce défi, nous définirons les voisins d'un élément dans une matrice carrée (telle que ) comme toutes les entrées de qui sont immédiatement adjacentes en diagonale, horizontalement ou verticalement à (c'est-à-dire qu'ils "entourent" , sans s'enrouler).E
Pour les pédants, une définition formelle des voisins de pour un matix est (0-indexée): où
Disons que l'élément d'index vit en hostilité s'il est coprime avec tous ses voisins (c'est-à-dire, ). Malheureusement, cette pauvre entrée ne peut même pas emprunter une tasse de sucre à ses résidents grossiers à proximité ...
Tâche
Assez d'histoires: étant donné une matrice carrée d'entiers positifs, sortez l'un des éléments suivants:
- Une liste plate d'éléments (dédupliqués ou non) indiquant toutes les entrées qui occupent certains indices dans tels que les voisins sont hostiles.
- Une matrice booléenne avec s aux positions où les voisins sont hostiles et sinon (vous pouvez choisir n'importe quelle autre valeur cohérente à la place de et ).
- La liste des paires d'indices qui représentent des quartiers hostiles.
Implémentation de référence dans Physica - prend également en charge la syntaxe Python pour les E / S. Vous pouvez prendre des entrées et fournir des sorties par n'importe quelle méthode standard et dans n'importe quel format raisonnable, tout en prenant note que ces failles sont interdites par défaut. C'est du code-golf, donc le code le plus court en octets (dans toutes les langues) gagne!
De plus, vous pouvez également prendre la taille de la matrice en entrée et prendre la matrice comme une liste plate car elle sera toujours carrée.
Exemple
Considérez la matrice suivante:
Les voisins correspondants de chaque élément sont:
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
Et donc la sortie doit être l'une des suivantes:
{27; 53}
{{0; 0; 0}; {1; 0; 0}; {1; 0; 0}}
{(1; 0); (2; 0)}
Cas de test
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)]
la source
Réponses:
APL (Dyalog) , 17 octets
Essayez-le en ligne! (crédits à ngn pour la traduction des cas de test en APL)
Brève explication
(×/∘,↓)⌺3 3
obtient le produit de chaque élément avec ses voisins.Ensuite, je divise par l'argument
÷⊢
, de sorte que chaque entrée de la matrice a été mappée au produit de ses voisins.Enfin, je prends le pgcd de l'argument avec cette matrice
⊢∨
et vérifie l'égalité avec 1,1=
Notez, comme avec la réponse de ngn , cela échoue pour certaines entrées en raison d'un bogue dans l'interpréteur.
la source
JavaScript (ES6), 121 octets
Renvoie une matrice de valeurs booléennes, où false signifie hostile.
Essayez-le en ligne!
Comment?
La méthode utilisée pour isoler les 8 voisins de chaque cellule est similaire à celle que j'ai décrite ici .
Commenté
la source
MATL , 22 octets
L'entrée est une matrice. La sortie est tous les nombres avec des voisins hostiles.
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication avec exemple travaillé
Considérez la saisie
[38, 77, 11; 17, 51, 32; 66, 78, 19]
comme exemple. Le contenu de la pile est affiché de bas en haut.la source
APL (Dyalog Classic) ,
2322 octets-1 octet grâce à @ H.PWiz
Essayez-le en ligne!
ne prend pas en charge les matrices inférieures à 3x3 en raison d' un bogue dans l'interpréteur
la source
(⊃∨⊢)
->∨∘⊂⍨
je penseGelée , 24 octets
Hmm, ça semble long.
Un lien monadique acceptant une liste de listes d'entiers positifs qui renvoie une liste de chacune des valeurs qui se trouvent dans des quartiers hostiles (version 1 sans déduplication).
Essayez-le en ligne! Ou consultez une suite de tests .
Comment?
la source
Python 2 ,
182177166 octetsEssayez-le en ligne!
Produit une liste de listes avec des entrées Vrai / Faux.
la source
Haskell , 95 octets
Essayez-le en ligne!
La fonction
?
prend la matricem
comme une liste de listes et la taille de la matricen
; il renvoie la liste des entrées en hostilité .la source