La description
La tâche de ce défi est de concevoir un programme ou une fonction qui suit un objet donné dans un espace .
E / S
Votre programme recevra 3 entrées, qui peuvent être prises de n'importe quelle manière sensée :
nsera la taille du côté de l'avion. (donc, pour , votre avion sera ). Vous pouvez supposer que ce sera toujours un entier impair.n
ssera la position de départ de l'objet, donnée sous la forme d'une paire de .
Dsera un vecteur de paires ordonnées. Dsuivra le format , où sera toujours l' un des , pour les directions cardinale et primaire intercardinale, et sera un entier pour le nombre de «ticks».'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
Compte tenu de ces entrées, votre programme doit générer un suivi de l'objet dans l'avion.
Règles
La sortie doit contenir les limites de l'avion. Par exemple:
- 21012 + + ┌─────┐ 2│ │ 1│ │ 0│ │ 1│ │ 2│ │ -└─────┘
serait un exemple d'un avion vide . Les chiffres au-dessus et sur le côté sont pour référence seulement et n'ont pas besoin d'être imprimés.
Vous pouvez utiliser n'importe quel caractère pour les limites, tant qu'il ne s'agit pas d'espaces (ou s'affiche en tant qu'espaces). Les caractères que vous choisissez doivent délimiter le plan complet, ce qui signifie qu'il ne peut y avoir aucun espace entre eux.
Certains avions acceptables comprennent:
┌──┐ .... ---- + - +
│ │. . | | | |
│ │. . | | | |
└──┘; ....; ----; + - +
Les avions non acceptables comprennent:
.... .... ++++. .
. . + +. .
. + +. .
; ....; ....; + +; . .
L'objet à suivre peut être le personnage que vous choisissez, tant qu'il n'occupe qu'un espace dans l'avion et est différent des caractères de limite.
La trace de l'objet suivi peut également être celle des personnages que vous choisissez, tant qu'ils n'occupent qu'un espace dans l'avion et sont différents de l'objet.
Pour chaque élément de , l'objet doit déplacer espaces vers , et laisser une trace derrière.
Si l'objet heurte une limite, il sera reflété. Si l'objet a encore des mouvements à gauche, il continuera à se déplacer dans la direction à laquelle il a été réfléchi.
Pour référence, ces directions se reflètent mutuellement:
→ lorsque la limite supérieure ou inférieure est respectée;
→ lorsqu'une limite latérale est rencontrée;
La sortie finale contiendra les traces les plus récentes possibles, c'est-à-dire que si l'objet laisse une trace dans un espace où il y a déjà une trace, le caractère de trace le plus récent remplacera l'ancienne.
Comme d'habitude, les failles standard sont interdites par défaut .
Notation:
Il s'agit d'un défi de code-golf .
Exemples:
Entrée: , ,
Élaborer:
0 ┌─────┐┐ │ │ │ │ 0│ ○ │ │ │ │ │ └─────┘┘
0 ┌─────┐┐ │ ○ │ │ \ │ 0│ \ │ │ │ │ │ └─────┘┘
0 ┌─────┐┐ │∧ │ │ | \ │ 0│ ○ \ │ │ │ │ │ └─────┘┘
, qui sera la sortie.
0 ┌─────┐┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘┘
(Les 0 sont juste pour référence, et ils n'ont pas besoin d'être dans la sortie finale.)
Entrée: , ,
Notez que, lorsque :
0 ┌─────────┐ │ │ │ │ │ │ │ ∧ │ 0│ / | │ │ ○ / | │ │⟨ / │ │ \ / │ │ ∨ │ └─────────┘
L'objet a été réfléchi deux fois : une fois en atteignant le bas de l'avion en allant vers le , où il se réfléchit vers le ; puis une nouvelle fois en atteignant le côté gauche de l'avion, où correspond à .
La sortie finale arrive à :
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Cas de test:
Entrée: n = 5 , s = ( 0 , 0 ) , D = [ ( ′ N W ′ , 2 ) , ( ′ S ′ , 2 ) , ( ′ E ′ , 1 )
Production:
0 ┌─────┐┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘┘
Entrée: , ,
Production:
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Entrée: , ,
Production:
0 ┌───┐ │ | │ 0│- ○ ┐│ │ | │ └───┘
Entrée: , ,
Production:
0 ┌───────────┐ │ ∧ │ │ / \ │ │┌ - / - \ \ │ │ \ | / \ \ │ │ \ | \ \ │ 0│ | / ⟩│ │ | \ / / │ │ | / ○ │ │ | / \ │ │ ∨ \ │ │ \ │ └───────────┘
'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'plutôt prendre comme un entier indexé 0 (ou indexé 1)? Ainsi [('NW',2),('S',2),('E',1)]devient [[7,2],[4,2],[2,1]]par exemple.