Di antara fraksi
Tantangan:
Anda harus membuat kode yang mengambil minimal 3 input; 2 bilangan bulat dan "representasi fraksi" - tipe yang sesuai dengan bahasa Anda untuk mewakili kenaikan fraksi) yaitu. Jika Anda memilih string, inputnya adalah "1/4" atau Anda bisa memilih 2 input integer tambahan atau tuple atau w / e.
Input dapat masuk akal (STDIN, argumen fungsi, dari file, dll.), Dan demikian juga dapat output (STDOUT, nilai pengembalian fungsi, ke file, dll.)
Aturan:
- Input "fraksi" akan selalu menjadi fraksi yang valid, kurang dari 1; contoh "1/4"
- Input integer kedua akan selalu memiliki nilai yang lebih tinggi dari integer pertama. Yaitu integer input pertama akan selalu memiliki nilai lebih rendah dari yang kedua.
- Bilangan bulat input bisa negatif.
- Fraksi yang dihasilkan harus dikurangi sebanyak mungkin (disederhanakan)
Kode tersebut harus menampilkan setiap "langkah fraksi" antara 2 angka dengan penambahan fraksi input.
Kode harus berupa program atau fungsi seperti yang dinyatakan di sini
Contoh 1:
Memasukkan: -2,3,"1/2"
Keluaran:
-2
-3/2
-1
-1/2
0
1/2
1
3/2
2
5/2
3
Contoh 2:
Memasukkan: 1,2,"2/3"
Keluaran:
1
5/3
2
atau
1
4/3
2
Catatan: Penghitungan dapat dimulai dari salah satu arah (terima kasih @Mego)
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
sumber
Jawaban:
Oktaf,
3430 byteSekarang anggap fraksi sebagai ekspresi numerik daripada pembilang dan penyebut yang terpisah.
Contoh di ideone
sumber
@(a,b,c)rats(union([a:c:b],b))
?1/2
sebagai numerik daripada input string), tapi itu bukan cara saya menafsirkan "representasi fraksi". Jika OP setuju, saya akan senang untuk memotong 4 byte.Mathematica, 16 byte
Fungsi tanpa nama yang mengambil dua bilangan bulat dan bilangan rasional dan mengembalikan daftar bilangan, misalnya:
Mathematica
Range
melakukan persis apa yang diminta tantangan, kecuali bahwa ia menghilangkan batas atas jika perbedaan antara batas bawah dan batas atas bukan kelipatan dari ukuran langkah. Oleh karena itu kami mengambilUnion
(menggunakan⋃
) dengan daftar yang hanya berisi batas atas yang memastikan bahwa itu muncul tepat satu kali. Perhatikan bahwaUnion
akan mengurutkan hasilnya tetapi kami tetap ingin mengurutkannya, karena ukuran langkah selalu positif. Juga karena kami bekerja dengan rasional, mereka secara otomatis dikurangi sebanyak mungkin.sumber
T-SQL 2012+,
831535477270246240219 byteHarap perhatikan ini adalah satu garis - sql tidak memiliki fungsi bawaan untuk mengurangi fraksi. Mungkin bukan bahasa terbaik untuk jenis pertanyaan ini. Ini dapat dibaca manusia (jenis - dibandingkan dengan beberapa bahasa lain).
Cobalah online
sumber
@n
atau@d
ke dataran@
. Kueri CTE Anda untuk N bisaN AS(SELECT N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N))
atauN AS(SELECT 1N FROM sys.all_views)
. Mengingat bahwa hampir dijamin ada beberapa ratus dalam pandangan ini, Anda dapat mengurangi gabungan silang juga.ISNULL
lebih pendek dariCOALESCE
dan seharusnya bekerjaPython 2, 81 byte
Cobalah online
sumber
Haskell,
3126 byteFTW evaluasi malas! Demo:
(Saya awalnya tergoda oleh
[a,a+c..b]
notasi Haskell , tetapi memiliki beberapa kebiasaan yang mengharuskan sesuatu sepertif a b c|l<-[a,a+c..b-c/2]=l++[b|last l<b]
41 byte atauf a b c=[x|x<-[a,a+c..],x<b]++[b]
33.)sumber
import Data.Ratio
dalam hitungan byte Anda juga, saya pikir Anda tidak dapat menggunakanf
tanpa itu, kan?Data.Ratio
untukf
dirinya sendiri, karena itu polimorfik untuk semua jenis numerik. Namun, ketika Anda ingin menyebutnya dengan nilai tipeRatio
, maka Anda perlu impor. Tantangannya hanya perlu "membuat kode yang ...", bukan untuk menggunakannya. Saya pikir tidak apa-apa tanpa impor.%
operator untuk membuat fraksi uji1 % 2
dan2 % 3
. Saya tidak curang di sini: Anda benar-benar dapat menempatkan 26 byte tersebut di file sendiri, menjalankan interpreter pada modul itu, dan memiliki interaksi yang saya tampilkan. (Anda bahkan bisa menghindari mengetikimport Data.Ratio
dalam interaksi demo, jika Anda mengeja%
sebagaiData.Ratio.%
.)MATL ,
1615 byteIni mungkin gagal untuk penyebut yang sangat besar. Saya harap format output dapat diterima.
Cobalah online!
sumber
Ruby ,
325448 byteSolusi ini didasarkan pada jawaban Python Mego dan mengasumsikan bahwa
c
akan selalu menjadiRational
, format pecahan Ruby. Cobalah online!Edit: Memperbaiki bug di mana bilangan bulat tidak disajikan seperti bilangan bulat. -6 byte terima kasih kepada Not That Charles dan MegaTom.
Fungsi dipanggil dengan cara ini:
sumber
Rational
bentuk3
di Ruby adalah(3/1)
.step(b,c).map
harus mengurangi jumlah byte di sini(a==a.to_i)
bisaa%1==0
untuk -4 byte.-2,3,1/2r
(contoh 1) mencetak3
dua kali terakhir .Julia, 14 byte
Ini mirip dengan jawaban Mathematica, kecuali bahwa rentang Julia sudah dalam format yang diinginkan, sehingga bahkan lebih pendek. Juga mengembalikan koleksi angka. Contoh output:
Perhatikan bahwa bilangan bulat ditampilkan dengan 1 dalam penyebut, dan garis miring digunakan untuk pecahan. Untuk mendapatkan output persis seperti yang didefinisikan dalam pertanyaan memerlukan beberapa kode lagi:
sumber
Matlab dengan Symbolic Toolbox / Octave with SymPy, 27 byte
Terima kasih kepada @sanchises karena menunjukkan kesalahan, sekarang diperbaiki
Ini adalah fungsi anonim. Untuk menyebutnya, tetapkan ke variabel atau gunakan
ans
.Contoh:
sumber
c
Anda dapat menggunakan, saya kutip, jenis apa pun yang sesuai dengan bahasa Anda untuk mewakili peningkatan fraksi [...] atau w / e . Saya pikir cukup jelas bahwasymbolic
ini adalah pilihan yang logis dan diizinkan (@VisualBean mungkin ingin mengkonfirmasi ini). Hasil dari operator usus besar kemudian 'ditingkatkan' menjadi sebuahsymbolic
array, yang berarti Anda dapat menyingkirkansym()
panggilan itu sama sekali.Javascript,
108 90 8681 byteFungsi anonim. Setelah penugasan ke variabel bernama dengan spasi putih:
Contoh uji:
Pendekatan imperatif menggunakan javascript, tidak ada rekursi, pustaka atau pemrograman fungsional.
sumber
Smalltalk - 89 byte
Untuk sekali ini Smalltalk hampir kompetitif!
Panggil seperti ini:
sumber
R - 71 byte
Mengasumsikan Anda telah menginstal
MASS
paketsumber
Pyret, 56 byte
Dibawa di awal (b), akhir (e), pembilang (n), dan penyebut (d). Membuat serangkaian bilangan bulat, membaginya melalui dan menambahkan akhir ke daftar (dengan menautkan dan kemudian menyortir).
sumber