Introducción
Deje que un campo sea un rectángulo lleno solo con los caracteres -
y [0-9]
. Un ejemplo de un campo es:
11-011123
111-010--
0010---01
111-01234
Verá que este campo se ha separado en tres áreas más pequeñas:
Para calcular la puntuación de un área más pequeña, solo sumamos todos los números. Por ejemplo:
11
111
0010
111
1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9
El puntaje total para esta área es 9 . Ahora hacemos lo mismo para la segunda área:
011123
010
0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9
La puntuación total también es 9 . Ahora tenemos que examinar la última área:
01
01234
0 + 1 + 0 + 1 + 2 + 3 + 4 = 11
Esto tiene un puntaje total de 11 . El puntaje más alto en el campo es 11, así que esto es lo que necesitamos para generar.
La tarea
Dado un campo (en forma de una cadena 2D, una matriz, etc.), genera la puntuación más alta en el campo. Puede suponer que los campos dados siempre contendrán al menos 1 dígito. Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Casos de prueba
Caso de prueba 1:
Input:
1
Output:
1
Caso de prueba 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-
Output:
2
Caso de prueba 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764
Output:
69
Caso de prueba 4:
Input:
111-12
------
21--10
Output:
3
["111", "01234"]
?-
las áreas separadas? ¿Puedes aclarar la parte "lo que define un área", por favor?Respuestas:
MATL ,
545149 bytesLa entrada es una matriz de caracteres 2D en formato MATL (AB), con un
;
separador de filas. Las entradas en el ejemplo y en los casos de prueba son respectivamente:Pruébalo en línea!
Explicación
Esto funciona construyendo una matriz de adyacencia del gráfico definido por la relación "estar conectado". Como ejemplo, considere el campo 3 × 4
Las entradas en una matriz 2D se describen fácilmente en MATL utilizando la indexación lineal (columna mayor). En el caso 3 × 4, el índice lineal de cada entrada se da como
La matriz de adyacencia se construye en pasos usando la multiplicación de matrices. En el primer paso, se consideran vecinos inmediatos . Por ejemplo, el punto indexado 3 es vecino de sí mismo y de eso con el índice 2. No es vecino de 6 porque ese punto no contiene un número de acuerdo con el campo. En este ejemplo, la matriz de adyacencia de la relación "vecino inmediato" es la matriz L 12 × 12 dada como
(Se puede ver que la columna 3 tiene un valor
1
en las filas 2 y 3.) Esta matriz siempre es simétrica y su diagonal tiene valor1
para los puntos que no contienen-
.El siguiente paso sería la matriz de adyacencia de la relación "conectada como máximo con un punto intermedio ". Para obtenerlo, basta con multiplicar L por sí mismo y establecer entradas distintas de cero en
1
. En general, la matriz de adyacencia de la relación "conectada por algún camino", M , se obtiene elevando L a un exponente (en sentido matricial) que representa la longitud máxima posible del camino. Un límite superior de la longitud de trayectoria máxima es el número de entradas en distintos de cero L .Calcular la potencia de la matriz directamente puede causar un desbordamiento, ya que se producen grandes cantidades rápidamente. Por lo tanto, es mejor multiplicar gradualmente por la misma matriz, convirtiendo las entradas distintas de cero en 1 después de cada paso para evitar que se acumulen grandes cantidades.
La columna i de M representa los puntos que están conectados (por cualquier ruta) con el punto i . Ahora, el campo de nivel se puede reducir a un vector de columna c en orden lineal, donde cada entrada contiene el número correspondiente o un valor indefinido para
-
. Entonces, en este caso, c seríaMutiplying cada columna de M por c elemento a elemento y el cálculo de la suma de cada columna proporciona, para cada punto i , la puntuación total del punto de área i pertenece. Un área se define por todos los puntos que están conectados entre sí. Tenga en cuenta que muchas columnas darán el mismo resultado; a saber, las columnas i y j darán la misma suma si los puntos i y j están conectados (pertenecen a la misma área). El resultado final es el máximo de esas sumas.
fuente
JavaScript (ES6), 157 bytes
Explicación
Toma un campo de entrada como una cadena. Para cada número en el campo, suma todos los números en el área. Lo hace iterando sobre cada número en el campo varias veces, agregando el número a la puntuación si una celda adyacente contiene un número previamente contado. Los números contados que forman parte del área se representan estableciéndolos en 99 para que no se vuelvan a contar. Produce el puntaje más alto como un número.
fuente
Pyth, 93 bytes
Pruébalo en línea!
Cómo funciona
Primer paso: leer la entrada
Segundo paso: definir una función para evaluar un área
Tercer paso: lea todas las áreas y encuentre el máximo requerido
fuente