Étant donné un tableau rectangulaire non vide d'entiers de 0
à 9
, affichez la quantité de cellules qui sont 8
et n'ont pas de voisin qui l'est 8
. Le voisin est ici compris au sens de Moore , c'est-à-dire y compris les diagonales. Ainsi, chaque cellule a des 8
voisins, à l'exception des cellules situées aux bords du tableau.
Par exemple, étant donné l'entrée
8 4 5 6 5
9 3 8 4 8
0 8 6 1 5
6 7 9 8 2
8 8 7 4 2
la sortie devrait être 3
. Les trois cellules qualifiées seraient les suivantes, marquées d'un astérisque (mais seul le nombre de ces entrées devrait être affiché):
* 4 5 6 5
9 3 8 4 *
0 8 6 1 5
6 7 9 * 2
8 8 7 4 2
Règles supplémentaires
Vous pouvez éventuellement prendre deux nombres définissant la taille du tableau comme entrées supplémentaires.
L'entrée peut être prise par tout moyen raisonnable . Le format est flexible comme d'habitude. Par exemple, il peut s'agir d'un tableau de caractères 2D, ou d'une liste de listes de nombres, ou d'une liste plate.
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
Le code le plus court en octets gagne.
Cas de test
Contribution:
8 4 5 6 5 9 3 8 4 8 0 8 6 1 5 6 7 9 8 2 8 8 7 4 2
Sortie:
3
Contribution
8 8 2 3
Sortie:
0
Contribution:
5 3 4 2 5 2
Sortie:
0
Contribution:
5 8 3 8
Sortie:
2
Contribution:
8 0 8
Sortie:
2
.Contribution:
4 2 8 5 2 6 1 8 8 5 5 8
Sortie:
1
Contribution:
4 5 4 3 8 1 8 2 8 2 7 7 8 3 9 3 9 8 7 8 5 4 2 8 4 5 0 2 1 8 6 9 1 5 4 3 4 5 6 1
Sortie
3
.Contribution:
8
Sortie:
1
Contribution:
8 5 8 1 6 8 7 7 9 9 2 8 2 7 8 3 2 8 4 9 7 3 2 7 9 2 9 7 1 9 5 6 6 9 8 7 3 1 5 2 1 9 9 7 1 8 8 2 3 5 6 8 1 4 7 5
Sortie:
4
.Contribution:
8 1 8 2 5 7 8 0 1
Sortie:
3
.
Entrées au format MATLAB:
[8 4 5 6 5; 9 3 8 4 8; 0 8 6 1 5; 6 7 9 8 2; 8 8 7 4 2]
[8 8; 2 3]
[5 3 4; 2 5 2]
[5 8 3 8]
[8; 0; 8]
[4 2 8 5; 2 6 1 8; 8 5 5 8]
[4 5 4 3 8 1 8 2; 8 2 7 7 8 3 9 3; 9 8 7 8 5 4 2 8; 4 5 0 2 1 8 6 9; 1 5 4 3 4 5 6 1]
[8]
[8 5 8 1 6 8 7 7; 9 9 2 8 2 7 8 3; 2 8 4 9 7 3 2 7; 9 2 9 7 1 9 5 6; 6 9 8 7 3 1 5 2; 1 9 9 7 1 8 8 2; 3 5 6 8 1 4 7 5]
[8 1 8; 2 5 7; 8 0 1]
Entrées au format Python:
[[8, 4, 5, 6, 5], [9, 3, 8, 4, 8], [0, 8, 6, 1, 5], [6, 7, 9, 8, 2], [8, 8, 7, 4, 2]]
[[8, 8], [2, 3]]
[[5, 3, 4], [2, 5, 2]]
[[5, 8, 3, 8]]
[[8], [0], [8]]
[[4, 2, 8, 5], [2, 6, 1, 8], [8, 5, 5, 8]]
[[4, 5, 4, 3, 8, 1, 8, 2], [8, 2, 7, 7, 8, 3, 9, 3], [9, 8, 7, 8, 5, 4, 2, 8], [4, 5, 0, 2, 1, 8, 6, 9], [1, 5, 4, 3, 4, 5, 6, 1]]
[[8]]
[[8, 5, 8, 1, 6, 8, 7, 7], [9, 9, 2, 8, 2, 7, 8, 3], [2, 8, 4, 9, 7, 3, 2, 7], [9, 2, 9, 7, 1, 9, 5, 6], [6, 9, 8, 7, 3, 1, 5, 2], [1, 9, 9, 7, 1, 8, 8, 2], [3, 5, 6, 8, 1, 4, 7, 5]]
[[8, 1, 8], [2, 5, 7], [8, 0, 1]]
Les sorties:
3, 0, 0, 2, 2, 1, 3, 1, 4, 3
la source
Réponses:
MATL ,
211710 octetsEssayez-le en ligne!
Merci à Luis Mendo pour son aide dans le chat et pour avoir suggéré une convolution 2D.
Explication:
la source
R ,
117 6359 octetsEssayez-le en ligne!
dist
calcule les distances (la valeur par défaut est euclidienne) entre les lignes d'une matrice.which
avec le deuxième argumentTRUE
renvoie les coordonnées où le prédicat est vrai.Les coordonnées sont voisines si la distance entre elles n'est pas supérieure à la racine carrée de 2, mais l'intérieur
<2
est assez bon car la distance possible saute desqrt(2)
ro2
.la source
colSums()^2<=2
de fonctionner.sqrt(2)
sauts possibles2
(par exemplesort(c(dist(expand.grid(1:6,1:6))), decreasing = TRUE))
), donc nous étions trop intelligents là-bas.APL (Dyalog Classic) ,
292825 octetsEssayez-le en ligne!
la source
1
(sauf si explicitement défini). Ça a du sens.Gelée ,
1815 octetsEssayez-le en ligne!
Comment ça marche
Solution précédente, 18 octets
Essayez-le en ligne!
Je voulais partager une autre approche, bien que ce soit 1 octet de plus que la solution de Jonathan Allan .
Comment ça marche
la source
JavaScript (Node.js) ,
8885 octetsEssayez-le en ligne!
Merci Arnauld pour 2 octets
la source
J ,
43, 4037 octets-3 octets grâce à Bubbler
Essayez-le en ligne!
Explication:
La première partie de l'algorithme garantit que nous pouvons appliquer une fenêtre coulissante 3x3 à l'entrée. Ceci est réalisé en ajoutant une rangée de zéros et une rotation de 90 degrés, répétée 4 fois.
la source
@:
et se déplaçant|.
. Notez qu'au@
lieu de@:
ne fonctionne pas.Retina 0.8.2 , 84 octets
Essayez-le en ligne! Explication:
Enveloppez chaque ligne dans des non-
8
caractères afin que tous les8
s aient au moins un caractère de chaque côté.Ceci est la dernière étape, donc le comptage des correspondances est implicite. Le
m
modificateur fait correspondre les caractères^
et$
au début ou à la fin d'une ligne.Ne faites pas correspondre un caractère directement après un 8, ou ...
... un caractère sous un 8; le
(?(1).)^(?<-1>.)*
correspond à la même colonne que le¶(.)*
sur la ligne suivante, mais le.?.?
permet8
d'être 1 à gauche ou à droite du caractère après le.
sur la ligne suivante.Match
8
s.Ne faites pas correspondre un 8 juste avant un 8, ou ...
... un caractère avec un 8 dans la ligne ci-dessous; encore une fois, le
(?<-2>.)*$(?(2).)
correspond à la même colonne que le(.)*¶
sur la ligne précédente, mais le.?.?
permet8
d'être 1 à gauche ou à droite de8
avant le.
sur la ligne précédente.la source
Gelée , 17 octets
Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
la source
J, 42 octets
Essayez-le en ligne!
explication
L'approche de haut niveau ici est similaire à celle utilisée dans la solution APL classique du jeu de la vie: https://www.youtube.com/watch?v=a9xAKttWgP4 .
Dans cette solution, nous déplaçons notre matrice dans les 8 directions voisines possibles, créant 8 doublons de l'entrée, les empilons, puis ajoutons les «plans» ensemble pour obtenir le nombre de voisins.
Ici, nous utilisons une astuce "multiplier par l'infini" pour adapter la solution à ce problème.
la source
~
et>
Java 8,
181157156 156 octets-24 octets grâce à @ OlivierGrégoire .
Prend les dimensions comme paramètres supplémentaires
R
(quantité de lignes) etC
(quantité de colonnes).Les cellules sont vérifiées assez similaires comme je l'ai fait dans ma réponse au simulateur Fryer .
Essayez-le en ligne.
Explication:
la source
Python 2 , 130 octets
Essayez-le en ligne!
la source
Powershell, 121 octets
Script de test moins golfé:
Sortie:
Explication:
Tout d'abord, le script calcule la longueur de la première chaîne.
Deuxièmement, il ajoute une bordure supplémentaire aux chaînes. La chaîne de
réalitéaugmentée aime:représente la chaîne multiligne:
Remarque 1: le nombre de
=
est suffisant pour une chaîne de n'importe quelle longueur.Remarque 2: un grand nombre de
=
n'affecte pas la recherche de huit.Ensuite, l'expression régulière
(?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})
recherche le chiffre8
avec les non-huit précédents(?<=[^8]{3}.{$l}[^8])
et les non-huit suivants(?=[^8].{$l}[^8]{3})
:Enfin, le nombre de correspondances est renvoyé en conséquence.
la source
Gelée , 12 octets
Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6), 106 octets
Essayez-le en ligne!
Approche au niveau du bit, 110 octets
Essayez-le en ligne!
la source
[[7]]
Clojure ,
227198 octetsAie. Certainement pas le plus court ici par tous les moyens. 54 octets de parenthèses est tueur. J'en suis encore relativement satisfait.
-29 octets en créant une fonction d'assistance qui génère une gamme puisque je faisais que deux fois, en changeant l'
reduce
une(count (filter
configuration, et de se débarrasser de la macro filetage après le golf.Où
test-cases
est un tableau contenant tous les "cas de test Python"Essayez-le en ligne!
la source