Berurusan dengan persamaan tanpa adanya editor persamaan yang baik berantakan dan tidak menyenangkan. Misalnya, jika saya ingin mengekspresikan integral dan solusinya, mungkin akan terlihat seperti ini:
Integral [x ^ 3 e ^ (- mx ^ 2 b / 2), dx] = - ((2 + b m x ^ 2) / (b ^ 2 * e ^ ((b m x ^ 2) / 2) * m ^ 2))
Di integrals.wolfram.com , ini disebut "formulir input." Tidak ada yang suka melihat persamaan dalam "formulir input." Cara ideal untuk memvisualisasikan persamaan ini adalah:
(Wolfram menyebut ini "bentuk tradisional")
Untuk codegolf ini, tulis sebuah program yang akan mengambil beberapa persamaan dalam "bentuk input" sebagai input dan memvisualisasikan persamaan itu dalam representasi ascii dari "bentuk tradisional." Jadi, untuk contoh ini kita mungkin mendapatkan sesuatu seperti ini:
/\ 3
| x
| ------------ dx =
| 2
\/ (m x b)/2
e
2
2 + b m x
-(-----------------)
2
2 (b m x )/2 2
b e m
Persyaratan:
- Jangan mengacak, menyederhanakan, atau mengatur ulang input dengan cara apa pun. Jadikan dalam bentuk yang persis sama seperti yang dijelaskan oleh input.
- Mendukung empat operasi matematika dasar (+, -, *, /). Ketika tidak mengalikan dua angka yang berdekatan, simbol * tersirat dan harus dihilangkan.
- Dukungan untuk integrasi (seperti yang ditunjukkan pada contoh di atas) tidak diperlukan. Mampu mendukung input dengan fungsi seperti Integrasi [...] atau Sqrt [...] adalah bonus.
- Mendukung kekuatan seperti yang ditunjukkan pada contoh di atas (akar ke-n dapat dimodelkan dengan menaikkan ke kekuatan ke-1).
- Kurung redundan (seperti yang ada di sekitar denomentator dan pembilang dari fraksi besar dalam contoh di atas) harus dihilangkan.
- Ekspresi dalam penyebut dan pembilang fraksi harus dipusatkan di atas dan di bawah garis pembagian horizontal.
- Anda dapat memilih untuk memulai baris baru atau tidak setelah tanda sama dengan. Pada contoh di atas, baris baru dimulai.
- Urutan operasi harus persis sama dengan output seperti pada input.
Beberapa contoh input dan output terkait untuk menguji solusi Anda:
Memasukkan:
1/2 + 1/3 + 1/4
Keluaran:
1 1 1
- + - + -
2 3 4
Memasukkan:
3x^2 / 2 + x^3^3
Keluaran:
2 3
3 x 3
---- + x
2
Memasukkan:
(2 / x) / (5 / 4^2)
Keluaran:
2
-
x
--
5
--
2
4
Memasukkan:
(3x^2)^(1/2)
Keluaran:
2 1/2
(3 x )
Jawaban:
Python 2, 1666 karakter
Tata letak sebenarnya cukup mudah - itu adalah penguraian dari input yang menyakitkan kerajaan. Saya masih tidak yakin itu sepenuhnya benar.
Untuk input besar dalam pertanyaan, saya mendapatkan:
Inilah beberapa kasus tes yang lebih rumit:
Yang terakhir salah, beberapa kesalahan diutamakan di parser.
sumber