Diberikan string N, S, E dan W, menghasilkan arah (sudut searah jarum jam dari Utara dalam derajat), dikoreksi ke 5 tempat desimal.
Dalam notasi kompas tradisional , string hanya terdiri dari 2 karakter ini (seperti NNW atau ESE). Di sini Anda juga harus menerima string yang berisi semua 4 (seperti WNNNSE) . Menggunakan hanya 2 simbol memungkinkan manusia untuk memahami makna secara intuitif. Membiarkan 4 simbol membuatnya mengerikan untuk dibaca, tetapi memungkinkan cara yang lebih singkat untuk menggambarkan bantalan ke akurasi yang diberikan.
(Seperti yang ditunjukkan dalam komentar oleh user2357112 , ternyata Anda dapat membuktikan bahwa untuk setiap bantalan yang diberikan, string 4 simbol akan sama persis panjangnya dengan string 2 simbol, jadi saya telah mendasarkan tantangan ini pada asumsi yang salah. Semoga ketiadaan tujuan praktis ini tidak mengurangi kesenangan Anda terhadap tantangan ...)
Metode yang tepat dijelaskan di bawah ini, dan setara dengan notasi tradisional (itu memperluas itu daripada mengubahnya).
Memasukkan
- Input adalah string tunggal yang hanya berisi karakter
NESW
. - Input dapat berupa urutan karakter jika Anda mau, asalkan ini tidak termasuk preprocessing. Misalnya, mengambil daftar bersarang
[N, [E, [S, [W]]]]
untuk membantu urutan pemrosesan tidak diizinkan. - Mengambil karakter yang berbeda tidak diizinkan. Anda tidak boleh mengambil string
1234
sebagai gantinyaNESW
.
Keluaran
- Output harus berupa angka desimal atau representasi string dari satu (bukan rasional / fraksi).
- Nol trailing tidak perlu ditampilkan. Jika bantalan adalah
9.00000
, maka output9
juga dihitung sebagai benar ke 5 tempat desimal. - Outputnya dalam kisaran [0, 360). Yaitu, termasuk 0 tetapi tidak termasuk 360.
- Kebenaran diperiksa dengan membulatkan output ke 5 tempat desimal. Jika bantalan 0,000005, ini akan menjadi 0,00001. Output 0,00001 dan 0,000005 keduanya benar.
- Output dalam notasi ilmiah untuk beberapa input dapat diterima. Misalnya,
1e-5
bukannya0.00001
.
Konversi
- Single karakter kompas poin
N
,E
,S
, danW
sesuai dengan 0, 90, 180, dan 270 derajat masing-masing. - Melekatkan salah satu dari ini ke string menghasilkan bantalan yang membagi dua bantalan karakter tunggal dan bantalan string asli.
- Yang paling dekat dari dua bantalan yang membagi dua mungkin dipilih, sehingga NE mewakili 45 derajat, bukan 225 derajat.
- Ini tidak ambigu kecuali di mana sudut yang akan dibagi dua adalah 180 derajat. Oleh karena itu
NS
,SN
,WE
, danEW
sesuai dengan bantalan terdefinisi, dan masukan tidak akan pernah berakhir di salah satu ini. Namun mereka dapat muncul di tempat lain di string input, karena ini tidak menyebabkan ambiguitas. - Jika dua karakter terakhir identik, karakter terakhir akan redundan karena pembagian dua akan menghasilkan bantalan yang sama. Karena ini tidak menambah apa pun pada notasi, kode Anda tidak perlu menangani ini. Oleh karena itu
NN
,EE
,SS
, danWW
sesuai dengan bantalan terdefinisi, dan masukan tidak akan pernah berakhir di salah satu ini. Namun mereka dapat muncul di tempat lain di string input.
Contohnya
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
Uji kasus
Pengajuan hanya valid jika memberikan hasil yang benar untuk semua kasus uji. Perhatikan bahwa test case mendorong hingga batas yang dapat ditangani dengan presisi ganda. Untuk bahasa-bahasa yang default ke presisi tunggal, Anda mungkin perlu menghabiskan byte untuk menentukan presisi ganda untuk mendapatkan output yang benar.
Output kasus uji ditampilkan dibulatkan ke 5 tempat desimal, dan juga ke presisi sewenang-wenang. Keduanya adalah output yang valid.
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
Mencetak gol
Ini adalah kode-golf . Skor adalah panjang kode sumber dalam byte, dan yang terpendek menang.
Sifat suka menonjolkan keilmuan
Saya membuat kesalahan dengan berpikir bahwa "Utara oleh Barat Laut" adalah arah kompas yang valid. Kesalahan yang membahagiakan, karena mengarah pada ide tantangan, tetapi saya kemudian menemukan dari halaman Wikipedia :
"Judul film Alfred Hitchcock 1959, North by Northwest, sebenarnya bukan titik arah pada kompas 32-angin, tetapi Film berisi referensi ke Northwest Airlines. "
Ternyata juga metode yang digunakan untuk tantangan ini hanya konsisten dengan titik kompas tradisional hingga dan termasuk kompas 16 titik. Kompas 32-angin yang dijelaskan pada halaman itu sedikit berbeda dan saya dengan mudah mengabaikan keberadaannya untuk tantangan ini.
Akhirnya, bagi siapa pun yang berpikir saya harus menggunakan "Tenggara" daripada "Tenggara",.
WNNNSE
hasilnya 323.4375
. Lihat bagian contoh untuk langkah-langkah yang akan berlaku dengan cara yang sama untuk kasus ini.
f(N,N,N,S,E)
apa?
WNNNSE
<= apa yang akan menjadi output untuk entri contoh ini di awal posting Anda? kedengarannya tidak valid untuk saya, tetapi sulit untuk mengatakannya.