TL; DR: dati una matrice di caratteri e un robot in una posizione iniziale della matrice, scrivi un algoritmo che possa leggere una stringa con movimenti (
F
per "vai avanti",R
per "ruota di 90 gradi a destra" eL
per "ruota di 90 gradi sinistra ") e calcola la posizione finale del robot. Maggiori dettagli nel testo completo.
A casa abbiamo un dispositivo programmabile molto semplice per bambini: un piccolo veicolo con pulsanti per far avanzare il veicolo, girare di 90 gradi a sinistra o girare di 90 gradi a destra. Qualcosa di simile a questo:
Abbiamo anche un tappetino in schiuma con lettere come questa:
Lo scopo di tutto ciò è insegnare ai bambini sia l'alfabeto che i rudimenti della programmazione, tutto in una volta.
La sfida
Supponiamo di aver sistemato casualmente il nostro tappetino in schiuma in questo modo:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
Supponiamo inoltre di aver modificato il veicolo in modo tale che quando programmiamo un comando "vai avanti", il veicolo avanzi esattamente delle dimensioni di un quadrato nel tappetino. Quindi, se il veicolo si trova nella U
piazza e va a nord, si ferma esattamente nella P
piazza.
Tutte le istruzioni vengono fornite al veicolo prima che inizi a muoversi e queste sono:
F
: Il veicolo avanza nella casella successiva.R
: Il veicolo gira di 90 gradi al suo posto (nessun ulteriore movimento).L
: Il veicolo gira a 90 gradi a sinistra al suo posto (nessun ulteriore movimento).
Una volta fornite le istruzioni, è possibile premere il pulsante "GO" e inviare il veicolo in una determinata posizione poiché seguirà tutte le istruzioni in un determinato ordine. Quindi, puoi dire al bambino di inserire le istruzioni necessarie affinché il veicolo vada a una determinata lettera.
È necessario scrivere il programma / funzione più breve che elabora un string
(parametro di input) con una serie di istruzioni e calcola la lettera su cui il veicolo si ferma (output string
).
Dettagli:
- Il veicolo inizia sempre nella casella vuota in basso e rivolto a nord (verso la
U
piazza). - La stringa di input conterrà solo le lettere
F
,R
,L
eG
(per il pulsante "go"). Se lo preferisci, puoi usare lettere minuscole per il tappetino e le istruzioni. - L'algoritmo deve obbedire a tutte le istruzioni nella stringa prima della prima
G
(ogni istruzione successiva viene ignorata quando il veicolo ha iniziato a muoversi). - Se il veicolo esce dal tappetino in qualsiasi momento (anche se la stringa di input non è stata completamente elaborata), l'algoritmo deve restituire la stringa
Out of mat
. - In caso contrario, l'algoritmo deve restituire la lettera in cui il veicolo si è fermato. Il punto iniziale conta come un
carattere (o una stringa vuota).
Esempi:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
Questo è code-golf , quindi può vincere il programma più breve per ogni lingua!
@
la posizione iniziale e gli spazi che si trovano fuori dal tappetino, quindi questa configurazione sarebbeERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(con spaziatura diversa, SE incasinata)