Descrizione
Il compito di questa sfida è ideare un programma o una funzione che tenga traccia di un determinato oggetto in uno spazio .
I / O
Al tuo programma verranno dati 3 ingressi, che possono essere presi in modo sensato :
nsarà la dimensione del lato dell'aereo. (quindi, per , il tuo aereo sarà ). Puoi presumere che sarà sempre un numero intero dispari.n
ssarà la posizione iniziale dell'oggetto, data come una coppia di coordinate .
Dsarà un vettore di coppie ordinate. Dseguirà il formato , dove sarà sempre uno dei , per le direzioni cardinale e primaria intercardinale, e sarà un numero intero per il numero di "tick".'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
Dati questi input, il tuo programma deve produrre un tracciamento dell'oggetto sul piano.
Regole
L'output deve contenere i limiti del piano. Per esempio:
- 21012 + + ┌─────┐ 2│ │ 1│ │ 0│ │ 1│ │ 2│ │ -└─────┘
sarebbe un esempio di un piano vuoto . I numeri sopra e a lato sono solo di riferimento e non devono essere stampati.
Puoi usare qualunque personaggio (i) per i confini, purché non sia uno spazio bianco (o il rendering come uno spazio bianco). I personaggi scelti devono delineare l'intero piano, il che significa che non possono esserci spazi vuoti tra di loro.
Alcuni aerei accettabili includono:
┌──┐ .... ---- + - +
│ │. . | | | |
│ │. . | | | |
└──┘; ....; ----; + - +
Gli aerei non accettabili includono:
.... .... ++++. .
. . + +. .
. + +. .
; ....; ....; + +; . .
L'oggetto da tracciare può essere qualsiasi personaggio tu scelga, purché occupi solo 1 spazio sul piano ed è diverso dai caratteri di confine.
La traccia dell'oggetto tracciato può anche essere qualsiasi personaggio tu scelga, purché occupino solo 1 spazio sul piano e siano diversi dall'oggetto.
Per ogni elemento in , l'oggetto deve spostare spazi verso e lasciare una traccia dietro.
Se l'oggetto colpirà un limite, verrà riflesso. Se all'oggetto rimangono ancora delle mosse, continuerà a muoversi nella direzione in cui è stato riflesso.
Per riferimento, queste direzioni si riflettono reciprocamente:
→ quando viene raggiunto il limite superiore o inferiore;
→ quando viene raggiunto un limite laterale;
L'output finale conterrà le tracce più recenti possibili, ovvero se l'oggetto lascerebbe una traccia in uno spazio in cui è già presente una traccia, il carattere di traccia più recente sovrascriverà il più vecchio.
Come al solito, le scappatoie standard sono vietate per impostazione predefinita .
punteggio:
Questa è una sfida di code-golf .
Esempi:
Input: , , D = [ ( ′ N W ′ , 2 ) , ( ′ S ′ , 2 ) , ( ′ E ′ , 1 ) ]
Risolvendolo:
0 ┌─────┐ │ │ │ │ 0│ ○ │ │ │ │ │ └─────┘
0 ┌─────┐ │ ○ │ │ \ │ 0│ \ │ │ │ │ │ └─────┘
0 ┌─────┐ │∧ │ │ | \ │ 0│ ○ \ │ │ │ │ │ └─────┘
, che sarà l'output.
0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
(Gli 0 sono solo per riferimento e non devono essere nell'output finale.)
0 ┌─────────┐ │ │ │ │ │ │ │ ∧ │ 0│ / | │ │ ○ / | │ │⟨ / │ │ \ / │ │ ∨ │ └─────────┘
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Casi test:
Produzione:
0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
Input: , ,
Produzione:
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Input: , ,
Produzione:
0 ┌───┐ │ | │ 0│- ○ ┐│ │ | │ └───┘
Input: , ,
Produzione:
0 ┌───────────┐ │ ∧ │ │ / \ │ │┌ - / - \ \ │ │ \ | / \ \ │ │ \ | \ \ │ 0│ | / ⟩│ │ | \ / / │ │ | / ○ │ │ | / \ │ │ ∨ \ │ │ \ │ └───────────┘
'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'come numero intero indicizzato 0 (o 1 indicizzato)? Così [('NW',2),('S',2),('E',1)]diventa [[7,2],[4,2],[2,1]]ad esempio.