Anda harus mendapatkan string persamaan kimia (tanpa spasi, hanya huruf (huruf besar dan kecil), angka, tanda kurung dan matematika) dari pengguna dan mencetak jawabannya jika persamaannya seimbang atau tidak (pasangan jawaban positif / negatif) : Ya / Tidak, benar / salah, 1/0). Untuk mempersingkat kode, Anda dapat mengasumsikan bahwa string input hanya dapat berisi elemen-elemen ini: Al, Ar, B, Be, C, Cl, Cr, Cu, Fe, H, He, K, N, O, S. Dan satu hal lagi : mungkin ada -
tanda - tanda. Ini semua tentang matematika: +
berarti penambahan, -
berarti pengurangan.
Contoh:
Memasukkan:
C6H5COOH-O2=7CO2+3H2O
Keluaran:
No
Memasukkan:
2Fe(CN)6+2SO2+202=Fe2(SO4)2+6C2N2
Keluaran:
Yes
Memasukkan:
2SO2=2SO4-2O2
Keluaran:
Yes
Kode terpendek menang.
2O2
bukan202
(dua ratus dua).Jawaban:
Mathematica 152
Hasil:
Saya memperlakukan rumus kimia sebagai polinomial, misalnya
Lalu saya hanya menghitung koefisien.
sumber
Tr@CoefficientRules
dan kemudian melipatgandakannya dengan koefisienTimes@@@
. UntukO
:2*2+2*2=4*2
, untukC
:2*6 = 6*2
, dllPython 2.7,
316276 karakterItu banyak regex-menulis ulang untuk mengubah persamaan input menjadi sesuatu yang
eval
mampu. Kemudian memeriksa persamaan untuk setiap elemen secara individual.Misalnya, contoh persamaan ditulis ulang menjadi (
t
variabel):Saya yakin ada lebih banyak golf yang bisa didapat di bagian regex.
sumber
Haskell,
400351308 karakterIni hanya bisa membuat semua golf terjepit. Saya tidak tahu apakah ada
100518 karakter yang harus diselamatkan!Berikut adalah versi yang tidak diklik, siapa tahu ada yang mau mengikuti. Ini adalah
Parsec
pengurai berbasis sederhana :sumber