Dada una matriz rectangular no entera de enteros de 0
a 9
, genera la cantidad de celdas que son 8
y no tienen un vecino que es 8
. Vecino se entiende aquí en el sentido de Moore , es decir, incluyendo diagonales. Entonces cada celda tiene 8
vecinos, excepto las celdas en los bordes de la matriz.
Por ejemplo, dada la entrada
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 salida debería ser 3
. Las tres celdas de calificación serían las siguientes, marcadas con un asterisco (pero solo se debería mostrar la cantidad de tales entradas):
* 4 5 6 5
9 3 8 4 *
0 8 6 1 5
6 7 9 * 2
8 8 7 4 2
Reglas adicionales
Opcionalmente, puede tomar dos números que definen el tamaño de la matriz como entradas adicionales.
La entrada puede tomarse por cualquier medio razonable . El formato es flexible como de costumbre. Por ejemplo, puede ser una matriz de caracteres 2D, o una lista de listas de números, o una lista plana.
Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
El código más corto en bytes gana.
Casos de prueba
Entrada:
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
Salida:
3
Entrada
8 8 2 3
Salida:
0
Entrada:
5 3 4 2 5 2
Salida:
0
Entrada:
5 8 3 8
Salida:
2
Entrada:
8 0 8
Salida:
2
.Entrada:
4 2 8 5 2 6 1 8 8 5 5 8
Salida:
1
Entrada:
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
Salida
3
.Entrada:
8
Salida:
1
Entrada:
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
Salida:
4
.Entrada:
8 1 8 2 5 7 8 0 1
Salida:
3
.
Entradas en formato 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]
Entradas en formato 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]]
Salidas:
3, 0, 0, 2, 2, 1, 3, 1, 4, 3
fuente
Respuestas:
MATL ,
211710 bytesPruébalo en línea!
Gracias a Luis Mendo por su ayuda en el chat y por sugerir una convolución 2D.
Explicación:
fuente
R ,
117 6359 bytesPruébalo en línea!
dist
calcula distancias (el valor predeterminado es Euclidiano) entre filas de una matriz.which
con el segundo argumentoTRUE
devuelve las coordenadas donde el predicado es verdadero.Las coordenadas son vecinas si la distancia entre ellas no es mayor que la raíz cuadrada de 2, pero el interior
<2
es lo suficientemente bueno porque la posible distancia salta desqrt(2)
ro2
.fuente
colSums()^2<=2
trabajar.sqrt(2)
saltos posibles2
(por ejemplosort(c(dist(expand.grid(1:6,1:6))), decreasing = TRUE))
), por lo que estábamos siendo demasiado inteligentes allí.APL (Dyalog Classic) ,
292825 bytesPruébalo en línea!
fuente
1
(excepto no establecido explícitamente). Eso tiene sentido.Jalea ,
1815 bytesPruébalo en línea!
Cómo funciona
Solución anterior, 18 bytes
Pruébalo en línea!
Quería compartir otro enfoque, aunque esto es 1 byte más largo que la solución de Jonathan Allan .
Cómo funciona
fuente
JavaScript (Node.js) ,
8885 bytesPruébalo en línea!
Gracias Arnauld por 2 bytes
fuente
J ,
43, 4037 bytes-3 bytes gracias a Bubbler
Pruébalo en línea!
Explicación:
La primera parte del algoritmo asegura que podemos aplicar una ventana deslizante de 3x3 a la entrada. Esto se logra al anteponer una fila de ceros y una rotación de 90 grados, que se repite 4 veces.
fuente
@:
y moviendo|.
. Tenga@
en cuenta que en lugar de@:
no funciona.Retina 0.8.2 , 84 bytes
Pruébalo en línea! Explicación:
Envuelva cada línea en
8
caracteres que no sean caracteres para que todos8
tengan al menos un carácter en cada lado.Esta es la última etapa, por lo que está implícito contar partidos. El
m
modificador hace que los caracteres^
y$
coincidan al principio o al final de cualquier línea.No coincida con un personaje directamente después de un 8, o ...
... un personaje debajo de un 8; el
(?(1).)^(?<-1>.)*
coincide con la misma columna que¶(.)*
en la línea siguiente, pero.?.?
permite8
que quede 1 a la izquierda o derecha del personaje después.
de la línea siguiente.Partido
8
s.No coincida con un 8 inmediatamente antes de un 8, o ...
... un personaje con un 8 en la línea de abajo; de nuevo, el
(?<-2>.)*$(?(2).)
juego la misma columna que el(.)*¶
en la línea anterior, pero la.?.?
permite el8
que se 1 hacia la izquierda o derecha de la8
antes de la.
en la línea anterior.fuente
Jalea , 17 bytes
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
J, 42 bytes
Pruébalo en línea!
explicación
El enfoque de alto nivel aquí es similar al utilizado en la solución APL clásica para el juego de la vida: https://www.youtube.com/watch?v=a9xAKttWgP4 .
En esa solución, cambiamos nuestra matriz en las 8 direcciones vecinas posibles, creando 8 duplicados de la entrada, los apilamos y luego sumamos los "planos" para obtener los recuentos de vecinos.
Aquí, usamos un truco de "multiplicar por infinito" para adaptar la solución a este problema.
fuente
~
y>
Java 8,
181157156 bytes-24 bytes gracias a @ OlivierGrégoire .
Toma las dimensiones como parámetros adicionales
R
(cantidad de filas) yC
(cantidad de columnas).Las células se comprueban bastante similares como lo hice en mi simulador de la freidora respuesta .
Pruébalo en línea.
Explicación:
fuente
Python 2 , 130 bytes
Pruébalo en línea!
fuente
Powershell, 121 bytes
Menos guión de prueba de golf:
Salida:
Explicación:
Primero, el script calcula una longitud de la primera cadena.
En segundo lugar, agrega un borde adicional a las cadenas. Me gusta de cadena de
realidadaumentada :representa la cadena multilínea:
Nota 1: el número de
=
es suficiente para una cadena de cualquier longitud.Nota 2: una gran cantidad de
=
no afecta la búsqueda de ochos.A continuación, la expresión regular
(?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})
busca el dígito8
con los no ochos anteriores(?<=[^8]{3}.{$l}[^8])
y los siguientes no ochos(?=[^8].{$l}[^8]{3})
:Finalmente, se devuelve el número de coincidencias como resultado.
fuente
Jalea , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 106 bytes
Pruébalo en línea!
Enfoque bit a bit, 110 bytes
Pruébalo en línea!
fuente
[[7]]
Clojure ,
227198 bytesAy. Definitivamente no es el más corto aquí de ninguna manera. 54 bytes de paréntesis son asesinos. Sin embargo, todavía estoy relativamente feliz con eso.
-29 bytes creando una función auxiliar que genera un rango ya que lo estaba haciendo dos veces, cambiando el
reduce
a un(count (filter
configuración y deshaciéndome de la macro de subprocesos después del golf.¿Dónde
test-cases
está una matriz que contiene todos los "casos de prueba de Python"Pruébalo en línea!
fuente