Dieciséis montones de queso se colocan en un cuadrado de 4x4. Están etiquetados del al . La pila más pequeña es y la más grande es .
El Ratón Hambriento está tan hambriento que siempre va directo al montón más grande (es decir, ) y se lo come de inmediato.
Después de eso, va a la pila vecina más grande y rápidamente también se come esa. (Sí ... tiene mucha hambre.) Y así sucesivamente hasta que ya no haya una pila vecina.
Una pila puede tener hasta 8 vecinos (horizontal, vertical y diagonal). No hay envoltura.
Ejemplo
Comenzamos con las siguientes pilas de queso:
El Ratón Hambriento primero come , y luego su mayor pila vecina, que es .
Sus próximos movimientos son , , , , , , , , y en este orden exacto.
Ya no hay queso alrededor del Ratón Hambriento, por lo que se detiene allí.
El reto
Dada la configuración inicial del queso, su código debe imprimir o devolver la suma de las pilas restantes una vez que el Ratón Hambriento haya dejado de comerlas.
Para el ejemplo anterior, la respuesta esperada es .
Reglas
- Debido a que el tamaño de la matriz de entrada es fijo, puede tomarlo como una matriz 2D o una matriz unidimensional.
- Se garantiza que cada valor del al aparecerá exactamente una vez.
- Este es el código de golf .
Casos de prueba
[ [ 4, 3, 2, 1], [ 5, 6, 7, 8], [12, 11, 10, 9], [13, 14, 15, 16] ] --> 0
[ [ 8, 1, 9, 14], [11, 6, 5, 16], [13, 15, 2, 7], [10, 3, 12, 4] ] --> 0
[ [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16] ] --> 1
[ [10, 15, 14, 11], [ 9, 3, 1, 7], [13, 5, 12, 6], [ 2, 8, 4, 16] ] --> 3
[ [ 3, 7, 10, 5], [ 6, 8, 12, 13], [15, 9, 11, 4], [14, 1, 16, 2] ] --> 12
[ [ 8, 9, 3, 6], [13, 11, 7, 15], [12, 10, 16, 2], [ 4, 14, 1, 5] ] --> 34
[ [ 8, 11, 12, 9], [14, 5, 10, 16], [ 7, 3, 1, 6], [13, 4, 2, 15] ] --> 51
[ [13, 14, 1, 2], [16, 15, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12] ] --> 78
[ [ 9, 10, 11, 12], [ 1, 2, 4, 13], [ 7, 8, 5, 14], [ 3, 16, 6, 15] ] --> 102
[ [ 9, 10, 11, 12], [ 1, 2, 7, 13], [ 6, 16, 4, 14], [ 3, 8, 5, 15] ] --> 103
[[9, 10, 11, 12], [1, 2, 7, 13], [6, 16, 4, 14], [3, 8, 5, 15]]
Respuestas:
Python 2 ,
133130 bytesPruébalo en línea!
Toma una lista aplanada de 16 elementos.
Cómo funciona
fuente
a[i+x]for x in[-6,-5,-4,-1,1,4,5,6]
se puede acortar aa[i+j+j/3*2-6]for j in range(9)
(la entrada cero es inofensiva). Python 3 seguramente puede ser más corto al codificar una cadena de bytes de longitud 8, pero Python 2 aún podría ser mejor en general.a=[0]*5
for r in input():a=r+[0]+a
. Tal vez hay una solución de corte de cadena aún más corta que no requiere iteración.Python 2 , 111 bytes
Pruébalo en línea!
Método y casos de prueba adaptados de Bubbler . Toma una lista plana en STDIN.
El código verifica si dos índices planos
i
yj
representan celdas conmovedoras al verificar que tanto la diferencia de fila como la diferencia dei/4-j/4
columnai%4-j%4
están estrictamente entre -2 y 2. La primera pasada, en cambio, tiene esta verificación exitosa automáticamente para que la entrada más grande se encuentre sin tener en cuenta la adyacencia.fuente
MATL ,
504947 bytesLa entrada es una matriz, que se usa
;
como separador de filas.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
PHP,
177 174171 bytesEjecute con
-nr
, proporcione elementos de matriz como argumentos o pruébelo en línea .fuente
JavaScript, 122 bytes
Tomé más de un par de vueltas incorrectas en este caso y ahora me he quedado sin tiempo para jugar más al golf, pero al menos está funcionando. Volveré mañana (o, ¡conociéndome, en el tren a casa esta noche!), Si puedo encontrar un minuto.
Pruébalo en línea
fuente
flatMap()
: pR ,
128124123112110 bytesPruébalo en línea!
Crea una matriz 4x4 (que me ayudó a visualizar cosas), la rellena con ceros, luego comienza desde 16 y busca en sus "pilas" circundantes el siguiente más grande, y así sucesivamente.
Al concluir, genera una advertencia, pero no tiene ninguna consecuencia y no cambia el resultado.
EDITAR: -4 bytes comprimiendo la inicialización de la matriz en 1 línea.
EDITAR: -1 gracias a Robert Hacken
EDITAR: -13 bytes combinando las sugerencias de Giuseppe y Robin Ryder.
fuente
r==16
parar>15
.which
.m
como un lógico en lugar de un entero, y por lo tanto solo necesita llamarwhich
una vez en lugar de dos.X%o%Y
es un alias paraouter(X,Y,'*')
.outer
es una de las funciones más prácticas, ya que puede funcionar como la función de "difusión" de Octave / MATLAB / MATL con operadores de aribtrary (vectorizados). Mira aquí ; También es útil en raras ocasioneskronecker
cuál está vinculado en esa página.Carbón , 47 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Convierta los números de entrada en caracteres alfabéticos (A = 0 .. Q = 16) e imprímalos como una cuadrícula de 4x4.
Comience por comer la Q, es decir, 16.
Repita mientras haya algo para comer.
Encuentra dónde está la pila. Esta es una vista lineal en orden de fila mayor.
Convierte a coordenadas y salta a esa ubicación.
Encuentra la pila adyacente más grande.
Come la pila actual.
Convierta las pilas de nuevo en enteros y tome la suma.
Borrar el lienzo y generar el resultado.
fuente
Powershell,
143141136130122121 bytesMenos guión de prueba de golf:
Salida:
Explicación:
Primero , agregue los bordes superior e inferior de 0 y cree una matriz unidimensional:
Powershell regresa
$null
si intenta obtener el valor detrás del final de la matriz.En segundo lugar , el ciclo
biggest neighbor pile
comenzó desde 16 hasta un máximo distinto de cero. Y anúlalo (el Ratón Hambriento se lo come).Tercero , suma de las pilas restantes.
fuente
SAS,
236219 bytesEntrada en tarjetas perforadas, una línea por cuadrícula (separada por espacios), salida impresa en el registro.
Este desafío es un poco complicado por algunas limitaciones de los arreglos en SAS:
Actualizaciones:
infile cards;
Sentencia eliminada (-13)a:
para la definición de matriz en lugar dea1-a16
(-4)Golfizado:
Sin golf:
fuente
Haskell , 163 bytes
Pruébalo en línea!
La
f
función toma la entrada como una lista de 4 listas de 4 enteros.Ligeramente no golfista
fuente
JavaScript (ES7), 97 bytes
Toma la entrada como una matriz aplanada.
Pruébalo en línea!
Comentado
fuente
APL (Dyalog Unicode) ,
4241 bytes SBCSPruébalo en línea!
fuente
Java 10,
272248 bytesLas celdas están marcadas de la misma manera que en mi respuesta para el desafío Todos los ochos individuales .
-24 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
int r,c,R=4,M=1,x,y,X,Y;for(r=c=X=Y=0;
, así que gracias. :)J, 82 bytes
Pruébalo en línea!
Tengo la intención de campo de esta mañana más, y tal vez escribo una solución más J-ish similar a este uno , pero pensé que me gustaría probar el enfoque aplanado ya que no había hecho antes.
fuente
]
eng
?Rojo , 277 bytes
Pruébalo en línea!
Es una solución realmente larga y no estoy contento con ella, pero pasé mucho tiempo arreglándola para que funcione en TIO (aparentemente hay muchas diferencias entre las versiones estables Win y Linux de Red), así que la publico de todos modos ...
Más legible:
fuente
Jalea ,
31 3029 bytesDado que el método es demasiado lento para ejecutarse dentro de los 60 segundos con el mouse encendido,
16
esto la desactiva9
y limita su habilidad de tal manera que solo puede comer9
so menos. ¡ Pruébelo en línea! (así aquí ella come9, 2, 7, 4, 8, 6, 3
dejando97
).¿Cómo?
fuente
No es mi mejor trabajo. Hay algunas mejoras definitivas que hacer, algunas probablemente fundamentales para el algoritmo utilizado: estoy seguro de que puede mejorarse usando solo un
int[]
, pero no pude encontrar la manera de enumerar eficientemente a los vecinos de esa manera. ¡Me encantaría ver una solución PowerShell que use solo una matriz dimensional única!PowerShell Core , 348 bytes
Pruébalo en línea!
Versión más legible:
fuente
(array|sort)[-1]
lugar deMeasure -max
trabajar en PSv5 pero obtener resultados incorrectos en el núcleo. No tengo idea de por qué.(0..10|sort)[-1]
pero devuelve 10 en PSv5 pero 9 en PS Core. Esto se debe a que lo trata en orden lexicográfico en lugar de numérico. Lástima que.C (gcc), 250 bytes
Pruébalo en línea!
Nota: Este envío modifica la matriz de entrada.
s()
es la función para llamar con un argumento de un mutableint[16]
(que es el mismo en memoria que anint[4][4]
, que es lo que log()
interpreta como).s()
encuentra la ubicación de16
en la matriz, luego pasa esta información ag
, que es una función recursiva que toma una ubicación, establece el número en esa ubicación a 0 y luego:Si hay un número positivo adyacente, repita con la ubicación del número adyacente más grande
De lo contrario, devuelve la suma de los números en la matriz.
fuente
s(int*a){for(i=0;a[i]<16;++i);return g(a,i%4,i/4);}
Wolfram Language (Mathematica) , 149 bytes
Pruébalo en línea!
fuente
Agregar ++ , 281 bytes
Pruébalo en línea!
Oof, esto es complicado.
Verificar todos los casos de prueba
Cómo funciona
Para esta explicación, usaremos la entrada
Esto implementa las dos funciones auxiliares:
Finalmente, la salida t , es decir, los valores restantes no recopilados.
fuente
C # (.NET Core) , 258 bytes
Sin LINQ El uso de System.Collections.Generic es para el formateo posterior; la función no lo requiere.
Pruébalo en línea!
fuente
Perl 6 ,
151136126125119 bytesSolución súper cutre. Toma la entrada como matriz aplanada.
Pruébalo en línea!
fuente
Perl 5
-MList::Util=sum -p
, 137 bytesPruébalo en línea!
fuente
K (ngn / k) , 49 bytes
Pruébalo en línea!
la entrada (
x
) es una matriz 1d(+!4 4)!x
un diccionario que asigna pares de coordenadas a los valores dex
h::
asignar a una variable globalh
*>
la clave correspondiente al valor máximo{
}\
repetir hasta la convergencia, recogiendo valores intermedios en una listah[,x]:0
cero la posición actual+x+0,'1-!3 3
puestos de vecinos(
)#h
filtrarlosh
como un diccionario más pequeño*>
¿Qué vecino tiene el valor máximo? se convierte en la posición actual para la nueva iteración+/h
finalmente, devuelve la suma deh
los valores restantes defuente
Wolfram Language (Mathematica) ,
124115 bytesPruébalo en línea!
Esto toma una matriz 2D, la rellena a cada lado, luego la aplana inmediatamente para que no tengamos que gastar la indexación de bytes. El único costo para esto es
Join@@
aplanar. Luego se procede como a continuación.Versión de 124 bytes para una matriz 2D: ¡ Pruébelo en línea!
Principalmente mi propio trabajo, con un poco derivado de la respuesta de 149 bytes de J42161217 .
Sin golf:
fuente