Cerita, atau mengapa kita melakukan ini.
Tidak ada Latihan ini sama sekali tidak ada gunanya ... kecuali jika Anda adalah Stephen Hawking .
Tantangan
Diberikan daftar sudut, temukan rata-rata sudut itu. Misalnya rata-rata 91 derajat dan -91 derajat adalah 180 derajat. Anda dapat menggunakan program atau fungsi untuk melakukan ini.
Memasukkan
Daftar nilai derajat yang mewakili ukuran sudut. Anda dapat mengasumsikan bahwa mereka akan menjadi bilangan bulat. Mereka dapat dimasukkan dalam format yang mudah digunakan atau disediakan sebagai argumen fungsi.
Keluaran
Rata-rata dari nilai yang dimasukkan. Jika ada lebih dari satu nilai yang ditemukan untuk rata-rata, hanya satu yang harus dikeluarkan. Rata-rata didefinisikan sebagai nilai
diminimalkan. Output harus berada dalam kisaran (-180, 180] dan akurat untuk setidaknya dua tempat di belakang titik desimal.
Contoh:
> 1 3
2
> 90 -90
0 or 180
> 0 -120 120
0 or -120 or 120
> 0 810
45
> 1 3 3
2.33
> 180 60 -60
180 or 60 or -60
> 0 15 45 460
40
> 91 -91
180
> -89 89
0
Seperti biasa dengan codegolf , pengiriman dengan byte paling sedikit menang.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika ada yang ingin Anda sertakan beberapa nomor di header (misalnya karena skor Anda adalah jumlah dari dua file atau Anda ingin daftar juru hukuman bendera secara terpisah), memastikan bahwa skor aktual adalah terakhir nomor dalam header:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Berikut adalah ruang obrolan untuk pertanyaan apa pun tentang masalah ini: http://chat.stackexchange.com/rooms/30175/room-for-average-of-angles
sumber
Jawaban:
Python 3, 129 byte
Masalah ini sepertinya telah menimbulkan banyak kebingungan. Secara intuitif, idenya adalah untuk memotong lingkaran sudut di beberapa titik, membuka lingkaran ke garis, menghitung rata-rata aritmatika pada garis itu, dan kemudian membungkus hasilnya kembali ke lingkaran. Tetapi ada banyak titik berbeda di mana Anda dapat memilih untuk memotong lingkaran. Tidak cukup dengan hanya memilih satu, seperti 0 ° atau 180 °. Anda harus mencoba semuanya dan melihat mana yang menghasilkan jumlah terkecil dari jarak kuadrat. Jika solusi Anda jauh lebih mudah daripada ini, itu mungkin salah.
sumber
s**2
kes*s
Python 3, 85 byte
Mengambil keuntungan dari jawaban hanya perlu akurat ke dua titik desimal dengan mencoba semua sudut yang mungkin dengan kenaikan
1/200
derajat. Ini membutuhkan waktu kurang dari satu detik di mesin saya.Karena Python tidak membiarkan kita dengan mudah mendaftar progres aritmatika dari floats, kami mewakili sudut yang mungkin sebagai bilangan bulat
[0,72000)
, yang dikonversi menjadi sudut sama(-180,180]
denganx -> 180 - x/200
. Kami menemukan salah satu dari ini yang memberikan jumlah minimum dari perbedaan sudut kuadrat.Untuk dua sudut dengan perpindahan sudut dari
d
, jarak sudut kuadrat ditemukan dengan mengubah ke sudut setara dalam(-180,180]
sebagai180-(d+180)%360
, kemudian mengkuadratkan. Dengan mudah, sudut yang diberikanx/200
sudah diimbangi dengan180
derajat.sumber
1/200
sebenarnya bermasalah. Untuk kasus uji[1, 3, 3]
, solusi ini kembali2.335
dan dibulatkan ke2.34
saat jawaban yang benar seharusnya2.33
.2.33
tepat dalam contoh itu. Dalam kasus apa pun, akankah mengubah200
to400
atau ke2000
(dan juga72000
) membuatnya berfungsi meskipun pembulatan? Juga, melihat masalah lama ini lagi, saya pikir saya mungkin melihat cara yang lebih baik.2.333...
dan program Anda kembali2.335
, itu benar sampai dua tempat desimal tanpa pembulatan. Maaf untuk itu.Oktaf,
9795 byteIni menghasilkan fungsi anonim yang hanya mencari minimum dari fungsi yang diberikan pada kotak yang cukup baik. Sebagai input fungsi menerima vektor kolom, mis
[180; 60; -60]
. Untuk pengujian Anda perlu memberi nama fungsi. Jadi Anda bisa mis. Jalankan kode di atas dan kemudian gunakanans([180, 60; -60])
.sumber
Javascript ES6, 87 byte
Contoh berjalan (Diuji di Firefox):
Bekerja dalam proses
Versi ini mengambil pendekatan yang sedikit berbeda dari rata-rata-semuanya-kemudian-lakukan-modular-matematika. Alih-alih, sudut dikonversi menjadi vektor, vektor ditambahkan dan sudut vektor yang dihasilkan kemudian dihitung. Sayangnya, versi ini sangat tidak stabil dengan trigonometri dan saya akan mengerjakan versi modular-matematika.
sumber
f(-91,91)
harus mengembalikan 180.CJam,
4440 byteCobalah online di penerjemah CJam .
Uji kasus
Ide
Kami menghitung deviasi untuk semua rata-rata potensial dari -179,99 hingga 180,00 dengan langkah-langkah ukuran 0,01 , dan pilih satu dengan deviasi terendah.
Untuk tujuan ini, tidak masalah jika kita mengambil derajat sudut radian atau radian. Daripada memetakan perbedaan δ sudut dari input dan potensial rata-rata di [0,360 °) dan dengan mengurangkan hasil dari 180 ° secara kondisional , kita bisa menghitung arccos (cos (πδ ÷ 180 °)) , karena cos bersifat periodik dan genap, dan arccos selalu menghasilkan nilai dalam [0, π) .
Kode
sumber
MATLAB, 151
Ok, jadi sampai saya benar-benar bisa mengerti apa metodologinya, inilah yang saya buat. Ini sedikit meretas, tetapi karena pertanyaannya menyatakan bahwa jawabannya harus benar untuk 2.dp itu harus bekerja.
Saya pada dasarnya memeriksa setiap sudut antara 0 dan 360 (dalam penambahan 0,01) dan kemudian menyelesaikan rumus dalam pertanyaan untuk masing-masing sudut tersebut. Kemudian sudut dengan jumlah terkecil diambil dan dikonversi menjadi -180 hingga 180 range.
Kode harus dengan Oktaf . Anda dapat mencobanya dengan juru bahasa online
sumber
JavaScript (ES6) 138
Tidak memiliki gagasan samar tentang suatu algoritma, ini mencoba semua nilai kemungkinan dengan presisi 2 digit (-179,99 hingga 180,00). Cukup cepat dengan test case-nya.
Tes menjalankan cuplikan di bawah ini di peramban yang mendukung EcmaScript 6 (menerapkan fungsi panah dan parameter default - AFAIK Firefox)
sumber