Du bist eine Maus. Ihre Mausefreunde wurden alle gefangen genommen und sind bewusstlos und in einem Labyrinth gefangen, das nur einen Ein- / Ausgang hat. Sie haben zufällig eine perfekte Karte des Labyrinths, sodass Sie eine Lösung finden können, um sie alle in Sicherheit zu bringen. Das Labyrinth ist jedoch mit einem Sicherheitssystem geschützt, das einen Alarm auslöst, wenn eine Schwelle von 1000
erreicht wird, wodurch Sie gefangen genommen werden und Ihre Rettungsmission nicht bestehen.
Aus früheren Untersuchungen des Labyrinths geht hervor, dass jedes Feld, auf das Sie treten (dh jede horizontale oder vertikale Bewegung - Mäuse können sich nicht diagonal bewegen ) 1
, dem Zähler des Sicherheitssystems hinzugefügt wird. Wenn Sie jedoch ein Gewicht tragen (entweder einen Dynamitblock oder einen bewusstlosen Mäusefreund), fügt es stattdessen hinzu, 2
da es den zusätzlichen Druck erkennt. Der Eingangs- / Ausgangsplatz verfügt nicht über dieses Sicherheitssystem und wird daher nicht zur Theke hinzugefügt.
Sie haben einen unbegrenzten Vorrat an Dynamit, den Sie zum Eingang gebracht haben, sodass Sie einfach alle Wände sprengen können , um Ihre Freunde zu befreien. Aber Sie müssen vorsichtig sein, denn jede Explosion 50
erhöht den Konter durch den Druck der Erschütterung. Außerdem können Sie jeweils nur eine Maus oder einen Dynamitblock tragen. Da jeder Dynamitblock nur einen Wandbereich zur Detonation bringen kann, bedeutet dies, dass Sie bei mehreren Wänden in einer Reihe mit leeren Händen zum Eingang zurückkehren müssen, um mehr zu erhalten.
Durchgearbeitetes Beispiel
Angenommen, unser Labyrinth sieht folgendermaßen aus:
######
#M# E#
######
Ich werde c
für die Theke verwenden. Wir beginnen bei der E
Ntrance, bewegen uns ein Feld nach links, während wir Dynamit tragen c=2
. Wir zünden das Dynamit, um die Mauer zu sprengen c=52
. Wir bewegen uns mit leeren Händen zwei Quadrate nach links, um zu kommen c=54
, und stehen jetzt auf dem Quadrat der Maus. Wir E
heben unseren Freund auf und bewegen 3 Felder zurück zum Ausgang, aber das letzte Feld zählt nicht, da es keine Sensoren hat. Das sind also nur 2 Felder mit etwas auf dem Rücken. Das heißt, wenn wir den Ausgang mit der letzten Maus erreichen, c=58
ist das weniger als 1000
, und daher ist die Mission erfolgreich.
Herausforderung
Wenn Sie ein Eingabelabyrinth haben, geben Sie an, ob Sie als Mausheld alle gefangenen Mäuse innerhalb der oben genannten Einschränkungen erfolgreich retten können oder ob die Mission fehlgeschlagen ist.
Eingang
- Ein 2D-Labyrinth in einem beliebigen zulässigen Format (mehrzeilige Zeichenfolge, Zeichenfolgenarray usw.).
- Für diese Herausforderung werde ich
#
sowohl die Innen- als auch die Außenwände,M
die Mausefreunde undE
den Eingang verwenden. - Der Eingang wird niemals unmittelbar an eine Innenwand angrenzen (es wird immer mindestens einen Raum geben, in dem Sie sich frei bewegen können).
- Sie können beliebige druckbare ASCII-Zeichen ersetzen, sofern dies konsistent ist. Dies hat ermöglicht es Ihnen , gegen Außenwände zwei verschiedene Symbole für Innenwände zu verwenden, so lange , wie Sie Konsistenz zu erhalten (zB wenn Sie verwenden
@
für Innenwände statt, und lassen#
für außen, jeder muss Innenwand sein@
und jede Außenwand#
). - Das Labyrinth wird immer vollständig von Wänden begrenzt, muss aber nicht rechteckig sein. Falls gewünscht, können Sie davon ausgehen, dass das Labyrinth mit Leerzeichen aufgefüllt ist, um rechteckige Eingaben vorzunehmen (optional).
- Das Labyrinth kann Abschnitte enthalten, die ohne Dynamit nicht erreichbar sind.
- Sie können die Außenwände des Labyrinths nicht dynamisieren.
Ausgabe
Ein wahrer / falscher Wert. Wahrheit für "Ja, die Maus kann jede andere Maus retten" oder Falsey für "Nein, das Alarmsystem wird ausgelöst".
Die Regeln
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
Wahrheitsbeispiele, durch Leerzeilen getrennt.
#####
#M E#
#####
######
#M# E#
######
########
#E # M#
# # #
# # #
# #
########
#############################
# ## # # #
# M ## M # # #
# ## # M # E #
#M ## # # #
#############################
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMM MM#
#MMMMMMMMMMMME#
###############
Falsche Beispiele, durch Leerzeilen getrennt
#############################
#M ## ## ## #
# M ## M ## ## #
# ## ## M ## E #
#M ## ## ## #
#############################
#############################
########
########
# # #
# M # M#
########
#####
# M #
#####
#####
#####
#####
###################
# # # ## ## # # #
#M#M#M## E ##M#M#M#
# # # ## ## # # #
###################
#######
######
#####
####
# M#
####
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMME#
###############