Der 32-Punkte-Kompass ist ... gelinde gesagt interessant.
Von Denelson83 (Eigene Arbeit) [ GFDL oder CC-BY-SA-3.0 ] über Wikimedia Commons
Ihre Herausforderung besteht darin, ein Gradmaß zu nehmen und es in eine Richtung auf dem 32-Punkt-Kompass umzuwandeln.
Jede Richtung ist 11,25 (360/32) Grad weiter als die vorherige. Beispielsweise beträgt N (Nord) 0 Grad, NbE (Nord-Ost) 11,25 Grad, NNE (Nord-Nordost) 22,5 Grad usw.
Wie sollen Sie die Anweisungen bekommen,
0 Grad ist N, 90 Grad ist E, 180 Grad ist S und 270 Grad ist W.
- Diese werden als Himmelsrichtungen bezeichnet.
Die halben Punkte zwischen den Himmelsrichtungen sind einfach die Himmelsrichtungen, zwischen denen sie verkettet sind. N oder S stehen immer an erster Stelle, und W oder E stehen immer an zweiter Stelle.
- Diese werden Ordnungsrichtungen genannt.
Die halben Punkte zwischen der Kardinal- und der Ordinalrichtung sind die Richtungen, in denen sie wieder mit einem "-" dazwischen verkettet sind. Kardinalrichtungen gehen zuerst, Ordinalsekunde.
- Diese werden sekundär-interkardinale Richtungen genannt.
Die Mittelpunkte zwischen sekundären und interkardinalen Richtungen und anderen Richtungen sind die anderen Richtungen "nach" der Kardinalrichtung, der sie am nächsten liegen (außer natürlich der direkt daneben).
- Ich habe keine Ahnung, wie diese heißen: P
Wenn all diese Erklärungen Ihr Gehirn genauso verletzen wie meins, können Sie sich auf diese Tabelle beziehen:
1 North N
2 North by east NbE
3 North-northeast NNE
4 Northeast by north NEbN
5 Northeast NE
6 Northeast by east NEbE
7 East-northeast ENE
8 East by north EbN
9 East E
10 East by south EbS
11 East-southeast ESE
12 Southeast by east SEbE
13 Southeast SE
14 Southeast by south SEbS
15 South-southeast SSE
16 South by east SbE
17 South S
18 South by west SbW
19 South-southwest SSW
20 Southwest by south SWbS
21 Southwest SW
22 Southwest by west SWbW
23 West-southwest WSW
24 West by south WbS
25 West W
26 West by north WbN
27 West-northwest WNW
28 Northwest by west NWbW
29 Northwest NW
30 Northwest by north NWbN
31 North-northwest NNW
32 North by west NbW
Ihre Herausforderung besteht darin, die Eingabe in Grad vorzunehmen und den vollständigen Namen der entsprechenden Kompassrichtung sowie die Abkürzung auszugeben.
Testfälle:
Input Output
0 North N
23.97 North-northeast NNE
33.7 Northeast by north NEbN
73.12 East-northeast ENE
73.13 East by north EbN
219 Southwest by south SWbS
275 West W
276 West by north WbN
287 West-northwest WNW
Die Groß- und Kleinschreibung muss wie in den Testfällen erhalten bleiben. Die maximale Anzahl von Dezimalstellen ist 2. Alle Eingabenummern sind größer oder gleich 0 und kleiner als 360. Wenn ein Dezimalpunkt vorhanden ist, werden auf beiden Seiten Ziffern angezeigt (Sie müssen nicht mit .1
oder umgehen 1.
).
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
Perl,
250 236 231 188187Bearbeiten: Einige Bytes aus Ausnutzung der Symmetrie (wie ich in @bazzargh Lösung gesehen habe)
+ Bearbeiten: Und ein paar böse Tricks ...
+ Bearbeiten : Zurück zu meinem Ausgangspunkt (Arbeiten mit der Liste, nicht mit der Zeichenfolge) und Ausnutzen von mehr Symmetrie = 1 Byte weniger und viel hässlicher.
Hübsch gedruckt:
5.014 wegen
r
Modifikator erforderlich .quelle
Javascript
470453438434432421404Sie können diesen Code auf Ihre Konsole kopieren und ausführen. Es fordert Sie zur Eingabe der Grade auf und gibt das Ergebnis mit aus
alert();
Ungolfed Javascript kann auf dieser Seite gefunden werden: http://jsfiddle.net/AezL3/11
quelle
calcPoint(32)
Mach einfach das , was 0 macht, damit du das mit%32
oder ähnlichem machen kannst .var name = calcPoint(input % 32);
Haskell
415372347330317304301CKonvergierte auf einer Lösung wie @ VadimR (und die Symmetrie zurück!). Verwendung:
h 219
Ausgänge"Southwest by south SWbS"
Noch 3 Zeichen, danke @shiona.
quelle
drop 1
ist das gleiche wie Schwanz. Auch wenn ich mich nicht irre, kannst due l@(x:_)=x:tail$d l
noch einen Saibling rasieren.Python 3.8 ,
482438424 BytesProbieren Sie es online!
Dies ist, was ich nach einigem Golfen von Tony Goodwins Antwort bekam ; Wird bei einer eigenen Antwort gepostet, da der TIO-Link für einen Kommentar zu lang ist. Wenn er beschließt, seine Antwort auf das oben Gesagte zu aktualisieren, werde ich diese Antwort löschen.
Ich gehe davon aus, dass es akzeptabel ist, eine Funktion als Lösung und nicht als vollständiges Programm einzureichen. Wenn nicht, hier ein volles Programm mit 426 Bytes.
Ich gehe davon aus, dass noch viel getan werden kann, um zu verkürzen
b
.Edit: Ab 44 Bytes mit freundlicher Genehmigung des majestätischen Walrosses.
b
Ich habe immer noch nicht das Gefühl, dass es fertig ist, Golf zu spielen.Edit2: Rasiert weitere 14 durch Auspacken von Dikten anstatt mit
keys()
unditems()
.quelle
Python,
2103164711031034924889848 BytesSehr spät, ich weiß. Vielen Dank für die Herausforderung, ich richte mit meinem Pi ein Magnetometer für die Windrichtung ein und wollte eine solche 16-Punkt-Kompass-Lösung, die in die Wettervorhersagealgorithmen eingeht. Mein gesamter Code ist in Python, daher gibt es hier eine Version der Javascript-Lösung, die bereits in Python veröffentlicht wurde, aber mit einer zusätzlichen Wendung, bei der Sie entweder 32, 16 oder 8 Punkte des Kompasses bei der Variablen j angeben können, und ich habe den Versatz geändert von degHead in der Anweisung davor, abhängig von der Anzahl der Punkte. Ich habe einen geänderten Umbenennungsalogorithmus verwendet (und Variablen verwendet, die ich umbenennen konnte, ohne die Wörter zu beschädigen!), Um sicherzustellen, dass ich die Fallanforderungen der Frage erfüllte.
Ich weiß, dass dies nicht gewinnen wird, da Python wortreicher ist, und ich auch.
Kurzfassung:
Klare Version
quelle