Tulis fungsi atau program daripada yang dapat dilakukan aritmatika sederhana (penjumlahan, pengurangan, penggandaan, dan pembagian) dalam basis 10 dan basis 2.
Fungsi akan mengambil ekspresi matematis sebagai input, dan mengeluarkan hasil yang benar di basis yang benar. Input akan menjadi n
angka yang dipisahkan oleh satu atau beberapa operator ( + - * /
).
Jika semua nilai input hanya berisi 0 dan 1, semua nilai dianggap biner. Jika setidaknya satu digit 2-9
, semua nilai dianggap sebagai basis 10.
Aturan:
- Anda dapat mengasumsikan hanya akan ada satu operator di antara angka (
10*-1
tidak akan muncul) - Anda dapat mengasumsikan tidak akan ada tanda kurung.
- Diutamakan operator normal (coba ekspresi dalam kalkulator google jika Anda ragu).
- Anda tidak dapat mengasumsikan hanya akan ada bilangan bulat
- Tidak akan ada angka nol di depan dalam input atau output
- Anda dapat mengasumsikan hanya input yang valid yang akan diberikan
- Anda dapat mengasumsikan semua nilai input positif (tetapi operator minus dapat membuat output negatif menjadi mungkin,
1-2=-1
dan10-100=-10
) - REPL tidak diterima
- Anda dapat memilih untuk mengambil input sebagai argumen yang terpisah, atau sebagai argumen tunggal, tetapi input memiliki berada di urutan yang benar.
- Yaitu Anda dapat mewakili
1-2
dengan argumen input1
,-
,2
, tapi tidak1
,2
,-
.
- Yaitu Anda dapat mewakili
- Anda harus menerima simbol
+ - * /
dalam input, bukanplus
,minus
dll. - Anda harus mendukung nilai floating point (atau hingga batas maksimum bahasa Anda, namun hanya bilangan bulat yang mendukung tidak diterima).
eval
diterima
Contoh:
1+1
10
1010+10-1
1011
102+10-1
111
1+2+3
6
10*10*10
1000
11*11*11
11011
10*11*12+1
1321
10.1*10.1
110.01
20.2*20.2
408.04
10/5
2
110/10
11
Also accepted (optional line or comma-separated input):
10
+
10
-
1
11 <-- This is the output
Ini adalah kode golf, jadi kode terpendek dalam byte akan menang.
code-golf
arithmetic
base-conversion
binary
Stewie Griffin
sumber
sumber
110/10
, apakah11.0
dapat diterima?Jawaban:
Japt,
7772626062 *605951 bytePenjelasan (kurang lebih sama dengan untuk jawaban JS):
Cobalah online!
* tidak membagi dengan benar
sumber
eval
ditugaskan untukOx
. Saya akan melihat apakah itu dapat dipersingkat.OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)
Mungkin dimungkinkan untuk membuatnya menghasilkan kode Japt, bukan JS, lalu gunakanOv
untuk mengevaluasi itu.OvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2
Ini~~[...]
perlu karena tanda kurung tidak cocok dalam kekacauan string dengan transpiler .OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
JavaScript ES6,
8797 1100 2106 310210198100 4938886 byteDemo + penjelasan:
1 - lupa tentang mengapung
2 - lagi mengapung masalah: parseInt lantai biner jadi saya harus mengalikan dengan 1e14 dan kemudian membaginya dengan 16384
3 - harapan yang telah mencapai tugas yang diberikan, sekarang mulai bermain golf: D
4 - ada bug dengan pembagian
sumber
e.match(/[2-9]/g)
menjadie.match`[2-9]`
.('0b'+$&*1e14)/1638
ini harus bekerja tetapi saya tidak 100% yakinJolf, 31 byte, tidak bersaing
Saya menambahkan sejumlah fungsi yang layak yang terinspirasi oleh tantangan ini, dan, karenanya, dianggap tidak bersaing. Saya senang karena saya akhirnya mengimplementasikan fungsi unary (seperti
(H,S,n)=>val
di ES6, tetapi didukung di ES5!)Suite uji , Coba input Anda sendiri , atau atur input secara manual .
sumber
Bash, 60 byte
Contoh Jalankan:
sumber
dc
akan membutuhkan pemesanan polesan terbalik dari operasi, yang tidak diizinkan oleh tantangan.𝔼𝕊𝕄𝕚𝕟 2, 46 karakter / 72 byte
Try it here (Firefox only).
Penjelasan
sumber
PowerShell, 107 byte
Tidak disatukan
Contoh
sumber