Hampir kutub berlawanan jika tantangan ini , dan saya kira itu akan sedikit lebih mudah.
Tugas Anda adalah mengambil dua bilangan bulat dalam format a/b
(Membentuk bilangan rasional), lalu mengeluarkan bilangan desimal dengan tepat.
Misalnya, jika Anda memasukkan 1/3
, itu akan menghasilkan:
0.33333333333333333
Dan akan terus mencetak 3s hingga akhir waktu, dengan awalan 0 opsional (Anda juga dapat mencetak satu karakter per baris jika dan hanya jika bahasa Anda tidak mengizinkan pencetakan pada baris yang sama.)
Perilaku untuk x/0
tidak akan ditentukan. Untuk nomor yang terlihat seperti itu tidak mengulangi (Seperti, katakan 5/4
) itu benar-benar berulang. Salah satu dari dua bentuk berikut ini dapat diterima untuk 5/4
:
1.25000000000000000
1.24999999999999999
(Sama dengan bilangan bulat, 1.9999999
atau 2.000000
)
Fraksi mungkin tidak dalam bentuk yang paling sederhana, dan a
atau b
mungkin negatif (Catatan -a/b = -(a/b)
, -a/-b = a/b
, a/-b = -a/b
, dan -.6249999
tidak valid, tetapi -0.6249999
dapat diterima, namun Anda masih bisa menggunakan.
sumber
bc
, atau apakah itu curang?a
dan / ataub
menjadi negatif?a
ataub
(atau keduanya) bisa negatif)Jawaban:
CJam,
3837 byteBagaimana itu bekerja
sumber
C, 108
79Edit Dimodifikasi untuk bekerja dengan angka negatif.
Masukan dari stdin. Gaya K&R lama.
sumber
Ruby,
83691029189 byteImplementasi sederhana divisi integer manual berdasarkan divisi integer komputer.
Terima kasih kepada @blutorange untuk bantuan dalam bermain golf.
Sunting: Memperbaiki solusi untuk memasukkan angka negatif.
sumber
->s{a,b=s.split(?/).map &:to_i;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
Saya suka ini tentang ruby.?/
untuk menunjukkan karakter, saya juga tidak tahu tentang$><<
mencetak atauloop
kata kunci. Terima kasih banyak!!$>
kependekan dari$stdout
, dan<<
merupakan operator. Anda dapat menyimpan satu byte lagi di baris kedua dengan mengubahnya kec*d<0&&$><<?-
; beberapa byte dengan menggabungkan baris ke-3 / ke-4$><<a/b<<?.
, dan satu lagi dengan menghapus spasi setelah<<
di baris terakhir. Dan inilah ide untuk membawanya ke 91 byte:->s{a,b=s.scan(/\d+/).map &:to_i;1==s.count(?-)&&$><<?-;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
(ruby 2.2.0)$><<a/b
tidak berfungsi dengan benar, itu sebabnya saya menempatkan spasi di sana. Kelihatannya bagus, terima kasih banyak!Rational(2,3) == 2/3r
) sejak ruby 2.1 (yang saya pelajari sekitar 10 menit yang lalu) yang dapat digunakan untuk mempersingkat baris kedua:eval(s+?r)<0&&$><<?-
Jawa,
177176170Algoritma ini sangat mudah; bagian yang sulit adalah membuat pencetakan bekerja. Pada akhirnya, saya memiliki komputer tidur selama satu detik di antara setiap langkah sehingga bisa mencetak.
Versi diperluas dan dapat dijalankan
sumber
R,
103137109103Agak lebih senang dengan ini sekarang. Menggunakan pemindaian dengan pemisah menghemat banyak byte. Mungkin masih ada ruang untuk perbaikan. Diganti
<-
dengan=
. Tidak selalu beruntung dalam hal ini, tetapi berhasil kali ini.Tes berjalan
sumber
Python 3,
107115 byteCukup mudah:
-1/3
->-0.
)* (Meskipun perhitungan untuk
a
dipindahkan di dalam loop untuk menyimpan beberapa byte.)Sunting: Fixed bug dengan pecahan negatif> -1.
sumber
Python 2.7, 209 byte
edit:
Sekarang menampilkan semua karakter pada baris yang sama, seperti yang diminta.edit2:
Sekarang membaca fraksi dari argumen commandline, seperti yang diminta :)sumber
map
alih-alih pemahaman daftar menghemat sedikit; 2) tidak perlu tanda kurung di sekitarm*a
di salah satu lokasi, seperti*
,%
, dan/
semua prioritas yang sama dan kiri-asosiatif; 3) logika 0-atau-dot pada baris 3 dapat disederhanakan"0."[m==1]
, karena Anda hanya mencetaknya saja; 4) mungkin akan menghemat karakter hanya untuk mengaturo=stdout.write
dan mengkonversi argumen numerik ke string dengan backticks sesuai kebutuhan.1/-3
memberi-1.666666666
alih-alih-0.333333333
.