Sei un topo. I tuoi amici del mouse sono stati tutti catturati, incoscienti e intrappolati in un labirinto che ha solo un'entrata / uscita. Ti capita di avere una mappa perfetta del labirinto, quindi puoi tracciare una soluzione per correre e portarli tutti in salvo. Tuttavia, il labirinto è sorvegliato da un sistema di sicurezza che attiverà un avviso se 1000
viene raggiunta una soglia , causando la cattura e il fallimento della missione di salvataggio.
Dalle tue precedenti indagini sul labirinto, ogni quadrato che passi (cioè ogni movimento orizzontale o verticale - i topi non possono muoversi in diagonale ) aggiunge 1
al contatore del sistema di sicurezza. Tuttavia, se stai trasportando un peso (o un blocco di dinamite o un amico del mouse incosciente), invece aggiunge 2
perché rileva la pressione aggiuntiva. Il quadrato di entrata / uscita non ha questo sistema di sicurezza, quindi non si aggiunge al bancone.
Hai una scorta illimitata di dinamite che hai portato all'ingresso, quindi puoi semplicemente far saltare in aria tutte le pareti per liberare i tuoi amici. Ma devi essere cauto nel farlo, poiché ogni esplosione si aggiunge 50
al contatore dalla pressione concussiva. Inoltre, puoi trasportare solo una cosa alla volta, un mouse o un blocco di dinamite. Poiché ogni blocco di dinamite può far esplodere solo uno spazio di muro, ciò significa che se ci sono più muri di fila, è necessario fare un viaggio a mani vuote all'entrata per prenderne di più.
Esempio elaborato
Supponiamo che il nostro labirinto sia simile al seguente:
######
#M# E#
######
Userò c
per il contatore. Partiamo dalla E
N-Trance, spostarsi di una sinistra piazza mentre trasportano la dinamite, c=2
. Facciamo esplodere la dinamite per far esplodere il muro c=52
. Spostiamo due quadrati a sinistra, a mani vuote, per ottenere c=54
, e ora siamo in piedi sul quadrato del mouse. Raccogliamo il nostro amico e spostiamo di nuovo 3 quadrati sulla E
xit, ma l'ultimo quadrato non conta poiché non ha sensori, quindi sono solo 2 quadrati con qualcosa sulla schiena. Ciò significa che quando raggiungiamo l'uscita con il mouse finale c=58
, che è inferiore a 1000
, e quindi la missione ha successo.
Sfida
Dato un labirinto di input, ottieni se tu, l'eroe del topo, riesci a salvare con successo tutti i topi intrappolati entro i vincoli descritti sopra o se la missione è fallita.
Ingresso
- Un labirinto 2D in qualsiasi formato accettabile (stringa multilinea, matrice di stringhe, ecc.).
- Per questa sfida, userò sia
#
per le pareti interne che esterne,M
per gli amici del topo eE
per l'ingresso. - L'ingresso non sarà mai immediatamente adiacente ad una parete interna (ci sarà sempre almeno uno spazio in cui muoversi liberamente).
- Puoi sostituire qualsiasi carattere ASCII stampabile che desideri purché sia coerente. Questo non consente di utilizzare due simboli differenti per le pareti interne contro le pareti esterne, fino a quando si mantiene la consistenza (ad esempio, se si sceglie di utilizzare
@
per le pareti interne, invece, e congedi#
per esterni, ogni parete interna deve essere@
e ogni parete esterna#
). - Il labirinto sarà sempre completamente delimitato da pareti, ma non è necessariamente rettangolare. Se lo si desidera, si può presumere che il labirinto sia riempito di spazi per creare input rettangolari (opzionale).
- Il labirinto può avere sezioni irraggiungibili senza dinamite.
- Non puoi dinamite le pareti esterne del labirinto.
Produzione
Un valore di verità / falsità . Verità per "Sì, il mouse può salvare tutti gli altri mouse" o Falsey per "No, il sistema di allarme verrà attivato."
Le regole
- È accettabile un programma completo o una funzione.
- Sono vietate le scappatoie standard .
- Si tratta di code-golf quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).
Esempi
Esempi veritieri, separati da righe vuote.
#####
#M E#
#####
######
#M# E#
######
########
#E # M#
# # #
# # #
# #
########
#############################
# ## # # #
# M ## M # # #
# ## # M # E #
#M ## # # #
#############################
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMM MM#
#MMMMMMMMMMMME#
###############
Esempi di Falsey, separati da righe vuote
#############################
#M ## ## ## #
# M ## M ## ## #
# ## ## M ## E #
#M ## ## ## #
#############################
#############################
########
########
# # #
# M # M#
########
#####
# M #
#####
#####
#####
#####
###################
# # # ## ## # # #
#M#M#M## E ##M#M#M#
# # # ## ## # # #
###################
#######
######
#####
####
# M#
####
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMME#
###############