Bilangan bulat positif n dapat direpresentasikan sebagai persegi panjang dengan sisi bilangan bulat a , b sedemikian rupa sehingga n = a * b . Artinya, area mewakili angka. Secara umum, a dan b tidak unik untuk yang diberikan n .
Seperti diketahui, persegi panjang secara khusus menyenangkan mata (atau apakah itu otak?) Ketika sisinya berada dalam rasio emas , φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
Menggabungkan dua fakta ini, tujuan dari tantangan ini adalah untuk menguraikan bilangan bulat n menjadi produk dari dua bilangan bulat a , b yang rasionya sedekat mungkin dengan φ (dengan metrik biasa pada ℝ). Fakta bahwa φ tidak rasional menyiratkan bahwa ada pasangan solusi yang unik ( a , b ).
Tantangan
Dengan bilangan bulat positif n , bilangan bulat keluaran positif a , b sehingga a * b = n dan perbedaan absolut antara a / b dan φ diminimalkan.
Sebagai contoh, perhatikan n = 12. Pasangan ( a , b ) yang memenuhi a * b = n adalah: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1). Pasangan yang rasionya paling dekat dengan φ adalah (4,3), yang memberikan 4/3 = 1,333.
Aturan
Fungsi atau program dapat diterima.
The pembilang ( a ) harus muncul pertama pada output, dan penyebut ( b ) kedua . Selain itu, format input dan output fleksibel seperti biasa. Sebagai contoh, dua angka bisa berupa string dengan pemisah yang masuk akal, atau sebagai array.
Kode harus bekerja secara teori untuk jumlah besar yang sewenang-wenang. Dalam praktiknya, ini mungkin dibatasi oleh memori atau batasan tipe data.
Cukup untuk mempertimbangkan versi perkiraan φ , asalkan akurat hingga desimal ketiga atau lebih baik. Artinya, perbedaan absolut antara φ benar dan nilai perkiraan tidak boleh melebihi 0,0005. Misalnya, 1.618 dapat diterima.
Saat menggunakan perkiraan, versi rasional φ ada kemungkinan kecil bahwa solusinya tidak unik. Dalam hal ini Anda dapat menampilkan pasangan apa pun a , b yang memenuhi kriteria minimalisasi.
Kode terpendek menang.
Uji kasus
1 -> 1 1
2 -> 2 1
4 -> 2 2
12 -> 4 3
42 -> 7 6
576 -> 32 18
1234 -> 2 617
10000 -> 125 80
199999 -> 1 199999
9699690 -> 3990 2431
|a/b-b/a-1|
itu menjanjikan, meskipun ada bukti yang mendukung
a/b
. Menghapus unit persegi meninggalkan persegi panjang kecil di sebelah kanan yang mewakili b/a
. Oleh karena itu, persegi panjang emas menghasilkan perbedaan 1.