Tu es une souris. Vos amis souris ont tous été capturés et sont inconscients et piégés dans un labyrinthe qui n'a qu'une seule entrée / sortie. Vous avez une carte parfaite du labyrinthe, vous pouvez donc trouver une solution pour vous précipiter et les transporter tous en sécurité. Cependant, le labyrinthe est gardé avec un système de sécurité qui déclenchera une alerte si un seuil de 1000
est atteint, vous faisant être capturé et échouer votre mission de sauvetage.
D'après vos enquêtes précédentes sur le labyrinthe, chaque carré que vous faites (c'est-à-dire chaque mouvement horizontal ou vertical - les souris ne peuvent pas se déplacer en diagonale ) s'ajoute 1
au compteur du système de sécurité. Cependant, si vous portez un poids (soit un bloc de dynamite ou un ami souris inconscient), il ajoute à la place 2
car il détecte la pression supplémentaire. La place d'entrée / sortie n'a pas ce système de sécurité, et ne s'ajoute donc pas au comptoir.
Vous avez un approvisionnement illimité de dynamite que vous avez apporté à l'entrée, vous pouvez donc simplement faire sauter tous les murs pour libérer vos amis. Mais vous devez être prudent avec cela, car chaque explosion ajoute 50
au compteur de la pression concussive. De plus, vous ne pouvez transporter qu'une seule chose à la fois, soit une souris ou un bloc de dynamite. Étant donné que chaque bloc de dynamite ne peut faire exploser qu'un espace de mur, cela signifie que s'il y a plusieurs murs d'affilée, vous devez faire un voyage les mains vides à l'entrée pour en saisir plus.
Exemple élaboré
Supposons que notre labyrinthe ressemble à ceci:
######
#M# E#
######
Je vais utiliser c
pour le comptoir. Nous commençons à l' E
entrée, nous nous déplaçons d'un carré à gauche tout en portant de la dynamite,c=2
. Nous faire exploser la dynamite pour faire exploser le mur, c=52
. Nous déplaçons deux carrés vers la gauche, les mains vides, pour obtenir c=54
, et nous sommes maintenant sur le carré de la souris. Nous ramassons notre ami et replaçons 3 carrés dans le E
xit, mais le dernier carré ne compte pas car il n'a pas de capteurs, il n'y a donc que 2 carrés avec quelque chose sur le dos. Cela signifie que lorsque nous atteignons la sortie avec la souris finale c=58
, ce qui est inférieur à 1000
, et donc la mission réussit.
Défi
Étant donné un labyrinthe d'entrée, affichez si vous, le héros de la souris, pouvez sauver avec succès toutes les souris piégées dans les limites décrites ci-dessus, ou si la mission est un échec.
Contribution
- Un labyrinthe 2D dans n'importe quel format acceptable (chaîne multiligne, tableau de chaînes, etc.).
- Pour ce défi, je vais utiliser
#
à la fois pour les murs intérieurs et extérieurs,M
pour les amis souris, etE
pour l'entrée. - L'entrée ne sera jamais immédiatement adjacente à un mur intérieur (il y aura toujours au moins un espace pour se déplacer librement).
- Vous pouvez remplacer tous les caractères ASCII imprimables que vous souhaitez tant qu'il est cohérent. Cela ne vous permet d'utiliser deux symboles différents pour murs intérieurs contre les murs extérieurs, tant que vous maintenez la cohérence (par exemple, si vous choisissez d'utiliser
@
pour les murs intérieurs à la place, et le congé#
pour l' extérieur, chaque mur intérieur doit être@
et chaque mur extérieur#
). - Le labyrinthe sera toujours entièrement délimité par des murs, mais n'est pas nécessairement rectangulaire. Si vous le souhaitez, vous pouvez supposer que le labyrinthe est rempli d'espaces pour effectuer une entrée rectangulaire (facultatif).
- Le labyrinthe peut avoir des sections inaccessibles sans dynamite.
- Vous ne pouvez pas dynamiter les murs extérieurs du labyrinthe.
Sortie
Un vrai / falsey valeur . Truthy pour "Oui, la souris peut sauver toutes les autres souris" ou Falsey pour "Non, le système d'alarme sera déclenché."
Les règles
- Un programme complet ou une fonction sont acceptables.
- Failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
Exemples véridiques, séparés par des lignes blanches.
#####
#M E#
#####
######
#M# E#
######
########
#E # M#
# # #
# # #
# #
########
#############################
# ## # # #
# M ## M # # #
# ## # M # E #
#M ## # # #
#############################
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMM MM#
#MMMMMMMMMMMME#
###############
Exemples de Falsey, séparés par des lignes vides
#############################
#M ## ## ## #
# M ## M ## ## #
# ## ## M ## E #
#M ## ## ## #
#############################
#############################
########
########
# # #
# M # M#
########
#####
# M #
#####
#####
#####
#####
###################
# # # ## ## # # #
#M#M#M## E ##M#M#M#
# # # ## ## # # #
###################
#######
######
#####
####
# M#
####
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMME#
###############