Latar Belakang
Anda baru-baru ini disewa oleh perusahaan akuntansi kecil. Dunia akuntansi agak asing bagi Anda, jadi Anda tidak yakin apakah Anda mengikuti semua pedoman profesional. Secara khusus, Anda tidak tahu kapan Anda harus membulatkan semua angka-angka itu, dan ke arah mana, sehingga sebagian besar waktu Anda hanya sayap itu dan berharap untuk yang terbaik.
Memasukkan
Input Anda adalah string tunggal yang mewakili perhitungan sederhana. Ini berisi beberapa bilangan bulat non-negatif yang dibatasi oleh karakter +-*/
. String membaca dari kiri ke kanan, dan aturan diutamakan normal diabaikan, jadi "23+1*3/4"
berarti "mulai dengan 23, tambahkan 1, kalikan dengan 3, dan bagi dengan 4", hasilnya adalah 18. Input tidak akan berisi angka yang dimulai dengan 0
(kecuali 0
dirinya sendiri), atau pembagian dengan nol.
Keluaran
Pada setiap tahap perhitungan, Anda dapat membulatkan hasil ke atas atau ke bawah ke bilangan bulat terdekat, atau menyimpannya apa adanya. Akhirnya, Anda membulatkan ke atas atau ke bawah untuk mendapatkan hasil bilangan bulat. Output Anda adalah daftar bilangan bulat yang mungkin dihasilkan dari perhitungan seperti itu, diurutkan dan tanpa duplikat.
Aturan
Anda dapat menulis program lengkap atau fungsi. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji Kasus
"42" -> [42]
"2+0+4-0" -> [6]
"23+1*3/4" -> [18]
"5/2" -> [2,3]
"5/2+7/3*6-1" -> [17,18,19,23]
"23/2/2*30-170/3" -> [-7,-6,-2,-1,0,1,3,4]
"1/3*2*2*2*2*2*2" -> [0,16,20,21,22,24,32,64]
"1/3*9" -> [0,3,9]
1/3*9
, yang mungkin gagal jika Anda menggunakan angka floating point.Jawaban:
J, 84 byte
Mulai dari daftar elemen 1 fungsi menyimpan semua angka antara yang mungkin ada dalam daftar dengan mengubah ekspresi berikutnya dan menambahkannya ke atas dan ke bawah salinan bulat.
Akan bermain golf lebih lanjut dan menambahkan penjelasan besok.Tidak dapat menemukan cara yang jelas untuk golf lebih banyak.Lewati semua tes.
Pemakaian:
Coba di sini.
sumber
x
di akhir daftar.Python 2, 220 karakter
Itu membuat daftar semua angka yang mungkin dan pada setiap langkah, menghasilkan tiga angka untuk setiap angka dalam daftar, bahkan jika ada duplikat. Dengan demikian kompleksitas run-time adalah eksponensial. Namun, ini bekerja secara instan untuk contoh kecil ini. Dupes dihapus di akhir.
Ini digunakan
fractions.Fraction
untuk melakukan pembagian yang tepat, menghindari tidak ada floating point.Tambahkan 5 karakter (
r=map(X,g)
->r=set(map(X,g))
) untuk secara dramatis meningkatkan kinerja.sumber
\D
adalah kelas karakter yang telah ditentukan untuk mencocokkan non-digitr"(\D)"
atau"(\\D)"
. Selain itu, jika Anda menggunakan Python 3, Anda dapat mengganti pengindeksanF
dengan penugasan berbintang, misalnya:,A,B,*F=F
gunakanA
danB
alih-alihF[0]
danF[1]
, dan singkirkanF=F[2:]
."\D"
akhirnya tetap bekerja dan lebih pendek. Ini bukan urutan pelarian yang valid sehingga Python hanya menyertakan\
danD
kata demi kata. Tip Python3 yang baik sebenarnya, saya akan memeriksanya, meskipun saya harus mengganti backticks denganrepr()
dan mengubahmap
hasilnya menjadi daftar. Tugas yang berkilau bintangnya adalah sesuatu yang saya harap dimiliki oleh Python 2 ..Python,
421370354 byteMaaf, tolong tahan dengan saya. Saya benar-benar baru untuk python (saya hanya mencari bahasa yang mendukung fractiosn) dan menggunakan semua trik yang saya tahu untuk memperpendek kode tetapi masih monster mengingat ada solusi python hampir setengah ukuran. Saya belajar banyak dan berpikir saya akan tetap mengirimkannya =)
Versi Baru berkat @ kirbyfan64sos dan @Zgarb
Versi lama
sumber
if
s (d={'+': operator.add, '-': operator.sub, ...}; d[op](a, b)
). Juga,[floor(k) for k in n]
dapat disingkat menjadimap(floor, n)
, dann.add
panggilan bisa menjadin.extend([floor(f), ceil(f), f])
.F
hanya menggunakan sekali, sehingga Anda bisa melakukanfrom fractions import*
dan menyimpan beberapa byte. Sama denganmath
. Hapus spasi di sekitar=
, mereka tidak perlu. Selain itu, Anda harus menetapkan input kes
alih-alih hard-coding.s=input()
daripadas = "1/3*9"
, hapus komentar Anda, dll.Mathematica, 134
sumber
MATLAB, 283 karakter
Tidak Disatukan:
Saat menulis ini, saya menyadari bahwa ada cara yang lebih pendek untuk melakukan ini, yang akan saya tambahkan setelah saya selesai menulisnya.
sumber
VBA, 347 byte
sumber