introduzione
Hai la sfortuna di essere bloccato in una macchina in fuga su una corsa ad ostacoli. Tutte le caratteristiche dell'auto sono non reattive, ad eccezione del sistema di sterzo, che è danneggiato. Può guidare dritto o può girare a destra. L'auto può essere guidata in sicurezza?
Meccanica
La tua auto inizia nell'angolo in alto a sinistra di una mappa 8x8 e sta cercando di mettersi in salvo nell'angolo in basso a destra. L'auto ha un orientamento (inizialmente a destra), misurato con incrementi di 90 gradi. L'auto può eseguire una delle due azioni:
- Guidare un quadrato in avanti, o
- Ruota di 90 gradi in senso orario, quindi guida di un quadrato in avanti
Si noti che l'auto non è in grado di girare abbastanza bruscamente da eseguire una svolta di 180 gradi su un singolo quadrato.
Alcune piazze sono ostacoli. Se l'auto entra in una piazza ad ostacoli, si schianta. Si presume che tutto al di fuori del percorso 8x8 sia un ostacolo, quindi guidare fuori dal percorso equivale a schiantarsi.
Il quadrato in basso a destra è il quadrato sicuro, che consente all'auto di sfuggire alla corsa ad ostacoli. Si presume che il quadrato di partenza e il quadrato sicuro non siano ostacoli.
Compito
È necessario scrivere un programma o una funzione che assume come input un array 8x8 (matrice, elenco di elenchi, ecc.), Che rappresenta la corsa ad ostacoli. Il programma restituisce o stampa un valore booleano o qualcosa di altrettanto vero. Se è possibile per l'auto arrivare al quadrato sicuro senza schiantarsi (cioè, se la mappa è risolvibile), l'output è True
, altrimenti lo è False
.
punteggio
Regole standard del codice golf: il vincitore è il codice con il minor numero di byte.
bonus:
Se, per una mappa risolvibile, il tuo codice genera una serie valida di input del conducente che guidano l'auto verso il quadrato sicuro, deduci 10 punti percentuali dal tuo punteggio. Un formato di output di esempio potrebbe essere
SRSSR
(che indica Straight, Right, Straight, Straight, Right). Questa uscita sostituirà l'True
output standard .Se, per una mappa irrisolvibile, l'output del tuo codice distingue tra situazioni in cui un incidente è inevitabile e situazioni in cui è possibile percorrere per sempre la corsa ad ostacoli, dedurre 10 punti percentuali dal punteggio. Un esempio potrebbe essere
Crash
se un incidente è inevitabile oStuck
se la macchina è bloccata per sempre nella corsa ad ostacoli. Questi output sostituiranno l'False
output standard per una mappa irrisolvibile.
Esempio
Se al programma viene assegnato un array 8x8 come questo:
[[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 0, 0, 1, 0]]
Sarebbe interpretato come una mappa come questa, con quadrati neri che indicano ostacoli:
E una possibile soluzione potrebbe essere:
Poiché esiste una soluzione, il programma dovrebbe restituire / stampare True
per questa mappa. La sequenza di mosse mostrata qui è SSSSRSRRRSRSSRRRSSRSSS
.
Crash
eStuck
. Sono qui per quanto tempo sono. Riga 2 riempita, tutto il resto vuoto ->Crash
. Riga 7 riempita, tutto il resto vuoto ->Stuck