Bestimmen Sie unter Berücksichtigung der ASCII-Kunst zweier Vektoren die Größe und den Grad des resultierenden Vektors.
Eingang
Dies kann über STDIN empfangen, aus einer lokalen Datei gelesen oder über einen Funktionsaufruf bereitgestellt werden. Hier ist ein Beispiel für eine Zwei-Vektor-Eingabe:
^------>
|
|
|
x
Dies entspricht einer Änderung von 4 Einheiten nach Norden und 7 Einheiten nach Osten. Der Startpunkt jeder Eingabe wird durch eine x
(Dezimal 120
) dargestellt.
Alle Vektoren sind horizontale oder vertikale Linien.
Jeder Vektor hat einen dieser vier Endpunkte:
^v<>
und besteht entweder aus einem Strich (-
Dezimalzahl 45) oder einem vertikalen Strich (|
Dezimalzahl 124).Leere Punkte in der Ebene werden mit Leerzeichen (
32 Dezimalstellen) gefüllt .
Die Eingabe kann eine einzelne sein
x
.Benachbarte Vektoren stehen immer senkrecht zueinander.
Alle Vektoren sind Tip-to-Tail.
Ausgabe
Dies ist die Verschiebung des resultierenden Punktes (Abstand vom Startpunkt) und der Grad, um den er sich relativ zum Startpunkt bewegt hat.
Für die obige Eingabe sollte die Ausgabe 8.06
Einheiten und 60.3
Grad sein. Jeder sollte genau 3 signifikante Zahlen haben. Hier einige Beispiele für Zahlen mit drei signifikanten Stellen:
- 1.00
- 60,1
- 453
- 7.08
- 4,50
- 349
Alle Maßeinheiten werden <= 999
.
Diese Zahlen sollten im folgenden Format ausgegeben werden. Dies verwendet die Zahlen von oben.
8.06 units @ 60.3 degrees
Darauf kann ein einzelnes Leerzeichen oder eine neue Zeile folgen.
Wenn es sich bei der Eingabe um eine einzelne Eingabe x
ohne Verschiebung und daher ohne Verschiebungswinkel handelt, sollte die Ausgabe entweder eine leere Zeile (ein einzelnes Zeilenumbruchzeichen) oder das folgende Format aufweisen:
0 units @ - degrees
Wenn Sie versuchen, sich für den Bonus zu qualifizieren, sollte dies -
auch die Richtung sein .
In dem Fall, dass die Boni 2, 3 oder beide abgeschlossen sind, sollte die Ausgabe dem folgenden Modell folgen und den gleichen Einschränkungen wie oben entsprechen.
8.06 units @ 60.3 degrees NE
Die Grade sollten gemäß der Standardebene gemessen werden.
90
135 | 45
\|/
180 ---x---- 0
/|\
225 | 315
270
0
Grad ist Ost, 1 - 89
Grad ist Nordost, 90
ist Nord usw.
Boni
Die folgenden sind insgesamt -50% wert.
Holen Sie sich einen Bonus von -10% für jeden weiteren Vektor, der bearbeitet werden kann. Dieser Bonus kann bis zu dreimal angewendet werden. Vektoren werden sich niemals überlappen oder kreuzen.
Holen Sie sich einen Bonus von -10%, wenn Ihre Ausgabe die Hauptrichtung des Winkels (Nord, Süd, Ost, West) enthält.
Holen Sie sich einen Bonus von -10%, wenn Ihre Ausgabe die Zwischenrichtungen des Winkels (Nordosten, Nordwesten, Südosten, Südwesten) enthält.
Beispiele
Im:
x---->
|
v
Aus:
5.39 units @ 338 degrees
Optional SE
Im:
<--------------^
|
|
x
Aus:
15.3 units @ 169 degrees
Optional NW
Im:
x
|
|<-----^
| |
v------>
Aus:
2.24 units @ 297 degrees
Optional SE
Beispiele (mehrere Vektoren)
Im:
x--->
|
|
v----------->
Aus:
16.3 units @ 349 degrees
Optional SE
Im:
<-------^
| |
| |
v |
|
|
x
Aus:
8.54 units @ 159 degrees
Optional NW
Im:
^-->
| |
| v
|
<--------x
Aus:
6.32 units @ 162 degrees
Optional NW
x
? Was ist die Grenze zwischen Nord und Nordwesten?x-->
. Können sich Vektoren kreuzen?x
. Es kann mehr als zwei geben (wenn versucht wird, den Bonus zu vervollständigen), aber nicht weniger. Ich arbeite an Beispielen für mehrere Vektoreingaben. In keinem Fall kreuzen sich die Vektoren. @ ThomasKwaAntworten:
JavaScript (ES6), 305 Bytes - 50% Bonus = 152,5 Punkte
Erläuterung
Die Eingabe muss mit Leerzeichen aufgefüllt werden. Verwendet alle Boni.
Prüfung
Code-Snippet anzeigen
quelle
Python 2, 238,5 (
594562482477-50%) BytesErläuterung
Findet die Start- und Endpositionen anhand der einzelnen Zeichen in der Eingabe.
Start ist
x
Das Ende wird durch Betrachten der einzelnen Pfeile (
<>^v
) und ihrer Nachbarn gefunden. Wenn Nachbarn weiterhin Vektoren verwenden, ignorieren Sie diese. Sonst ist das das Ende.Schauen Sie sich die Nachbarn senkrecht zur Pfeilrichtung an.
Wenn sie eine senkrechte Linie enthalten, handelt es sich um einen fortlaufenden Vektor.
Beispiele (
_
Leerzeichen):Da der Endpunkt gefunden wird, kann es eine beliebige Anzahl von Vektoren geben ( 30% Bonus ).
quelle
\n
als Zeilenumbrüche ...input()
und das entsprechende Umbrechen der Eingabe mit "", aber es scheint keine Regel dagegen zu geben!