Terinspirasi oleh http://xkcd.com/1331/
Dalam komik xkcd ini, ada beberapa gif yang semuanya berkedip dengan frekuensi berbeda. Saya ingin tahu bagaimana periode jika semua GIF tunggal. Diberikan daftar angka yang mewakili frekuensi individu, mengeluarkan periode GIF keseluruhan.
Definisi Resmi
Memasukkan:
N
f1
f2
.
.
.
fN
Keluaran:
P
Di mana N adalah jumlah frekuensi, fi adalah frekuensi ke-i, dan P adalah periode yang dihasilkan dari total GIF.
Anda dapat memilih untuk menggunakan karakter pembatas yang Anda inginkan (bukan \ n), dan Anda dapat mengecualikan N jika Anda mau, dan itu akan disimpulkan dengan jumlah pembatas.
Beberapa spesifik
Frekuensi adalah representasi titik mengambang presisi ganda terdekat dari angka-angka yang disediakan sebagai input.
Periode yang dikeluarkan adalah bilangan bulat bertanda 64-bit, dibulatkan (naik pada 0,5) ke keseluruhan terdekat. Setiap input yang akan menghasilkan periode yang lebih besar dari 2 ^ 64-1 dianggap perilaku tidak terdefinisi.
Demikian juga setiap input <= 0 dianggap perilaku tidak terdefinisi.
Kondisi menang
Golf kode sehingga kode terpendek menang!
Jawaban:
APL, 4
∧
keduanya logis DAN dan numerik LCM (dengan domain lebih dari bilangan bulat, mengapung, kompleks, rasional, apa pun tumpukan angka didukung oleh implementasi APL) jadi∧/
juga pengurangan oleh LCM, atau menghitung LCM dari sebuah array.Monadic
÷
adalah pembalikan angka. Jadi komposisinya∧/∘÷
adalah LCM dari angka terbalik yang disediakan.Rumus lain, kebalikan dari GCD, adalah
÷∘(∨/)
, di mana tanda kurung diperlukan untuk memperbaiki diutamakan antara∘
dan/
.Anda dapat mencobanya online di http://tryapl.com/
Contohnya
sumber
Holy bananas!
Mathematica
4328Percobaan kedua
Upaya pertama saya tidak benar, meskipun ia memang memiliki beberapa bahan yang diperlukan (LCM, Rasionalisasi). Solusi lengkap membutuhkan memperhitungkan baik pembilang dan penyebut masing-masing frekuensi (dinyatakan sebagai fraksi umum).
l
adalah daftar frekuensi.Merasionalisasi 2,35 mengubahnya menjadi fraksi umum 235/100.
Asumsikan bahwa semua GIF menyala pada t = 0.
Pendekatan berikut ini tidak mengharuskan frekuensi dinyatakan sebagai "bilangan real", yaitu. sebagai pecahan desimal. Mereka mungkin jenis fraksi lain. Contoh di bawah ini adalah kasus di mana fraksi berada di perlima, pertiga, seperseratus dan ketujuh.
Jika dua atau lebih frekuensi tidak sepadan (dalam hal ini setidaknya satu harus menjadi bilangan irasional) maka tidak ada solusi. Dengan kata lain, tidak akan ada titik waktu, t> 0, di mana semua komponen menyala secara bersamaan.
Contoh 1
Contoh 2
Jika kami mengalikan periode keseluruhan paling sedikit dengan masing-masing frekuensi, kami menemukan seluruh siklus dalam setiap kasus:
(1344 hop dari 16/5 unit) mendarat di 420. (280 hop dari 2/3 unit) mendarat di 420. (987 hop dari 2,35 unit) mendarat di 420. (60 hop 7 unit) mendarat di 420.
sumber
Javascript: 191 karakter
Format input yang saya pilih (dalam aturan) adalah angka frekuensi yang dipisahkan oleh koma. Tidak ada ruang yang diizinkan dan tidak ada baris baru. N awal tidak boleh diberikan. Setiap angka harus hanya seri minimal satu [0-9] digit dengan titik opsional di suatu tempat di dalam. Jika input salah, perilaku tidak terdefinisi.
Bagaimana itu bekerja:
Kode:
Mengujinya:
sumber
(⊃x÷z)×∨/z←{⍵×10}⍣{⍵≡⌈⍵}x←⎕
g/d
ked/g
. Saya akan menambahkan beberapa test case.