Escriba un programa o función donde una matriz A (el valor máximo de las dimensiones de la matriz es 100) se transforma en una nueva matriz B. Cada elemento de la nueva matriz B es la suma de los vecinos positivos del elemento correspondiente de la matriz A .
Solo se consideran vecinos en las cuatro direcciones ortogonales, y los bordes no se envuelven.
Entrada de ejemplo:
1 2 3
4 -1 -2
-3 -4 10
1 2 10
Salida:
6 4 2
1 6 13
5 12 10
2 11 12
Reglas:
- Como entrada, use enteros.
- Este es un código de golf , por lo que gana el código más corto en bytes.
Respuestas:
MATL , 9 bytes
Pruébalo en línea!
Explicación
La matriz de entrada se multiplica por una máscara apropiada para hacer que los valores negativos sean iguales a 0. Luego se aplica una convolución 2D para calcular la suma de vecinos de cada entrada.
fuente
Octava,
464440 bytesAhorré2 bytes gracias alnúcleode@flawr@ LuisMendo fue 4 bytes más corto que el de @flawr.
¡Al igual que la respuesta de @ LuisMendo ! Sólo menos ... golf.
Puedes verlo aquí en ideone .
fuente
(x='aba')~=x'
lugar de[0 1 0;1 0 1;0 1 0]
.*
es una multiplicación matricial por elementos. La matriz booleana es, MATLAB es en gran parte sin tipo, tratada como numérica. EntoncesM>0
solo está actuando como una máscara.(x='aba')~=x'
. ¡Eso es increíble @Luis!JavaScript (ES6),
9994 bytesAcepta y devuelve una matriz bidimensional.
Editar: completamente reescrito cuando descubrí que los argumentos predeterminados funcionan cuando pasa un valor explícitamente indefinido, como cuando indexa el final de una matriz.
fuente
JavaScript (ES6),
9593 bytesfuente
Python con SciPy, 127 bytes
Esto calcula el resultado usando el método de Luis Mendo .
Pruébalo en línea
fuente
Mathcad, bytes
Utiliza convolución 2D estándar de la matriz filtrada con un núcleo 3x3. Las variantes con sumas de elementos negativos y núcleo diagonal también se agregaron como compensación de parte para que el programa no esté en ejecución por el mínimo de bytes.
Aún no se ha determinado el recuento de bytes, ya que la puntuación de Mathcad aún no se ha determinado. Sin embargo, usando la equivalencia del teclado, es la región de 28 bytes asumiendo que la entrada de matriz no cuenta para el total.
Tenga en cuenta que lo que ve en la imagen de arriba es exactamente cómo se ingresa y se muestra la solución en Mathcad.
fuente
Jalea,
232018 bytesPruébalo en línea!
Algoritmo
Digamos que solo hay una fila: [1,2,3,4].
Digamos que A es el resultado de anteponer un cero, es decir, [0,1,2,3,4].
B es el resultado de eliminar el primer elemento, es decir, [2,3,4].
Luego, el resultado final es simplemente A + B vectorizado, luego se elimina el último elemento.
Ahora, el algoritmo es aplicar esto a cada fila, así como a cada columna, luego encontrar su suma vectorizada.
¿A cada columna? Pensé que Jelly no es compatible con esto ...
Tienes razón. Por lo tanto, lo transpuse, apliqué a cada fila, luego lo volví a transponer.
Algoritmo para eliminar números negativos.
Aquí, solo agrega a cada número su absoluto. Elimina efectivamente los números negativos mientras duplica cada número positivo. Luego, simplemente reduzca a la mitad toda la matriz.
fuente
Pyth, 36 bytes
Pruébalo en línea!
Traducción directa de mi respuesta en gelatina .
fuente