Dada una cadena de N, S, E y W, genera un rumbo (ángulo en sentido horario desde el Norte en grados), correcto a 5 decimales.
En la notación de brújula tradicional , una cadena se compone de solo 2 de estos caracteres (como NNW o ESE). Aquí también debe aceptar cadenas que contengan las 4 (como WNNNSE) . El uso de solo 2 símbolos permite a los humanos comprender intuitivamente el significado. Permitir 4 símbolos hace que sea horrible de leer, pero permite formas más cortas de describir un rumbo con una precisión dada.
(Como se señaló en los comentarios de user2357112 , resulta que puede probar que para cualquier demora dada, la cadena de 4 símbolos tendrá exactamente la misma longitud que la cadena de 2 símbolos, por lo que he basado este desafío en una suposición falsa. Con suerte, esta falta de un propósito práctico no le resta valor al disfrute del desafío ...)
El método exacto se describe a continuación y es equivalente a la notación tradicional (se expande en lugar de cambiarla).
Entrada
- La entrada es una sola cadena que contiene solo los caracteres
NESW. - La entrada puede ser una secuencia de caracteres si lo prefiere, siempre que no incluya ningún preprocesamiento. Por ejemplo,
[N, [E, [S, [W]]]]no está permitido tomar una lista anidada para ayudar con el orden de procesamiento. - Tomar diferentes personajes no está permitido. No puede tomar una cadena de en
1234lugar deNESW.
Salida
- La salida debe ser un número decimal o una representación de cadena de uno (no un racional / fracción).
- No es necesario mostrar los ceros finales. Si el rumbo es
9.00000, entonces la salida9también cuenta como correcta a 5 decimales. - La salida está en el rango [0, 360). Es decir, incluye 0 pero excluye 360.
- La corrección se verifica redondeando la salida a 5 decimales. Si el rodamiento es 0.000005, esto se redondea a 0.00001. Las salidas 0.00001 y 0.000005 son correctas.
- La producción en notación científica para algunas entradas es aceptable. Por ejemplo, en
1e-5lugar de0.00001.
Conversión
- Puntos El solo carácter brújula
N,E,S, yWcorresponden a 0, 90, 180, y 270 grados, respectivamente. - Anteponer uno de estos a una cadena da como resultado el rumbo que divide el rumbo del carácter único y el rumbo de la cadena original.
- Se elige el más cercano de los dos posibles cojinetes de bisección, de modo que NE represente 45 grados, no 225 grados.
- Esto no es ambiguo, excepto donde el ángulo que se bisecará es de 180 grados. Por lo tanto
NS,SN,WE, yEWcorresponden a los rodamientos no definida, y la entrada nunca terminarán en cualquiera de estos. Sin embargo, pueden aparecer en cualquier otro lugar de la cadena de entrada, ya que esto no causa ambigüedad. - Si los dos caracteres finales son idénticos, el carácter final será redundante ya que la bisección devolverá el mismo rumbo. Como esto no agrega nada a la notación, su código no necesita manejar esto. Por lo tanto
NN,EE,SS, yWWcorresponden a los rodamientos no definida, y la entrada nunca terminarán en cualquiera de estos. Sin embargo, pueden aparecer en cualquier otro lugar de la cadena de entrada.
Ejemplos
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
Casos de prueba
Un envío solo es válido si proporciona la salida correcta para todos los casos de prueba. Tenga en cuenta que los casos de prueba llegan al límite de lo que se puede manejar con doble precisión. Para los idiomas que tienen por defecto la precisión simple, probablemente necesitará gastar los bytes para especificar la precisión doble para obtener resultados correctos.
Las salidas de casos de prueba se muestran redondeadas a 5 decimales, y también a precisión arbitraria. Ambas son salidas válidas.
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
Tanteo
Este es el código de golf . La puntuación es la longitud del código fuente en bytes, y gana el más corto.
Pedantería
Cometí el error de pensar que "Norte por Noroeste" era una dirección válida de la brújula. Un error feliz, ya que condujo a una idea desafiante, pero luego descubrí en la página de Wikipedia :
"El título de la película de Alfred Hitchcock 1959, North by Northwest, en realidad no es un punto de dirección en la brújula de 32 vientos, pero el la película contiene una referencia a Northwest Airlines ".
También resulta que el método utilizado para este desafío solo es consistente con los puntos de brújula tradicionales hasta e incluyendo la brújula de 16 puntos. La brújula de 32 vientos descrita en esa página es sutilmente diferente y convenientemente he pasado por alto su existencia para este desafío.
Finalmente, para cualquiera que piense que debería usar "Sureste" en lugar de "Sureste",.
WNNNSEla salida sería 323.4375. Consulte la sección de ejemplos para ver un tutorial que se aplicaría de la misma manera a este caso.
f(N,N,N,S,E)está bien?
WNNNSE<= ¿cuál sería la salida para esta entrada de ejemplo al comienzo de su publicación? me parece inválido, pero es difícil saberlo.