Dans ce défi, j'ai un champ d'avocats que j'aimerais extraire le plus rapidement et complètement possible. Pouvez-vous écrire un programme ou une fonction pour m'aider à comprendre comment extraire parfaitement tous les avocats?
En entrée, vous obtiendrez les avocats sous forme d'une grille carrée m
x m
, où m
est un entier compris entre 3 et 6. Chaque carré contient exactement un avocat. Les avocats ont plusieurs étapes de jutosité:
Étape 1: L'avocat n'a pas du tout été extrait.
Étape 2: L'avocat a été partiellement extrait.
Étape 3: L'avocat a été complètement extrait.
Étape 4: L'avocat a explosé en raison d'un excès de jus.
Lorsque vous utilisez un outil d'extraction de jus, les avocats de la zone d'effet de cet outil d'extraction passent à l'étape suivante. Les avocats qui explosent ont beaucoup de force et détruiront tout le champ de l'avocat, alors assurez-vous qu'aucun des avocats n'explose!
Voici un exemple de grille d'avocats. Dans ces exemples, j'ai utilisé les coordonnées 0,0
du coin inférieur gauche et les coordonnées 2,2
du coin supérieur droit, bien que vous puissiez ajuster le système de coordonnées en fonction de votre langue.
112
221
231
Le but est de rendre tous les avocats parfaitement jus (ie stade 3). Pour ce faire, vous disposez de trois outils d'extraction différents. Chaque outil d'extraction a une zone d'effet différente, mais ils augmentent tous la jutosité des avocats affectés de 1.
Voici tous les outils dont vous disposez. Vous utilisez les centrifugeuses en spécifiant la première lettre de l'outil, puis les coordonnées que vous souhaitez extraire. Par exemple, pour utiliser le Slicer sur square 5,2
, vous devez sortir S 5,2
.
Slicer : Jus la coordonnée cible et l'avocat de chaque côté.
112 112 112
221 --> XXX --> 332
231 231 231
Râpe : Jus la coordonnée cible et l'avocat au-dessus et en dessous.
112 1X2 122
221 --> 2X1 --> 231 --> kaboom!
231 2X1 241
Rocket Launcher : extrait la coordonnée cible et tous les avocats adjacents.
112 1X2 122
221 --> XXX --> 332
221 2X1 231
Exemples d'entrées et de sorties
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
Réponses:
Mathematica - 350 octets
Pas une solution très courte, mais mieux que pas de solution du tout, non?
Une version plus lisible (avec des espaces supplémentaires, des retraits et d'autres choses):
L'entrée est un tableau (par exemple
{{3,2,3},{2,2,2},{3,2,3}}
), la sortie est une chaîne (avec un retour à la ligne de fin - si cela est inacceptable, entourez la fonctionStringDrop[...,-1]
pour 15 octets supplémentaires). J'ai utilisé le système de coordonnées qui dit (1,1) est le coin supérieur gauche, (n, n) est le coin inférieur droit (où n est la dimension de la matrice). Parfois, si la solution nécessite de faire plusieurs fois la même opération, la sortie inclut des choses comme3 G 2,2
(pour "utiliser la râpe à (2,2) trois fois") - puisque vous n'avez pas dit quoi faire dans ce cas, j'espère c'est bon.Explication:
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}]
crée un tableau avec les variables G [i, j] à chaque endroit affecté par l'utilisation de la râpe en (i, j), et de même pour S [i, j] et R [i, j]. Ces variables représentent le nombre de fois où l'outil est utilisé à cette position..../.(G|S|R)[___,0|n+1,___]->0
supprime les effets de l'utilisation d'outils à des positions en dehors du champ d'avocat....==3-#
compare cela à la différence entre l'entrée et un champ d'avocats parfaitement jus....&&And@@t[#[i,j]>=0&]
dit que les variables G [i, j], S [i, j], R [i, j] doivent être non négatives (vous ne pouvez pas extraire les avocats!), en utilisant la sténographiet[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}]
.First@Solve[...,t[#[i,j]&],Integers]
trouve la première solution entière de nos équations en termes de variables G [i, j], S [i, j], R [i, j]./.{(x_->m_):>ToString[m x]}
masque les variables égales à zéro, tout en mettant la solution sous une forme de chaîne agréable.StringReplace[...,{"["->" ","]"->"\n",", "->","}]
transforme les chaînes comme"2 G[1, 4]"
en chaînes comme"2 G 1,4"
, et ajoute une nouvelle ligne à la fin.""<>Cases[...,Except@"0"]
supprime tous les restes"0"
et joint toutes les chaînes ensemble.la source