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.
y=0
, tapi saya menduga tantangan secara implisit mengasumsikan itu n/d => d != 0
.
v
menjadi solusi yang tepat di Pyth.
5 * (a - b)
jika a = b. Dan apakah kita harus mendeteksi hal-hal seperti 5 * (a - a)
? Bagaimana 5 * (4 - 4)
dan 5 * (a / a - 1)
atau 5 * (4 / 4 - 1)
?
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.