introduzione
Tutti sanno che la possibilità di navigare con successo in un campo di asteroidi è di circa 3.720 a 1. Ma nonostante il tuo avvertimento, Han Solo è ancora disposto a tentare la fortuna.
Temendo per la tua vita artificiale, decidi di codificare, nel peculiare dialetto della nave ( leggi: la tua lingua preferita di Code Golf ), un programma di evitamento degli asteroidi che deciderà quale percorso prendere in un labirinto ASCII di campo di asteroidi.
Ingresso
Millenium Falcon ha un programma di mappatura dei campi di asteroidi, che fornisce dati simili a questo:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Le file superiori sono a sinistra del Falco, le file inferiori sono a destra del Falco e le colonne rappresentano ciò che si trova di fronte alla nave.
- Ognuno
#
è un ostacolo. - Ogni spazio è spazio vuoto in cui la nave può volare.
- L'input ha sempre 7 caratteri. Questo è il limite di larghezza della mappatura degli asteroidi.
- L'input è sempre lungo 32 caratteri (30 per il campo stesso e 2 per i limiti di inizio e fine). Questo è il limite di profondità della mappatura degli asteroidi. Le barre verticali
|
indicano l'inizio e la fine della mappatura. @
è il falco. È sempre nella riga centrale (4a riga) e nella prima colonna nell'input.- Lo spazio lasciato nelle barre verticali sull'ultima colonna è il punto in cui la nave deve arrivare. È sempre nella riga centrale (quarta riga) e nell'ultima colonna nell'input.
L'input può essere preso come una stringa a più righe, un array di stringhe, da STDIN o parametri di una funzione, oppure letto da un file.
Possibili manovre
Sei inseguito da TIE-Fighters, quindi devi sempre andare avanti. Esistono quindi tre modi in cui la nave può volare ad ogni passo:
-
Inoltrare/
Avanti e gira a sinistra\
Avanti e gira a destra
Ad esempio, questi sono percorsi validi:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Come puoi vedere, c'è sempre esattamente una mossa per colonna. Il Falcon è un pezzo di spazzatura, quindi non può fare curve violente. Ciò significa che mosse come /\
o non\/
sono consentite . Deve esserci almeno un puro avanzamento -
tra due turni opposti. D'altra parte, è possibile girare in un modo per più passaggi consecutivi, come visto sopra.
Il Falcon si schianta se una mossa porta la nave a trovarsi in un punto in cui si trova un ostacolo. Ad esempio, queste mosse portano a crash:
@-#
@
\
#
#
/
@
Si noti che questo non è un arresto anomalo:
@-#
\
-
Produzione
È necessario generare lo stesso campo di asteroidi ASCII, con un percorso valido fino alla fine. Il Falcon deve essere stampato nel punto finale anziché nel punto iniziale.
Ad esempio, un output valido per l'esempio di input fornito in precedenza sarebbe:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Il tuo percorso non deve solo arrestare il falco. Non deve essere il percorso più breve possibile.
Puoi presumere che ci sarà sempre almeno un possibile percorso fino alla fine.
È possibile eseguire l'output su STDOUT, in un file o in qualsiasi altro equivalente, purché il campo di asteroidi sia stampato esattamente come in questo post (ad es. L'output di un elenco di coordinate per il percorso non è valido).
Casi test
Un normale campo di asteroidi
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Uscita possibile
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Campo di asteroidi iperregolari
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Uscita possibile
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Nucleo della Morte Nera
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Uscita possibile
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Trincea della Morte Nera
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Produzione
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Grotta degli asteroidi
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Uscita possibile
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
punteggio
R2D2 è impegnato a nuotare nelle paludi, quindi dovrai programmare il controller del Falcon da solo, il che è noioso. Pertanto vince il codice più breve .
-
il percorso ad ogni turno, che è definito come una mossa "in avanti". Ma le mosse effettive sono sempre due diagonali-sinistra seguite da due diagonali-destra.