En este desafío, tengo un campo de aguacates que me gustaría jugo lo más rápido y completo posible. ¿Puedes escribir un programa o función que me ayude a resolver cómo exprimir a la perfección todos los aguacates?
Como entrada, obtendrá los aguacates como una cuadrícula m
x m
cuadrada, donde m
hay un número entero entre 3 y 6. Cada cuadrado contiene exactamente un aguacate. Los aguacates tienen varias etapas de jugosidad:
Etapa 1: El aguacate no ha sido exprimido en absoluto.
Etapa 2: el aguacate ha sido parcialmente exprimido.
Etapa 3: El aguacate ha sido completamente exprimido.
Etapa 4: El aguacate ha explotado debido al exceso de jugo.
Cuando usas una herramienta de extracción de jugo, los aguacates en el área de efecto de esa herramienta pasan a la siguiente etapa. La explosión de los aguacates tiene mucha fuerza y destruirá todo el campo de aguacate, ¡así que asegúrese de que ninguno de los aguacates explote!
Aquí hay un ejemplo de una cuadrícula de aguacates. En estos ejemplos, he usado la coordenada 0,0
para la esquina inferior izquierda y la coordenada 2,2
para la esquina superior derecha, aunque puede ajustar el sistema de coordenadas para adaptarlo a su idioma.
112
221
231
El objetivo es hacer que todos los aguacates estén perfectamente exprimidos (es decir, la etapa 3). Para lograr esto, tiene tres herramientas de jugo diferentes en su poder. Cada herramienta de jugo tiene un área de efecto diferente, pero todos aumentan la jugosidad de los aguacates afectados en 1.
Aquí están todas las herramientas que tiene a su disposición. Utiliza los exprimidores especificando la primera letra de la herramienta, luego las coordenadas que deseas exprimir. Por ejemplo, para usar el Slicer en cuadrado 5,2
, debería generar S 5,2
.
Rebanadora : Exprime la coordenada objetivo y el aguacate a cada lado.
112 112 112
221 --> XXX --> 332
231 231 231
Rallador : Exprime la coordenada objetivo y el aguacate arriba y abajo.
112 1X2 122
221 --> 2X1 --> 231 --> kaboom!
231 2X1 241
Lanzacohetes : Exprime la coordenada objetivo y todos los aguacates adyacentes.
112 1X2 122
221 --> XXX --> 332
221 2X1 231
Entradas y salidas de muestra
323
212
323
G 1,1
S 1,1
3312
3121
1213
2133
R 0,0
R 1,1
R 2,2
R 3,3
22322
22222
22222
33233
33333
G 0,3
G 1,3
G 2,2
G 3,3
G 4,3
222332
333221
222332
333222
222333
333222
S 1,5
S 1,3
S 1,1
S 4,5
S 4,3
S 4,1
G 5,4
Respuestas:
Mathematica - 350 bytes
No es una solución muy corta, pero mejor que ninguna solución, ¿verdad?
Una versión más legible (con espacios y sangrías adicionales y demás):
La entrada es una matriz (p
{{3,2,3},{2,2,2},{3,2,3}}
. Ej. ), La salida es una cadena (con una nueva línea final; si esto es inaceptable, encierre la funciónStringDrop[...,-1]
por 15 bytes adicionales). Usé el sistema de coordenadas que dice (1,1) es la esquina superior izquierda, (n, n) es la esquina inferior derecha (donde n es la dimensión de la matriz). A veces, si la solución requiere hacer la misma operación varias veces, la salida incluye cosas como3 G 2,2
(para "usar el rallador en (2,2) tres veces"), ya que no dijiste qué hacer en este caso, espero está bien.Explicación:
Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}]
crea una matriz con las variables G [i, j] en cada lugar afectado al usar el rallador en (i, j), y de manera similar para S [i, j] y R [i, j]. Estas variables representan el número de veces que se usa la herramienta en esa posición..../.(G|S|R)[___,0|n+1,___]->0
elimina los efectos del uso de herramientas en posiciones fuera del campo de aguacate....==3-#
compara esto con la diferencia entre la entrada y un campo de aguacates con jugo perfecto....&&And@@t[#[i,j]>=0&]
dice que las variables G [i, j], S [i, j], R [i, j] no deben ser negativas (¡no se puede quitar el jugo de los aguacates!), usando la taquigrafíat[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}]
.First@Solve[...,t[#[i,j]&],Integers]
encuentra la primera solución entera a nuestras ecuaciones en términos de las variables G [i, j], S [i, j], R [i, j]./.{(x_->m_):>ToString[m x]}
oculta las variables que son iguales a cero, al tiempo que pone la solución en una buena forma de cadena.StringReplace[...,{"["->" ","]"->"\n",", "->","}]
convierte cadenas similares"2 G[1, 4]"
en cadenas similares"2 G 1,4"
y agrega una nueva línea al final.""<>Cases[...,Except@"0"]
elimina todas las sobras"0"
y une todas las cadenas juntas.fuente