La brújula de 32 puntos es ... interesante, por decir lo menos.
Por Denelson83 (Trabajo propio) [ GFDL o CC-BY-SA-3.0 ], a través de Wikimedia Commons
Su desafío es tomar una medida de grado y convertirla en una dirección en la brújula de 32 puntos.
Cada dirección es 11.25 (360/32) grados más 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 cuanto a cómo se supone que debes obtener las instrucciones,
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.
Los puntos intermedios entre las direcciones cardinales y ordinales son las direcciones entre concatenadas, de nuevo, con un "-" en el medio. Las direcciones cardinales van primero, ordinal segundo.
- Estas se llaman direcciones secundarias-intercardinales.
Los puntos intermedios entre las direcciones secundaria-intercardinal y otras direcciones son las otras direcciones "por" la dirección cardinal a la que están más cercanas (aparte de la que está directamente al lado de ellas, por supuesto).
- No tengo idea de cómo se llaman: P
Si toda esta explicación le hace tanto daño a su cerebro como al mío, puede consultar este cuadro:
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
Aquí hay una tabla más detallada y posiblemente una mejor explicación de los puntos de la brújula.
Su desafío es ingresar datos en grados y generar el nombre completo de la dirección de la brújula a la que corresponde, junto con su abreviatura.
Casos de prueba:
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
Toda capitalización debe ser preservada, como en los casos de prueba. El número máximo de lugares decimales es 2. Todos los números de entrada serán mayores o iguales a 0, y menores que 360. Si hay un punto decimal, habrá dígitos en ambos lados (no tiene que manejar .1
o 1.
).
Este es el código de golf , por lo que gana el código más corto en bytes.
Respuestas:
Perl,
250 236 231 188187Editar: algunos bytes de la simetría de explotación (como he visto en la solución @bazzargh)
+ Editar: Y algunos trucos malvados ...
+ Editar : Volver a donde comencé (trabajando con la lista, no con la cadena), y explotando más simetría = 1 byte apagado y mucho más feo.
Bonito estampado:
5.014 requerido debido al
r
modificador.fuente
Javascript
470453438434432421404Puede copiar este código en su consola y ejecutarlo. Le solicita los grados de entrada y genera el resultado con
alert();
Puede encontrar Javascript sin campos en este violín: http://jsfiddle.net/AezL3/11
fuente
calcPoint(32)
lo que hace 0, para que pueda hacer esto con%32
o cualquier similar.var name = calcPoint(input % 32);
funcionaHaskell
415372347330317304301CTerminé convergiendo en una solución como la de @ VadimR (¡y la simetría ha vuelto!). Uso:
h 219
salidas"Southwest by south SWbS"
Se han ido 3 caracteres más, gracias @shiona.
fuente
drop 1
Es lo mismo que la cola. Además, si no me equivoco, puedes hacerloe l@(x:_)=x:tail$d l
para afeitarte un poco más.Python 3.8 ,
482438424 bytesPruébalo en línea!
Esto es lo que obtuve después de jugar al golf con la respuesta de Tony Goodwin ; publicado en su propia respuesta debido a que el enlace TIO es demasiado largo para un comentario. Si elige actualizar su respuesta a lo anterior, eliminaré esta respuesta.
Supongo que es aceptable enviar una función como una solución en lugar de un programa completo. Si no, aquí hay un programa completo de 426 bytes.
Espero que todavía se pueda hacer mucho para acortar
b
.Editar: Golfed 44 bytes, cortesía de la majestuosa morsa. Todavía no siento que
b
se haya terminado de jugar al golf.Edit2: afeitó otro 14 por desembalar predice en vez de usar
keys()
yitems()
.fuente
Python,
2103164711031034924889848 bytesMuy tarde, lo sé. Gracias por el desafío, estoy configurando un magnetómetro para la dirección del viento con mi Pi, y quería una solución de 16 puntos de brújula como esta para alimentar los algoritmos de pronóstico del tiempo. Todo mi código está en Python, así que aquí hay una versión de la solución de JavaScript ya publicada en Python, pero con un giro adicional que puede especificar 32, 16 u 8 puntos de la brújula en la variable j, y he cambiado el desplazamiento de degHead en la declaración anterior, dependiendo del número de puntos. Utilicé un alogoritmo de cambio de nombre modificado (¡y utilicé variables que podía cambiar de nombre sin corromper las palabras!) Para asegurarme de que cumplía con los requisitos del caso de la pregunta.
Sé que esto no ganará, ya que Python es más prolijo, y yo también.
Version corta:
Versión clara
fuente