Eu vim com esse desafio de forma independente, mas acaba sendo o inverso a esse desafio da Maçaneta da porta . Como eu realmente gosto das especificações dele, decidi roubá-las em vez de inventar minhas próprias explicações.
O desafio
Dada a abreviação de um dos 32 pontos na bússola, imprima os graus correspondentes. Sinta-se à vontade para pular a tabela abaixo se não estiver interessado em obter uma explicação dos 32 pontos.
Aqui está a bússola completa:
Por Denelson83 (Trabalho próprio) [ GFDL ou CC-BY-SA-3.0 ], via Wikimedia Commons
Cada direção tem 11,25 (360/32) graus a mais que a anterior. Por exemplo, N (norte) é 0 graus, NbE (norte a leste) é 11,25 graus, NNE (norte-nordeste) é 22,5 graus, etc.
Em detalhes, os nomes são atribuídos da seguinte forma:
- 0 graus é N, 90 graus é E, 180 graus é S e 270 graus é W. Essas são chamadas direções cardinais.
- Os pontos intermediários entre as direções cardeais são simplesmente as direções cardinais entre as concatenadas. N ou S sempre vão primeiro e W ou E sempre são os segundos. Essas são chamadas direções ordinais. As direções ordinal e cardinal juntas formam os ventos principais.
- Os pontos intermediários entre os ventos principais são as direções entre as quais são concatenadas. As direções cardeais vão primeiro, segundo ordinal. Estes são chamados de meio vento.
- Os pontos intermediários entre o vento principal e o meio vento são o vento principal adjacente "por" a direção cardinal mais próxima do vento principal. Isso é indicado com a
b
. Estes são chamados quartos de vento.
Isso resulta no seguinte gráfico:
# 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
Aqui está um gráfico mais detalhado e, possivelmente, uma melhor explicação dos pontos da bússola.
Sua tarefa é tomar como entrada uma das 32 abreviações da terceira coluna e gerar os graus correspondentes na segunda coluna.
Você pode presumir que a entrada sempre será exatamente uma dessas 32 strings (e, opcionalmente, mas de maneira consistente, poderá esperar uma única nova linha à direita). A saída também deve ser fornecida exatamente como listado acima, embora os zeros à direita sejam permitidos. Opcionalmente, você pode gerar uma única nova linha à direita.
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
fonte
n
mas tive que escolhê-los com cuidado.Javascript (ES6), 153 bytes
Só queria fazer a bola rolar com uma simples.
Não é particularmente inovador, mas funciona, e talvez haja algumas dicas que possam ser derivadas disso. Não se preocupe, pensarei em outra técnica (espero que melhor).
fonte
CJam, 49 bytes
O acima é um hexdump, que pode ser revertido com
xxd -r -c 17 -g 1
.Experimente on-line no intérprete CJam .
Como funciona
fonte
Java, 653 (caracteres)
Eu sei que o Java não pode vencer, mas eu gosto de fazer o esforço de qualquer maneira.
Ele recebe entrada da linha de comando e produz para o console. Versão não destruída:
Ele funciona atribuindo 0-3 a NW (ou 4 para N se W estiver envolvido). Reconhece 4 situações diferentes:
Em print (), o valor é multiplicado por 90 para obter o ângulo real.
fonte
C c=new C(r[0]);
? Talveznew C(r[0]);
seja suficiente?Python 3, 149 bytes
Eu tentei uma abordagem algorítmica recursiva. Os ventos fracos eram mais difíceis de lidar do que eu pensava a princípio, então essa solução cresceu relativamente longa.
Ungolfed:
fonte
f("NbW")
retorna em34.875
vez de348.75
) #Haskell, 206 bytes
Teste conveniente:
fonte
PowerShell - 350
fonte
Julia,
151147142 bytesUm pouco destroçado:
No código não-contado, conto a média de dois vetores para que o vetor ainda seja normalizado. No entanto, os erros devido ao alongamento do primeiro vetor ainda não estão se acumulando com tão poucas adições em nossa recursão; portanto, durante o golfe, a etapa de normalização foi removida e o cálculo é simples. Erros menores que 1/64 do círculo completo são filtrados por arredondamento.
fonte