Kompas 32 poin itu ... menarik, untuk sedikitnya.
Oleh Denelson83 (Pekerjaan sendiri) [ GFDL atau CC-BY-SA-3.0 ], melalui Wikimedia Commons
Tantangan Anda adalah mengambil tingkat gelar, dan mengubahnya menjadi arah pada kompas 32 poin.
Setiap arah adalah 11,25 (360/32) derajat lebih jauh dari sebelumnya. Misalnya, N (utara) adalah 0 derajat, NbE (utara oleh timur) adalah 11,25 derajat, NNE (utara-timur laut) adalah 22,5 derajat, dll.
Adapun bagaimana Anda seharusnya mendapatkan arahan,
0 derajat adalah N, 90 derajat adalah E, 180 derajat adalah S, dan 270 derajat adalah W.
- Ini disebut arah mata angin.
Titik setengah antara arah mata angin hanyalah arah mata angin mereka di antara disatukan. N atau S selalu menjadi yang pertama, dan W atau E selalu menjadi yang kedua.
- Ini disebut arahan ordinal.
Titik tengah antara arah kardinal dan ordinal adalah arah mereka berada di antara disatukan, lagi, dengan "-" di antaranya. Arahan kardinal pergi dulu, ordinal kedua.
- Ini disebut arahan sekunder-interardinal.
Titik setengah antara arah sekunder-interardinal dan arah lainnya adalah arah lain "oleh" arah kardinal yang paling dekat dengan mereka (selain yang langsung di sebelahnya).
- Saya tidak tahu apa namanya: P
Jika semua penjelasan ini menyakiti otak Anda seperti halnya otak saya, Anda dapat merujuk pada bagan ini:
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
Tantangan Anda adalah mengambil input dalam derajat, dan menampilkan nama lengkap dari arah kompas yang sesuai dengannya, beserta singkatannya.
Kasus uji:
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
Semua huruf besar harus dipertahankan, seperti dalam kasus uji. Jumlah maksimum tempat desimal adalah 2. Semua angka input akan lebih besar dari atau sama dengan 0, dan kurang dari 360. Jika ada titik desimal, akan ada digit di kedua sisi (Anda tidak harus menangani .1
atau 1.
).
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
Perl,
250 236 231 188187Sunting: Beberapa byte dari mengeksploitasi simetri (seperti yang saya lihat di solusi @bazzargh)
+ Edit: Dan beberapa trik jahat ...
+ Edit : Kembali ke tempat saya memulai (bekerja dengan list, bukan string), dan mengeksploitasi lebih banyak simetri = 1 byte off dan jauh lebih jelek.
Cukup dicetak:
Diperlukan 5.014 karena
r
pengubah.sumber
Javascript
470453438434432421404Anda dapat menyalin kode ini ke konsol Anda dan menjalankannya. Ini meminta Anda untuk input derajat dan output hasilnya
alert();
Javascript yang tidak dikumpulkan dapat ditemukan di biola ini: http://jsfiddle.net/AezL3/11
sumber
calcPoint(32)
apa yang dilakukan 0, sehingga Anda dapat melakukan ini%32
atau yang serupa.var name = calcPoint(input % 32);
ini berhasilHaskell
415372347330317304301CAkhirnya konvergen pada solusi seperti @ VadimR (dan simetri kembali!). Penggunaan:
h 219
output"Southwest by south SWbS"
3 karakter lagi hilang, terima kasih @shiona.
sumber
drop 1
sama dengan ekor. Juga jika saya tidak salah, Anda dapat melakukane l@(x:_)=x:tail$d l
untuk mencukur satu char lagi.Python 3.8 ,
482438424 byteCobalah online!
Ini adalah apa yang saya dapatkan setelah bermain golf jawaban tony goodwin ; diposting pada jawabannya sendiri karena tautan TIO terlalu panjang untuk dikomentari. Jika dia memilih untuk memperbarui jawabannya di atas, saya akan menghapus jawaban ini.
Saya mengasumsikan bahwa dapat diterima untuk menyerahkan fungsi sebagai solusi daripada program lengkap. Jika tidak, berikut adalah program lengkap dengan kecepatan 426 byte.
Saya berharap masih banyak yang bisa dilakukan untuk mempersingkat
b
.Sunting: Memotong 44 byte, milik walrus yang megah. Masih tidak merasa seperti
b
selesai bermain golf.Sunting2: Memotong 14 lainnya dengan membongkar dicts daripada menggunakan
keys()
danitems()
.sumber
Python,
2103164711031034924889848 byteSangat terlambat, saya tahu. Terima kasih atas tantangannya, saya menyiapkan magnetometer untuk arah angin dengan Pi saya, dan ingin solusi kompas 16 titik seperti ini untuk dimasukkan ke dalam algoritma peramalan cuaca. Semua kode saya adalah dalam Python, jadi di sini adalah versi dari solusi javascript yang sudah diposting di Python, tetapi dengan twist tambahan yang dapat Anda tentukan 32, 16, atau 8 titik kompas pada variabel j, dan saya telah mengubah offset dari degHead dalam pernyataan sebelumnya, tergantung pada jumlah poin. Saya menggunakan alogoritma ganti nama yang dimodifikasi (dan menggunakan variabel yang bisa saya ganti namanya tanpa merusak kata-kata!) Untuk memastikan saya memenuhi persyaratan kasus dari pertanyaan tersebut.
Saya tahu ini tidak akan menang, karena Python lebih bertele-tele, dan saya juga.
Versi pendek:
Bersihkan versi
sumber