Geben Sie bei einer Folge von N, S, E und W eine Peilung aus (Winkel im Uhrzeigersinn von Norden in Grad), die auf 5 Dezimalstellen genau ist.
In der herkömmlichen Kompassnotation besteht eine Zeichenfolge nur aus zwei dieser Zeichen (wie NNW oder ESE). Hier müssen Sie auch Zeichenfolgen akzeptieren, die alle 4 enthalten (wie WNNNSE) . Die Verwendung von nur 2 Symbolen ermöglicht es dem Menschen, die Bedeutung intuitiv zu verstehen. Das Zulassen von 4 Symbolen erschwert das Lesen, ermöglicht jedoch kürzere Möglichkeiten, eine Peilung mit einer bestimmten Genauigkeit zu beschreiben.
(Wie in den Kommentaren von user2357112 ausgeführt , können Sie nachweisen, dass die Zeichenfolge mit 4 Symbolen für jede Peilung genau die gleiche Länge hat wie die Zeichenfolge mit 2 Symbolen. Daher habe ich diese Herausforderung auf einer falschen Annahme basiert. Hoffentlich beeinträchtigt dieses Fehlen eines praktischen Zwecks nicht Ihre Freude an der Herausforderung ...)
Die genaue Methode wird im Folgenden beschrieben und entspricht der herkömmlichen Notation (sie wird erweitert, anstatt sie zu ändern).
Eingang
- Die Eingabe ist eine einzelne Zeichenfolge, die nur die Zeichen enthält
NESW. - Die Eingabe kann eine Folge von Zeichen sein, sofern dies keine Vorverarbeitung beinhaltet. Es ist beispielsweise
[N, [E, [S, [W]]]]nicht zulässig , eine verschachtelte Liste zu verwenden, um die Verarbeitungsreihenfolge zu verbessern. - Das Verwenden anderer Zeichen ist nicht zulässig. Sie können nicht eine Reihe von nehmen
1234stattNESW.
Ausgabe
- Die Ausgabe muss eine Dezimalzahl oder eine Zeichenfolgendarstellung von eins sein (kein Rational / Bruch).
- Nachgestellte Nullen müssen nicht angezeigt werden. Wenn die Peilung stimmt, zählt
9.00000die Ausgabe9auch mit 5 Dezimalstellen als korrekt. - Die Ausgabe liegt im Bereich [0, 360). Das heißt, einschließlich 0, aber ausschließlich 360.
- Die Richtigkeit wird überprüft, indem die Ausgabe auf 5 Dezimalstellen gerundet wird. Wenn das Lager 0,000005 ist, wird es auf 0,00001 gerundet. Die Ausgaben 0.00001 und 0.000005 sind beide korrekt.
- Die Ausgabe in wissenschaftlicher Notation für einige Eingaben ist akzeptabel. Zum Beispiel
1e-5anstelle von0.00001.
Umwandlung
- Das einzelne Zeichen Kompaßstriche
N,E,S, undWentsprechen 0, 90, 180 und 270 Grad sind. - Das Voranstellen einer dieser Zeichenfolgen führt dazu, dass die Peilung die Peilung des einzelnen Zeichens und die Peilung der ursprünglichen Zeichenfolge halbiert.
- Das nächstgelegene der beiden möglichen halbierenden Lager wird so gewählt, dass NE 45 Grad und nicht 225 Grad darstellt.
- Dies ist eindeutig, es sei denn, der zu halbierende Winkel beträgt 180 Grad. Daher
NS,SN,WE, undEWentsprechen nicht definiert Lager, und der Eingang wird nie in einer dieser Punkte enden. Sie können jedoch an einer anderen Stelle in der Eingabezeichenfolge erscheinen, da dies keine Mehrdeutigkeit verursacht. - Wenn die letzten beiden Zeichen identisch sind, ist das letzte Zeichen überflüssig, da die Halbierung dieselbe Peilung ergibt. Da dies der Notation nichts hinzufügt, muss Ihr Code dies nicht verarbeiten. Daher
NN,EE,SS, undWWentsprechen nicht definiert Lager, und der Eingang wird nie in einer dieser Punkte enden. Sie können jedoch an einer anderen Stelle in der Eingabezeichenfolge erscheinen.
Beispiele
N: 0
E: 90
S: 180
SE: halfway between S and E: 135
NSE: halfway between N and SE: 67.5
NNSE: halfway between N and NSE: 33.75
NNNSE: halfway between N and NNSE: 16.875
NNNNSE: halfway between N and NNNSE: 8.4375
Testfälle
Eine Einreichung ist nur gültig, wenn sie für alle Testfälle die richtige Ausgabe liefert. Beachten Sie, dass die Testfälle an die Grenzen dessen gehen, was mit doppelter Genauigkeit gehandhabt werden kann. Bei Sprachen, die standardmäßig mit einfacher Genauigkeit arbeiten, müssen Sie wahrscheinlich die Bytes für die Angabe der doppelten Genauigkeit verwenden, um korrekte Ausgaben zu erhalten.
Testfallausgaben werden auf 5 Dezimalstellen gerundet und auch auf eine willkürliche Genauigkeit dargestellt. Beides sind gültige Ausgaben.
WNE 337.5 337.5
WEN 337.5 337.5
WEWEWEWEWEWEWEWEWEWEWEN 330.00001 330.000007152557373046875
NESWNESWNESWNESWNESWNESWNESW 90 89.99999932944774627685546875
NNNNNNNNNNNNNNNNNNNNNNNE 0.00001 0.0000107288360595703125
NNNNNNNNNNNNNNNNNNNNNNNW 359.99999 359.9999892711639404296875
SNNNNNNNNNNNNNNNNNNNNNNNE 90.00001 90.00000536441802978515625
SNNNNNNNNNNNNNNNNNNNNNNNW 269.99999 269.99999463558197021484375
Wertung
Das ist Code-Golf . Die Punktzahl ist die Länge des Quellcodes in Bytes und die kürzesten Gewinne.
Pedanterie
Ich habe den Fehler gemacht, zu denken, dass "North by North West" eine gültige Kompassrichtung ist. Ein glücklicher Fehler, da er zu einer Herausforderungsidee führte, die ich dann von der Wikipedia-Seite entdeckte :
"Der Titel des Alfred Hitchcock-Films von 1959, North by Northwest, ist eigentlich kein Richtungspunkt auf dem 32-Wind-Kompass, sondern der Film enthält einen Verweis auf Northwest Airlines. "
Es stellt sich auch heraus, dass die für diese Herausforderung verwendete Methode nur mit traditionellen Kompasspunkten bis einschließlich des 16-Punkte-Kompasses übereinstimmt. Der auf dieser Seite beschriebene 32-Wind-Kompass unterscheidet sich geringfügig und ich habe seine Existenz für diese Herausforderung leicht übersehen.
Schließlich für alle, die denken, ich sollte "Südosten" anstelle von "Südosten" verwenden,.
WNNNSEdie Ausgabe 323.4375. Im Beispielabschnitt finden Sie eine exemplarische Vorgehensweise, die in diesem Fall auf die gleiche Weise angewendet werden würde.
f(N,N,N,S,E)Ordnung?
WNNNSE<= Was wäre die Ausgabe für diesen Beispieleintrag zu Beginn Ihres Beitrags? es klingt für mich ungültig, aber es ist schwer zu sagen.