Étant donné une chaîne de N, S, E et W, affichez un relèvement (angle dans le sens horaire à partir du nord en degrés), corrigez à 5 décimales.
En notation boussole traditionnelle , une chaîne est composée de seulement 2 de ces caractères (comme NNW ou ESE). Ici, vous devez également accepter les chaînes qui contiennent les 4 (comme WNNNSE) . L'utilisation de seulement 2 symboles permet aux humains de comprendre intuitivement la signification. Permettre 4 symboles le rend horrible à lire, mais permet des manières plus courtes de décrire un relèvement avec une précision donnée.
(Comme indiqué dans les commentaires de user2357112 , il s'avère que vous pouvez prouver que pour un roulement donné, la chaîne de 4 symboles aura exactement la même longueur que la chaîne de 2 symboles, j'ai donc basé ce défi sur une fausse hypothèse. Espérons que ce manque d'objectif pratique ne nuise pas à votre plaisir de relever le défi ...)
La méthode exacte est décrite ci-dessous et est équivalente à la notation traditionnelle (elle se développe sur elle plutôt que de la changer).
Contribution
- L'entrée est une chaîne unique contenant uniquement les caractères
NESW. - L'entrée peut être une séquence de caractères si vous préférez, à condition que cela n'inclue aucun prétraitement. Par exemple, la prise d'une liste imbriquée
[N, [E, [S, [W]]]]pour faciliter l'ordre de traitement n'est pas autorisée. - Il n'est pas permis de prendre des personnages différents. Vous ne pouvez pas prendre une chaîne de
1234au lieu deNESW.
Sortie
- La sortie doit être un nombre décimal ou une représentation sous forme de chaîne de un (pas une ration / fraction).
- Les zéros de fin n'ont pas besoin d'être affichés. Si le relèvement est
9.00000, la sortie9compte également comme correcte jusqu'à 5 décimales. - La sortie est dans la plage [0, 360). C'est-à-dire, y compris 0 mais à l'exclusion de 360.
- L'exactitude est vérifiée en arrondissant la sortie à 5 décimales. Si le relèvement est de 0,000005, il arrondit à 0,00001. Les sorties 0.00001 et 0.000005 sont toutes les deux correctes.
- La sortie en notation scientifique pour certaines entrées est acceptable. Par exemple,
1e-5au lieu de0.00001.
Conversion
- Les points du caractère unique
N,E,S, etWcorrespondent à 0, 90, 180 et 270 degrés respectivement. - Si vous ajoutez un de ces éléments à une chaîne, le relèvement divise le relèvement du caractère unique et le relèvement de la chaîne d'origine.
- Le plus proche des deux paliers bissecteurs possibles est choisi, de sorte que NE représente 45 degrés, et non 225 degrés.
- Ceci est sans ambiguïté sauf lorsque l'angle à bissecter est de 180 degrés. Par conséquent
NS,SN,WEetEWcorrespondent à des paliers non défini, et l'entrée ne sera jamais fin dans l' un de ces. Ils peuvent cependant apparaître n'importe où ailleurs dans la chaîne d'entrée, car cela ne crée aucune ambiguïté. - Si les deux derniers caractères sont identiques, le caractère final sera redondant car la bissection retournera le même relèvement. Comme cela n'ajoute rien à la notation, votre code n'a pas besoin de gérer cela. Par conséquent
NN,EE,SSetWWcorrespondent à des paliers non défini, et l'entrée ne sera jamais fin dans l' un de ces. Ils peuvent cependant apparaître n'importe où ailleurs dans la chaîne d'entrée.
Exemples
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
Cas de test
Une soumission n'est valide que si elle donne une sortie correcte pour tous les cas de test. Notez que les cas de test repoussent les limites de ce qui peut être traité avec une double précision. Pour les langues par défaut à simple précision, vous devrez probablement dépenser les octets pour spécifier la double précision afin d'obtenir des sorties correctes.
Les sorties des cas de test sont représentées arrondies à 5 décimales et avec une précision arbitraire. Les deux sont des sorties valides.
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
Notation
C'est du code-golf . Le score est la longueur du code source en octets, et le gain le plus court.
Pédantisme
J'ai fait l'erreur de penser que «North by North West» était une direction de boussole valide. Une erreur heureuse, car elle a conduit à une idée de défi, mais j'ai découvert à partir de la page Wikipedia :
"Le titre du film d'Alfred Hitchcock 1959, North by Northwest, n'est en fait pas un point de direction sur la boussole à 32 vents, mais le le film contient une référence à Northwest Airlines. "
Il s'avère également que la méthode utilisée pour ce défi est cohérente uniquement avec les points cardinaux traditionnels jusqu'au compas 16 points inclus. La boussole à 32 vents décrite sur cette page est subtilement différente et j'ai commodément ignoré son existence pour ce défi.
Enfin, pour tous ceux qui pensent que je devrais utiliser "Sud-Est" au lieu de "Sud-Est",.
WNNNSEla sortie serait 323.4375. Consultez l'exemple de section pour une procédure pas à pas qui s'appliquerait de la même manière à ce cas.
f(N,N,N,S,E)correcte?
WNNNSE<= quelle serait la sortie de cet exemple d'entrée au début de votre message? cela me semble invalide, mais c'est difficile à dire.