Leonardo da Pisano alias Fibonacci berperan penting dalam membawa sistem angka Hindu-Arab ke Eropa. Sebelum itu, matematikawan di sana bekerja di basis enam puluh dengan angka Romawi.
Sebagai contoh, akar kuadrat dari dua dapat diperkirakan sebagai: satu dan dua puluh empat bagian dari enam puluh dan lima puluh satu bagian dari tiga ribu enam ratus , dan ditulis sebagai: i xxiv li , dengan penskalaan ditentukan oleh konteks. Pada saat itu, "ketiadaan" diketahui ( yaitu nol), tetapi tidak memiliki representasi standar dalam sistem angka ini.
Seandainya Fibonacci mengabaikan angka desimal yang baru saja dia temui selama perjalanannya, dia pasti akan mengatasi kekurangan dalam sistem saat ini. Sistem yang lebih baik ini kita sebut seksagesimal Fibonacci .
Tugas Anda adalah menulis potongan program, fungsi, atau kode yang mengambil angka floating point dalam ASCII atau format biner dan menghasilkan enam puluh angka Romawi dasar. Input dapat berupa file, konsol, baris perintah atau argumen fungsi dan output dapat berupa file atau konsol, mana yang paling mudah.
Outputnya bisa huruf besar atau kecil, dan harus mencakup perbaikan ini:
- gunakan n atau N untuk menunjukkan nol yang berarti suatu tempat tidak memiliki nilai, yaitu "nol" (masalah dengan sistem)
- gunakan e atau E untuk menunjukkan et yang sesuai dengan titik seksagesimal (masalah lain dengan sistem)
- gunakan titik tengah · atau tanda bintang * untuk memisahkan kelompok angka Romawi (masalah lain dengan sistem)
Asumsikan input adalah floating point dengan mantissa tidak lebih besar dari lix · lix · lix · lix · lix . Pecahan kurang dari n · e · n · n · n · n · saya dapat diabaikan. Jadi, asalkan input memiliki batasan ini, paling banyak sepuluh kelompok angka Romawi dengan satu e dapat dihasilkan.
Angka kurang dari saya harus memiliki n · e terkemuka untuk memastikan konteksnya jelas.
Beberapa contoh: input
→ output
0
→ n1
→ i60
→ i · n0.1
→ n · e · vi3600
→ i · n · n10.5
→ x · e · xxx16777215
→ i · xvii · xl · xx · xv3.1415926536
→ iii · e · viii · xxix · xliv · n · xlvii
Keluaran harus menghindari pengarah n · yang tidak perlu pada bagian mantissa, mengisolasi e , atau mengeklik · n pada bagian fraksional dari keluaran. Jadi misalnya, n · n · n · n · i , i · e , dan saya · e · n · n · n · n · n · n adalah output yang salah untuk input 1
.
Perbedaan plus atau minus n · e · n · n · n · n · i dalam output berada dalam toleransi dan dapat diterima.
Input adalah sembarang titik apung dalam bahasa pilihan Anda, jadi dapat menyertakan eksponen positif atau negatif selama input tidak berada di luar kisaran yang ditentukan di atas.
Dan akhirnya, angka Romawi built-in yang diperbolehkan!
Jawaban:
Python 3,
323319320 byteJawaban ini menerapkan seksagesimal Fibonacci dengan pembatas
*
dan tanpa memperhatikan kompleksitas Kolmogorov dalam daftar angka Romawi (untuk saat ini, setidaknya). Upaya dilakukan untuk bergabung denganwhile
danfor
loop di mana angka-angka Romawi dihasilkan di bawah satu loop, tetapi upaya-upaya tersebut belum berhasil. Setiap tips dan saran bermain golf disambut dan dihargai.Sunting: Memperbaiki bug dan bermain golf.
Edit: Lebih banyak perbaikan bug.
Tidak Disatukan:
sumber
C - 584 byte
Non-bersaing (jelas), tetapi berfungsi sebagai inspirasi:
Simpan sebagai
fs.c
, bangun dengangcc -o fs fs.c -lm
, dan jalankan sebagai./fs <arg>
.Kasus uji:
Mantera dan fraksi terbesar:
Saya menggunakan
double
sebagai tipe kerja, jadi mantissa dan fraksi gabungan terbesar melebihi akurasi asli dari tipe itu. Jika saya menggunakanlong double
itu bisa menanganinya.sumber
int main
tidak harus kembali0
.Haskell (
333322315 bytes)Saya tidak jelas apakah digit sexagesimal terakhir seharusnya dibulatkan ketika saya lakukan atau apakah pemotongan diizinkan; ini memotong, saya pikir yang Python3 mungkin juga?
(-9 bytes, berkat H.PWiz ! -2 byte dengan menghilangkan
where
untuk(\->)$
, -5 lainnya menciptakan inid
fungsi dan golfa++"."++x
untuka++'.':x
.)Tidak Disatukan:
Metode mengkonversi bilangan bulat ke angka romawi dicuri tanpa malu-malu dari Thomas Ahle di StackOverflow dan hanya bermain golf sedikit.
sumber
["l","xl","x","ix","v","iv","i"]
bisawords"l xl x ix v iv i"