Se me ocurrió este desafío de forma independiente, pero resulta ser lo contrario a este desafío de Doorknob . Como realmente me gusta su especificación, decidí robar gran parte de ella en lugar de preparar mis propias explicaciones.
El reto
Dada la abreviatura de uno de los 32 puntos en la brújula, imprima los grados correspondientes. Siéntase libre de saltar a la tabla a continuación si no está interesado en una explicación de los 32 puntos.
Aquí está la brújula completa:
Por Denelson83 (Trabajo propio) [ GFDL o CC-BY-SA-3.0 ], a través de Wikimedia Commons
Cada dirección es 11.25 (360/32) grados más lejos que la anterior. Por ejemplo, N (norte) es 0 grados, NbE (norte por este) es 11.25 grados, NNE (norte-noreste) es 22.5 grados, etc.
En detalle, los nombres se asignan de la siguiente manera:
- 0 grados es N, 90 grados es E, 180 grados es S y 270 grados es W. Estas se llaman direcciones cardinales.
- Los puntos intermedios entre las direcciones cardinales son simplemente las direcciones cardinales que están entre concatenados. N o S siempre van primero, y W o E siempre son segundos. Estas se llaman direcciones ordinales. Las direcciones ordinales y cardinales juntas forman los vientos principales.
- Los puntos intermedios entre los vientos principales son las direcciones que están entre concatenados. Las direcciones cardinales van primero, ordinal segundo. Estos se llaman vientos a medias.
- Los puntos intermedios entre los vientos principales y medios son el viento principal adyacente "por" la dirección cardinal más cercana lejos del viento principal. Esto se denota con a
b
. Estos se llaman cuartos de viento.
Esto da como resultado el siguiente cuadro:
# Degrees Abbrv. Name
1 0 N North
2 11.25 NbE North by east
3 22.5 NNE North-northeast
4 33.75 NEbN Northeast by north
5 45 NE Northeast
6 56.25 NEbE Northeast by east
7 67.5 ENE East-northeast
8 78.75 EbN East by north
9 90 E East
10 101.25 EbS East by south
11 112.5 ESE East-southeast
12 123.75 SEbE Southeast by east
13 135 SE Southeast
14 146.25 SEbS Southeast by south
15 157.5 SSE South-southeast
16 168.75 SbE South by east
17 180 S South
18 191.25 SbW South by west
19 202.5 SSW South-southwest
20 213.75 SWbS Southwest by south
21 225 SW Southwest
22 236.25 SWbW Southwest by west
23 247.5 WSW West-southwest
24 258.75 WbS West by south
25 270 W West
26 281.25 WbN West by north
27 292.5 WNW West-northwest
28 303.75 NWbW Northwest by west
29 315 NW Northwest
30 326.25 NWbN Northwest by north
31 337.5 NNW North-northwest
32 348.75 NbW North by west
Aquí hay una tabla más detallada y posiblemente una mejor explicación de los puntos de la brújula.
Su tarea es tomar como entrada una de las 32 abreviaturas de la tercera columna y generar los grados correspondientes en la segunda columna.
Puede suponer que la entrada siempre será exactamente una de esas 32 cadenas (y puede esperar opcional pero consistentemente una nueva línea final). La salida también se debe dar exactamente como se enumeró anteriormente, aunque se permiten ceros finales. Opcionalmente, puede generar una nueva línea final.
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
fuente
n
pero tuve que elegirlos con cuidado.Javascript (ES6), 153 bytes
Solo quería que la pelota rodara con una simple.
No es particularmente innovador, pero funciona, y tal vez hay algunos consejos que podrían derivarse de él. No se preocupe, pensaré en otra técnica (con suerte mejor).
fuente
CJam, 49 bytes
Lo anterior es un hexdump, que se puede revertir con
xxd -r -c 17 -g 1
.Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Java, 653 (caracteres)
Sé que Java no puede ganar, pero me gusta hacer el esfuerzo de todos modos.
Toma entrada de la línea de comandos y salidas a la consola. Versión sin golf:
Funciona asignando 0-3 a NW (o 4 para N si W está involucrado). Reconoce 4 situaciones diferentes:
En print () el valor se multiplica por 90 para obtener el ángulo real.
fuente
C c=new C(r[0]);
? Tal veznew C(r[0]);
es suficiente?Python 3, 149 bytes
Intenté un enfoque algorítmico recursivo. Los vientos de cuarto fueron más difíciles de manejar de lo que pensé al principio, por lo que esta solución se hizo relativamente larga.
Sin golf:
fuente
f("NbW")
devuelve en34.875
lugar de348.75
)Haskell, 206 bytes
Prueba conveniente:
fuente
PowerShell - 350
fuente
Julia,
151147142 bytesUn poco ignorante:
En el código no golfizado, cuento el promedio de dos vectores para tener el vector todavía normalizado. Sin embargo, los errores debidos al alargamiento del primer vector aún no se acumulan con tan pocas adiciones en nuestra recursividad, por lo que mientras se jugaba se eliminó el paso de normalización y el cómputo es simple. Los errores de menos de 1/64 del círculo completo se filtran redondeando.
fuente