La boussole à 32 points est ... intéressante, c'est le moins qu'on puisse dire.
Par Denelson83 (Travail personnel) [ GFDL ou CC-BY-SA-3.0 ], via Wikimedia Commons
Votre défi est de prendre une mesure de degré et de la convertir dans une direction sur la boussole à 32 points.
Chaque direction est plus éloignée de 11,25 (360/32) que la précédente. Par exemple, N (nord) est de 0 degré, NbE (nord par est) est de 11,25 degrés, NNE (nord-nord-est) est de 22,5 degrés, etc.
Quant à la façon dont vous êtes censé obtenir les directions,
0 degré est N, 90 degrés E, 180 degrés S et 270 degrés W.
- Celles-ci sont appelées directions cardinales.
Les points à mi-chemin entre les directions cardinales sont simplement les directions cardinales entre lesquelles ils sont concaténés. N ou S vont toujours en premier, et W ou E sont toujours en deuxième position.
- Celles-ci sont appelées directions ordinales.
Les points à mi-chemin entre les directions cardinales et ordinales sont les directions entre lesquelles ils sont concaténés, encore une fois, avec un «-» entre les deux. Les directions cardinales vont en premier, les secondes ordinales.
- Celles-ci sont appelées directions intercardinales secondaires.
Les points à mi-chemin entre les directions secondaire-intercardinales et les autres directions sont les autres directions "par" la direction cardinale dont ils sont les plus proches (autre que celle directement à côté d'eux, bien sûr).
- Je ne sais pas comment on les appelle: P
Si toute cette explication blesse autant votre cerveau que le mien, vous pouvez vous référer à ce tableau:
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
Voici un tableau plus détaillé et éventuellement une meilleure explication des points cardinaux.
Votre défi consiste à saisir les données en degrés et à afficher le nom complet de la direction de la boussole à laquelle il correspond, ainsi que son abréviation.
Cas de test:
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
Toute la capitalisation doit être préservée, comme dans les cas de test. Le nombre maximum de décimales est 2. Tous les nombres en entrée seront supérieurs ou égaux à 0 et inférieurs à 360. Si un séparateur décimal est présent, il y aura des chiffres des deux côtés (vous n'avez pas à gérer .1
ou 1.
).
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Réponses:
Perl,
250 236 231 188187Edit: Quelques octets hors exploitation de la symétrie (comme je l'ai vu dans la solution @bazzargh)
+ Edit: Et quelques trucs diaboliques ...
+ Edit : Retour à l'endroit où j'ai commencé (travailler avec la liste, pas la chaîne), et exploiter plus de symétrie = 1 octet de moins et beaucoup plus laid.
Assez imprimé:
5.014 requis en raison du
r
modificateur.la source
Javascript
470453438434432421404Vous pouvez copier ce code sur votre console et l'exécuter. Il vous invite à entrer les degrés et à sortir le résultat avec
alert();
Javascript non golfé se trouve sur ce violon: http://jsfiddle.net/AezL3/11
la source
calcPoint(32)
simplement ce que 0 fait, donc vous pouvez le faire avec%32
ou similaire.var name = calcPoint(input % 32);
fait l'affaireHaskell
415372347330317304301CA fini par converger vers une solution comme @ VadimR (et le dos de la symétrie!). Utilisation:
h 219
sorties"Southwest by south SWbS"
3 autres caractères disparus, merci @shiona.
la source
drop 1
est identique à la queue. Aussi, si je ne me trompe pas, vous pouvez fairee l@(x:_)=x:tail$d l
pour raser encore un autre caractère.Python 3.8 ,
482438424 octetsEssayez-le en ligne!
C'est ce que j'ai obtenu après avoir joué au golf de la réponse de Tony Goodwin ; affiché à sa propre réponse en raison du lien TIO étant trop long pour un commentaire. S'il choisit de mettre à jour sa réponse à ce qui précède, je supprimerai cette réponse.
Je suppose qu'il est acceptable de soumettre une fonction comme solution plutôt que comme programme complet. Sinon, voici un programme complet à 426 octets.
J'espère que beaucoup peut encore être fait pour raccourcir
b
.Edit: golfé de 44 octets, gracieuseté du majestueux morse. Je n'ai toujours pas l'impression d'
b
avoir fini de jouer au golf.Edit2: rasé 14 autres en déballant les dict au lieu d'utiliser
keys()
etitems()
.la source
Python,
2103164711031034924889848 octetsTrès tard, je sais. Merci pour le défi, je mets en place un magnétomètre pour la direction du vent avec mon Pi, et je voulais une solution à 16 points de boussole comme celle-ci pour alimenter les algorithmes de prévisions météorologiques. Tout mon code est en Python, alors voici la version de la solution javascript déjà publiée en Python, mais avec une touche supplémentaire que vous pouvez spécifier soit 32, 16 ou 8 points de la boussole à la variable j, et j'ai changé le décalage de degHead dans l'instruction qui précède, en fonction du nombre de points. J'ai utilisé un alogorithme de changement de nom modifié (et utilisé des variables que je pouvais renommer sans corrompre les mots!) Pour m'assurer de répondre aux exigences de cas de la question.
Je sais que cela ne gagnera pas, car Python est plus verbeux, et moi aussi.
Version courte:
Version claire
la source