Étant donné l'art ASCII de deux vecteurs, trouvez la magnitude et le degré du vecteur résultant.
Contribution
Celui-ci peut être reçu via STDIN, lu à partir d'un fichier local ou fourni via un appel de fonction. Voici un exemple d'une entrée à deux vecteurs:
^------>
|
|
|
x
Cela représente un changement de 4 unités au nord et 7 unités à l'est. Le point de départ de chaque entrée sera représenté par un x
(décimal 120
).
Tous les vecteurs sont des lignes horizontales ou verticales.
Chaque vecteur possède l'un de ces quatre points de terminaison:,
^v<>
et est composé d'un tiret (-
, décimal 45) ou d'une barre verticale (|
, décimal 124).Les points vides de l'avion sont remplis d'espaces (
, 32 décimaux).
L'entrée peut être unique
x
.Les vecteurs adjacents sont toujours perpendiculaires les uns aux autres.
Tous les vecteurs sont de bout en bout.
Production
Ce sera le déplacement du point résultant (distance du point de départ) et le degré de déplacement par rapport au point de départ.
Pour l'entrée ci-dessus, la sortie doit être des 8.06
unités et des 60.3
degrés. Chacun devrait avoir exactement 3 chiffres significatifs. Voici quelques exemples de nombres à 3 chiffres significatifs:
- 1,00
- 60,1
- 453
- 7.08
- 4,50
- 349
Toutes les mesures unitaires seront <= 999
.
Ces nombres doivent être sortis dans le format ci-dessous. C'est en utilisant les chiffres ci-dessus.
8.06 units @ 60.3 degrees
Cela peut être suivi d'un seul espace de fin ou d'une nouvelle ligne.
Si l'entrée est unique x
, sans déplacement et donc sans angle de déplacement, la sortie doit être soit une ligne vide (un seul caractère de nouvelle ligne), soit au format suivant:
0 units @ - degrees
Si vous essayez de vous qualifier pour le bonus, la direction devrait également l'être -
.
Dans le cas où les bonus 2, 3 ou les deux sont terminés, la sortie doit suivre le modèle ci-dessous et respecter les mêmes restrictions que ci-dessus.
8.06 units @ 60.3 degrees NE
Les degrés doivent être mesurés selon le plan standard.
90
135 | 45
\|/
180 ---x---- 0
/|\
225 | 315
270
0
degrés est est, 1 - 89
degrés est nord-est, 90
est nord, etc.
Bonus
Les éléments suivants valent au total -50%.
Prenez un bonus de -10% pour chaque vecteur supplémentaire qui peut être manipulé. Ce bonus peut être appliqué jusqu'à 3 fois. Les vecteurs ne se chevaucheront ni ne se croiseront jamais.
Prenez un bonus de -10% si votre sortie inclut la direction cardinale de l'angle (nord, sud, est, ouest).
Bénéficiez d'un bonus de -10% si votre sortie inclut les directions intermédiaires de l'angle (nord-est, nord-ouest, sud-est, sud-ouest).
Exemples
Dans:
x---->
|
v
En dehors:
5.39 units @ 338 degrees
En option SE
Dans:
<--------------^
|
|
x
En dehors:
15.3 units @ 169 degrees
En option NW
Dans:
x
|
|<-----^
| |
v------>
En dehors:
2.24 units @ 297 degrees
En option SE
Exemples (plusieurs vecteurs)
Dans:
x--->
|
|
v----------->
En dehors:
16.3 units @ 349 degrees
En option SE
Dans:
<-------^
| |
| |
v |
|
|
x
En dehors:
8.54 units @ 159 degrees
En option NW
Dans:
^-->
| |
| v
|
<--------x
En dehors:
6.32 units @ 162 degrees
En option NW
x
? Quelle est la frontière entre le nord et le nord-ouest?x-->
. Les vecteurs peuvent-ils se croiser?x
. Il peut y en avoir plus de deux (si vous tentez de compléter le bonus), mais pas moins. Je travaille sur des exemples pour plusieurs entrées vectorielles. En aucun cas, les vecteurs ne se croiseront. @ThomasKwaRéponses:
JavaScript (ES6), 305 octets - 50% de bonus = 152,5 points
Explication
L'entrée doit être complétée par des espaces. Utilise tous les bonus.
Tester
Afficher l'extrait de code
la source
Python 2, 238,5 (
594562482477-50%) octetsExplication
Recherche les positions de début et de fin en regardant chaque caractère dans l'entrée.
Le début est
x
La fin se trouve en regardant chaque flèche (
<>^v
) et leurs voisins. Si les voisins sont des vecteurs continus, ignorez. Sinon, c'est la fin.Regardez les voisins perpendiculaires à la direction de la flèche.
S'ils contiennent une ligne perpendiculaire, alors c'est un vecteur continu.
Exemples (
_
indique l'espace):Parce que le point final est trouvé, il peut y avoir n'importe quel nombre de vecteurs ( bonus de 30% ).
la source
\n
comme sauts de ligne ...input()
et de l'encapsulation correspondante de l'entrée avec "", mais il ne semble pas y avoir de règle contre!