Data una stringa di N, S, E e W, produce un rilevamento (angolo in senso orario da nord in gradi), corretto con 5 decimali.
Nella notazione bussola tradizionale , una stringa è composta da solo 2 di questi caratteri (come NNW o ESE). Qui devi anche accettare le stringhe che contengono tutte e 4 (come WNNNSE) . L'uso di soli 2 simboli consente agli umani di comprendere intuitivamente il significato. Consentire 4 simboli rende orribile la lettura, ma consente modi più brevi di descrivere un rilevamento con una data precisione.
(Come sottolineato nei commenti di user2357112 , risulta che puoi dimostrare che per ogni dato rilevamento , la stringa di 4 simboli avrà esattamente la stessa lunghezza della stringa di 2 simboli, quindi ho basato questa sfida su un presupposto falso. Speriamo che questa mancanza di uno scopo pratico non toglie il godimento della sfida ...)
Il metodo esatto è descritto di seguito ed è equivalente alla notazione tradizionale (si espande su di esso anziché modificarlo).
Ingresso
- L'input è una singola stringa contenente solo i caratteri
NESW. - L'input può essere una sequenza di caratteri, se si preferisce, purché ciò non includa alcuna preelaborazione. Ad esempio,
[N, [E, [S, [W]]]]non è consentito prendere un elenco nidificato per facilitare l'ordine di elaborazione. - Non è consentito assumere personaggi diversi. Non puoi prendere una stringa di
1234invece diNESW.
Produzione
- L'output deve essere un numero decimale o una rappresentazione di stringa di uno (non un razionale / frazione).
- Gli zeri finali non devono essere visualizzati. Se il rilevamento è
9.00000, quindi anche l'output9conta come corretto con 5 decimali. - L'output è compreso nell'intervallo [0, 360). Cioè, incluso 0 ma escluso 360.
- La correttezza viene verificata arrotondando l'output a 5 cifre decimali. Se il cuscinetto è 0,000005, questo arrotondamento a 0,00001. Le uscite 0.00001 e 0.000005 sono entrambe corrette.
- L'output in notazione scientifica per alcuni input è accettabile. Ad esempio,
1e-5invece di0.00001.
Conversione
- Inoltre, il singolo carattere bussola
N,E,S, eWcorrispondono rispettivamente a 0, 90, 180, e 270 gradi. - Preparando uno di questi a una stringa si ottiene il rilevamento che taglia in due il rilevamento del carattere singolo e il rilevamento della stringa originale.
- Viene scelto il più vicino dei due possibili cuscinetti bisecati, in modo che NE rappresenti 45 gradi, non 225 gradi.
- Ciò è inequivocabile, tranne nel caso in cui l'angolo da bisecare sia di 180 gradi. Pertanto
NS,SN,WE, eEWcorrispondono ai cuscinetti non definite, e l'ingresso finiranno mai in uno di questi. Possono tuttavia apparire in qualsiasi altro punto della stringa di input, poiché ciò non causa ambiguità. - Se gli ultimi due personaggi sono identici, il personaggio finale sarà ridondante poiché la bisection restituirà lo stesso rilevamento. Poiché ciò non aggiunge nulla alla notazione, il codice non deve gestirlo. Pertanto
NN,EE,SS, eWWcorrispondono ai cuscinetti non definite, e l'ingresso finiranno mai in uno di questi. Possono tuttavia apparire in qualsiasi altro punto della stringa di input.
Esempi
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
Casi test
Un invio è valido solo se fornisce un output corretto per tutti i casi di test. Si noti che i casi di test spingono ai limiti di ciò che può essere gestito con doppia precisione. Per le lingue che hanno come impostazione predefinita la precisione singola, sarà probabilmente necessario spendere i byte per specificare la doppia precisione per ottenere output corretti.
Le uscite del test case sono mostrate arrotondate con 5 cifre decimali e con precisione arbitraria. Entrambi sono output validi.
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
punteggio
Questo è code-golf . Il punteggio è la lunghezza del codice sorgente in byte e il più breve vince.
Pedanteria
Ho fatto l'errore di pensare che "North by North West" fosse una valida direzione della bussola. Un errore felice, dal momento che ha portato a un'idea di sfida, ma ho scoperto poi dalla pagina di Wikipedia :
"Il titolo del film di Alfred Hitchcock del 1959, North by Northwest, in realtà non è un punto di direzione sulla bussola a 32 venti, ma il film contiene un riferimento a Northwest Airlines ".
Si scopre anche che il metodo utilizzato per questa sfida è coerente solo con i punti cardinali tradizionali fino alla bussola a 16 punti inclusa. La bussola a 32 venti descritta in quella pagina è leggermente diversa e ho trascurato convenientemente la sua esistenza per questa sfida.
Infine, per chiunque pensi che dovrei usare "Southeast" anziché "South East",.
WNNNSEl'uscita sarebbe 323.4375. Vedi la sezione di esempio per una procedura dettagliata che si applicherebbe allo stesso modo a questo caso.
f(N,N,N,S,E)ok?
WNNNSE<= quale sarebbe l'output per questa voce di esempio all'inizio del tuo post? sembra invalido per me, ma è difficile da dire.