El reto
Dada una cuadrícula de números (10 <= N <= 99) Devuelve el número con la suma más alta de los cuatro números adyacentes; Esos son los números arriba, abajo, a la derecha y a la izquierda del número, pero no a sí mismo.
- El número en sí mismo no cuenta, solo sus cuatro vecinos.
- Un número en el borde debe tratarse como si el número faltante fuera un 0.
- Diseñaré la prueba para evitar lazos.
- Los números no se repetirán.
- Este es el código de golf .
Ejemplo
Dado
56 98 32 96
12 64 45 31
94 18 83 71
Regreso
18
Una prueba real
Dado
98 95 67 66 57 16 40 94 84 37
87 14 19 34 83 99 97 78 50 36
18 44 29 47 21 86 24 15 91 61
60 41 51 26 10 58 11 62 55 71
42 85 56 12 46 81 93 65 49 77
89 13 74 39 54 76 92 33 82 90
96 88 70 79 80 28 25 20 75 68
38 63 17 72 53 48 73 30 45 69
64 35 32 31 23 43 22 52 27 59
Regreso
13
Dado
82 43 79 81 94 36 17 64 58
24 52 13 87 70 18 28 61 69
16 99 75 21 50 44 89 90 51
49 80 63 31 54 65 41 55 38
67 91 76 78 23 86 83 14 73
46 68 62 77 34 48 20 74 10
33 35 26 97 59 66 25 37 32
12 92 84 27 85 56 22 40 45
96 15 98 53 39 30 88 71 29
60 42 11 57 95 19 93 72 47
Regreso
15
Respuestas:
MATL ,
20151312 bytesAhorré 5 bytes gracias a Emigna, 2 gracias a Giuseppe y otro gracias a Luis Mendo.
Pruébalo en línea!
Explicación
fuente
APL (Dyalog Unicode) ,
3127262423 bytes SBCS-2 gracias a Cows quack. -1 gracias a ngn.
Función de prefijo tácito anónimo. Toma una matriz como argumento. Asume
⎕IO
( I ndex O rigin) ser0
, que es predeterminado en muchos sistemas.Pruébalo en línea!
,
descifrar (aplanar) la entrada{
…}⊃
Elija un elemento de acuerdo con el resultado de la siguiente función:⊢⍵
ceder el argumento (se separa3 3
de⍵
)…
⌺3 3
Aplique la siguiente función a cada vecindario de 3 por 3:⊢∘,
ignorar la información de borde a favor del vecindario desvencijado (aplanado)(
...)
aplique la siguiente función tácita a aquellos-/
la suma alterna (lit. asociativa derecha menos reducción)+/-
reste eso de la suma (esto da la suma de todos los demás elementos),
desentrañar (aplanar) que (el barrio suma)⍒
producir los índices que ordenarían eso⊃
elija el primero (es decir, el índice de la suma más alta)fuente
{⊃⍒,{+/1↓⍉4 2⍴⍵}⌺3 3⊢⍵}⊃,
? Editar: o incluso{⊃⍒,{⊢/+⌿4 2⍴⍵}⌺3 3⊢⍵}⊃,
{⊃⍒,(+/--/)⊢∘,⌺3 3⊢⍵}⊃,
Jalea , 22 bytes
Pruébalo en línea!
No tener incorporaciones de convolución como MATL y DyalogOlvidar su idioma tiene daños incorporados de convolución (gracias @dylnan), pero podemos hacer algo bien sin ellos, en parte gracias aŒM
yœị
. Primero, una función auxiliar para calcular vecinos en una sola dirección, que incidentalmente transpone la entrada:Visualmente, el cálculo es:
Interpretación: la celda (x, y) de este resultado es la suma de los vecinos horizontales de la celda (y, x). (Por ejemplo, aquí vemos que f (A) [2,3] = 16 = 7 + 9 = A [3,1] + A [3,3] .)
Entonces, la función principal:
fuente
æc
?Jalea , 18 bytes
Pruébalo en línea!
La función auxiliar encuentra los vecinos de cada elemento en cada fila. La función principal hace esto a las filas y las columnas luego encuentra el elemento que tiene la suma máxima de vecindad.
fuente
Wolfram Language (Mathematica) , 58 bytes
Pruébalo en línea!
fuente
Python 2 , 127 bytes
Pruébalo en línea!
fuente
Plantilla , 1 + 10 = 11 bytes (no competitivos)
Opción de línea de comando:
1
calcular 1 generaciónPruébalo en línea!
y
de la entrada original aplanada,⊃⍨
elija⊃
la primera⍒
en orden descendente,
de la entrada aplanada+/
sumas deN
los vecindarios von neumanN sin yofuente
y
a la lengua cuando vi que era necesario un acceso más fácil a la entrada original. Antes de eso, tenías que escribir en(,⍎'input')
lugar dey
.JavaScript (ES6), 94 bytes
Pruébalo en línea!
¿Cómo?
En lugar de buscar el máximo de la suma de los 4 vecinos, buscamos el mínimo m de la suma s de sus one-complementos. Esto nos permite procesar valores indefinidos como ceros, porque:
El mapa interno () está escrito de tal manera que no altera el contenido de la fila r . Por lo tanto, podemos guardar su resultado en p para probar los mejores vecinos en la próxima iteración.
Usamos:
~r[x-1]
para la celda izquierda~r[x+1]
para la celda correcta~p[x]
para la celda superior~(a[y+1]||0)[x]
para la celda inferiorfuente
K (ngn / k) ,
4340 bytesPruébalo en línea!
fuente
Java 8, 187 bytes
Pruébalo en línea.
Explicación:
fuente
Javascript ES6, 170 bytes
fuente