Menurut Wikipedia , fungsi yang sangat kuat adalah Darboux
satu yang gambar setiap interval terbuka (tidak kosong) adalah seluruh garis nyata
Dengan kata lain, suatu fungsi adalah Darboux kuat jika diberikan 3 bilangan real arbitrer , , dan , selalu mungkin untuk menemukan antara (berbeda) dan sedemikian rupa sehingga .
Untuk keperluan tantangan ini, kami akan mempertimbangkan fungsi-fungsi Darboux yang kuat atas dasar pemikiran.
Tantangan Anda adalah menulis program atau fungsi yang:
- memberikan angka rasional sebagai output untuk setiap input angka rasional,
- selalu memberikan output yang sama untuk input yang diberikan, dan
- memiliki properti sangat Darboux.
Input dan output dapat berupa salah satu dari berikut ini:
- tipe angka presisi arbitrer, jika bahasa Anda memiliki satu (atau memiliki perpustakaan untuk satu, misalnya GMP).
- representasi string angka, yang Anda anggap akan selalu berisi titik desimal dan setidaknya satu digit di kedua sisi. Mungkin ada di basis apa saja , tetapi input dan output harus dalam basis yang sama. Anda dapat menggunakan serangkaian karakter apa pun untuk digit dan titik desimal (tetapi sekali lagi, mereka harus konsisten antara input dan output).
Input akan selalu memiliki basis pemutusan . Adapun output, yang mungkin memiliki basis ekspansi secara teoritis non-terminasi tergantung pada pilihan fungsi Anda, Anda dapat memilih salah satu dari berikut ini:
- digit keluaran selamanya.
- ambil bilangan bulat tambahan sebagai input dan output setidaknya sebanyak itu digit.
- output setidaknya sebanyak digit dalam input (yang mungkin mengandung nol trailing).
Perhatikan bahwa dengan sifat tantangan ini, konvensi yang nomor dapat diasumsikan representable oleh jenis nomor standar tidak tidak berlaku, kecuali untuk input kedua dijelaskan dalam opsi 2 di atas.
Untuk menghindari celah dengan fungsi yang hanya ditentukan pada rasional yang tidak berakhir, kiriman Anda harus dapat menghasilkan output yang mendekati sewenang-wenang dengan nilai yang diinginkan dalam praktiknya . Secara formal, mengingat bilangan rasional , , , dan , harus ada bilangan rasional yang berakhir pada basis yang Anda pilih sehingga dan .
Untuk memberi Anda beberapa ide, berikut adalah deskripsi fungsi Conway base 13 :
- Konversikan ke basis 13 dan hapus titik desimal.
- Jika hasilnya dalam bentuk , di mana dan hanya terdiri dari digit dari 0 hingga 9, maka .
- Jika hasilnya dalam bentuk , di mana dan hanya terdiri dari digit dari 0 hingga 9, maka .
- Kalau tidak, .
Fungsi ini sangat Darboux. Katakan, misalnya, bahwa kita ingin menemukan beberapa antara dan sedemikian rupa sehingga . Nilai base-13 akan memenuhi persyaratan ini.
Kiriman Anda mungkin merupakan implementasi dari fungsi ini, meskipun saya menduga ada fungsi-fungsi Darboux kuat lainnya yang jauh lebih pendek untuk diimplementasikan. :)