Dada uma sequência de N, S, E e W, produza um rolamento (ângulo no sentido horário em relação ao norte em graus), corrija até 5 casas decimais.
Na notação tradicional da bússola , uma sequência é composta por apenas 2 desses caracteres (como NNW ou ESE). Aqui você também deve aceitar cadeias que contêm todas as 4 (como WNNNSE) . O uso de apenas 2 símbolos permite que os humanos compreendam intuitivamente o significado. Permitir 4 símbolos torna a leitura horrível, mas permite maneiras mais curtas de descrever um rolamento com uma determinada precisão.
(Como apontado nos comentários do usuário2357112 , verifica-se que você pode provar que, para qualquer rolamento, a sequência de 4 símbolos terá exatamente o mesmo comprimento que a sequência de 2 símbolos, portanto, baseei esse desafio em uma suposição falsa. Espero que essa falta de um objetivo prático não prejudique o seu prazer no desafio ...)
O método exato é descrito abaixo e é equivalente à notação tradicional (ela se expande em vez de alterá-la).
Entrada
- A entrada é uma única sequência que contém apenas os caracteres
NESW
. - A entrada pode ser uma sequência de caracteres, se você preferir, desde que isso não inclua nenhum pré-processamento. Por exemplo,
[N, [E, [S, [W]]]]
não é permitida uma lista aninhada para ajudar na ordem de processamento. - Não são permitidos caracteres diferentes. Você não pode usar uma sequência de caracteres em
1234
vez deNESW
.
Saída
- A saída deve ser um número decimal ou representação de sequência de um (não uma fração / racional).
- Zeros à direita não precisam ser exibidos. Se o rolamento for
9.00000
, a saída9
também conta como correta com 5 casas decimais. - A saída está no intervalo [0, 360). Ou seja, incluindo 0, mas excluindo 360.
- A correção é verificada arredondando a saída para 5 casas decimais. Se o rolamento for 0,000005, este arredondará para 0,00001. As saídas 0,00001 e 0,000005 estão corretas.
- A saída em notação científica para algumas entradas é aceitável. Por exemplo, em
1e-5
vez de0.00001
.
Conversão
- A pontos de caracteres único bússola
N
,E
,S
, eW
correspondem a 0, 90, 180, e 270 graus respectivamente. - Anexar um desses a uma sequência resulta no rolamento que corta o rolamento do caractere único e o rolamento da sequência original.
- O mais próximo dos dois possíveis rolamentos de bissecção é escolhido, de modo que NE representa 45 graus, não 225 graus.
- Isso é inequívoco, exceto onde o ângulo a ser dividido é 180 graus. Portanto
NS
,SN
,WE
, eEW
correspondem aos rolamentos indefinida, e a entrada nunca irá terminar em qualquer um destes. No entanto, eles podem aparecer em qualquer outro lugar na sequência de entrada, pois isso não causa ambiguidade. - Se os dois caracteres finais forem idênticos, o caractere final será redundante, pois a bissecção retornará o mesmo rumo. Como isso não adiciona nada à notação, seu código não precisa lidar com isso. Portanto
NN
,EE
,SS
, eWW
correspondem aos rolamentos indefinida, e a entrada nunca irá terminar em qualquer um destes. No entanto, eles podem aparecer em qualquer outro lugar na sequência de entrada.
Exemplos
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 teste
Um envio é válido apenas se fornecer saída correta para todos os casos de teste. Observe que os casos de teste ultrapassam os limites do que pode ser tratado com precisão dupla. Para idiomas que usam a precisão única como padrão, você provavelmente precisará gastar os bytes para especificar a precisão dupla, a fim de obter resultados corretos.
As saídas do caso de teste são mostradas arredondadas para 5 casas decimais e também com precisão arbitrária. Ambos são saídas 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
Pontuação
Isso é código-golfe . A pontuação é o comprimento do código-fonte em bytes e as vitórias mais curtas.
Pedantry
Cometi o erro de pensar que "North by North West" era uma direção válida da bússola. Um erro feliz, pois levou a uma idéia desafiadora, mas descobri na página da Wikipedia :
"O título do filme de Alfred Hitchcock 1959, North by Northwest, na verdade não é um ponto de direção na bússola de 32 ventos, mas o filme contém uma referência à Northwest Airlines ".
Acontece também que o método usado para esse desafio é consistente apenas com os pontos tradicionais da bússola, incluindo a bússola de 16 pontos. A bússola de 32 ventos descrita nessa página é sutilmente diferente e eu negligenciei convenientemente sua existência para esse desafio.
Finalmente, para quem pensa que eu deveria usar "Sudeste" em vez de "Sudeste",.
WNNNSE
a saída seria 323.4375
. Consulte a seção de exemplo para obter uma explicação passo a passo que se aplicaria da mesma maneira a este caso.
f(N,N,N,S,E)
boa?
WNNNSE
<= qual seria a saída desse exemplo de entrada no início da sua postagem? parece inválido para mim, mas é difícil dizer.