pengantar
Empat operator matematika dasar (+, -, *, /) dapat dikurangi menjadi hanya dua, karena fakta bahwa:
x + y = x - (-y)
x * y = x / (1/y), y != 0
x * 0 = 0/x
Tantangan
Tantangannya adalah mengambil input sebagai "string" yang mengandung:
- Angka
- Variabel karakter tunggal ("x", "y")
- Empat operator matematika dasar (+, -, *, /)
- Kurung
dan output string yang dimanipulasi sehingga akan menghasilkan hasil matematika yang sama dengan input, tetapi hanya berisi simbol matematika '-' dan '/'
Spesifik
- Input dapat dalam bentuk apa pun yang dapat diterima (file, STDIN, dll.) Dan dapat direpresentasikan sebagai string atau array karakter (tetapi bukan array array)
- Output dapat dalam bentuk apa pun yang dapat diterima (file, STDIN, dll.) Dan dapat direpresentasikan sebagai string atau array karakter (tetapi bukan array array)
- Anda harus mengenali dan mempertahankan tanda kurung yang seimbang
- Celah standar tidak diijinkan
- Ini adalah pilihan Anda jika Anda ingin mewakili
x + y
sebagaix - -y
ataux - (-y)
- Anda harus menjaga urutan operasi
- Anda tidak pernah harus menangani input yang tidak valid
- Input dapat kosong atau satu nomor / variabel, dalam hal ini program harus menampilkan input
- Catatan: Anda tidak harus menggunakan substitusi dalam pendahuluan, asalkan
input = output
, program Anda bisa berubah2 * 2
menjadi8/2
, jika Anda mau - Anda dapat berasumsi bahwa "0" adalah satu-satunya cara nol akan muncul dalam persamaan (Yaitu Anda tidak harus menangani
1 * (4 - 4)
) - Saran: untuk menguji program Anda, buka jenis situs web ini
input = output
, di mana input adalah input, dan output adalah output, dan jika hasilnya "benar", program Anda berhasil menangani case tersebut ( contoh , contoh )
Uji Kasus
Di bawah ini adalah beberapa kasus uji, input sebagai string tunggal dan output sebagai string tunggal.
x + y
x - (-y)
x * y
x / (1/y)
x / y
x / y
x - y
x - y
1
1
5
5
-6
-6
+x
x
1 + (x * 4) - (512 * 3)
1 - (-(x / (1/4))) - (512 / (1/3))
1 - 3 / 4 + l / g
1 - 3/4 - (-(l / g))
5 * 0 / 2
0/5 / 2
(a + g) * 0
0/(a - (-g))
Mencetak gol
Ini kode-golf , jadi jawaban tersingkat dalam byte menang. Ikatan diselesaikan dengan posting pertama.
code-golf
string
arithmetic
balanced-string
Phoenix Sokrates
sumber
sumber
x / 1/y
=x/y
karena pembagian tidak asosiatif. Saya tahu apa yang Anda pikirkan, tetapi bahkan WolframAlpha tidak mengakui bahwa Anda ingin ruang untuk mengubah urutan operasi .... jadi Anda mungkin harus memikirkan kembali ini atau tidak mengutipnya sebagai cara yang valid untuk memeriksa sesuatu.y=0
, tapi saya menduga tantangan secara implisit mengasumsikan itun/d => d != 0
.v
menjadi solusi yang tepat di Pyth.5 * (a - b)
jika a = b. Dan apakah kita harus mendeteksi hal-hal seperti5 * (a - a)
? Bagaimana5 * (4 - 4)
dan5 * (a / a - 1)
atau5 * (4 / 4 - 1)
?Jawaban:
Python 3, 267 byte
Terima kasih kepada @ ConorO'Brien
Ide itu!
sumber
Dyalog APL , 42 byte
Ini mempertahankan urutan operasi APL. Perhatikan bahwa
÷x
adalah1÷x
TryAPL online!
(
pada hasil ...~∘' '
hapus spasi'(.*)×0'⎕R'0÷\1'
ganti apa pun yang diikuti oleh "× 0" dengan "0 ÷" diikuti olehnya)
evaluasi...'\+' '×'⎕R'--' '÷÷'
ganti "+" dengan "-" dan "×" dengan "÷÷"Untuk memverifikasi:
Menetapkan random non-nol angka untuk
x
,y
,l
,g
, dana
.Jalankan ekspresi asli.
Jalankan ekspresi yang dimodifikasi.
Bandingkan hasilnya.
sumber
SED
272 246 239213Ambil input tanpa spasi (mis
x+y*2
.).Ini adalah salah satu dari beberapa kasus di mana sebenarnya lebih pendek untuk melarikan diri
(
dan)
untuk menangkap kelompok daripada menggunakan-r
. Saya yakin ini bisa bermain golf lebih banyak, tapi saya senang untuk saat ini.Tidak disatukan, dengan komentar:
sumber