İnsanların bilgisayarlarda matematiksel denklemleri ASCII sanatı olarak elle yazdıkları paralel bir evrende taşınırsınız. Bir LaTeX bağımlısı olarak, bu kesinlikle kabul edilemez ve bu süreci biraz otomatik hale getirmelisiniz.
Amacınız, LaTeX matematik komutu olarak girilen bir denklemin ASCII sürümünü çıkaran bir program yazmaktır.
Zorunlu LaTeX komutları desteklenmeli
Toplam: toplamın LaTeX komutu
\sum_{lower bound}^{upper bound}
Toplamlar için kullanmanız gereken ASCII rakamı:
upper bound ___ \ ` /__, lower bound
Ürün: Bir ürün için LaTeX komutu
\prod_{lower bound}^{upper bound}
Ürünler için kullanmanız gereken ASCII rakamı:
upper bound ____ | | | | lower bound
Kesir: Kesirler için LaTeX komutu
\frac{numerator}{denominator}
Kesirler için kullanmanız gereken ASCII rakamı:
numerator ----------- denominator
Bu üç komuttan biri olmayan herhangi bir şey olduğu gibi görüntülenir. Örneğin, \sum{i=3}^{e^10}\frac{3x+5}{2}
olarak gösterilmelidir
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Girdiler
Giriş, bir dize olarak iletilen bir LaTeX komutudur (veya diliniz dizelere eşdeğerdir). LaTeX komutları iç içe geçebilir, örneğin \frac{\frac{1}{2}}{3}
geçerli bir girdidir. Girişlerin her zaman doğru olması gerekiyordu (LaTeX'in sözdizimini kodunuzda kontrol etmeniz gerekmez). Girişler yalnızca yukarıda sunulan üç LaTeX komutundan ve biçimlendirmeniz gerekmeyecek 'metin' den oluşacaktır.
LaTeX komutları her zaman yukarıda sunulan sözdizimiyle gelir, yani toplamlar ve ürünler her zaman üst ve alt sınırlara sahip olur (boş olsalar da) ve her zaman kesirler için bir pay ve payda bulunacaktır.
Toplamların ve ürünlerin sınırlarının en fazla 4 karakter uzunluğunda olduğunu (= toplamın ve ürün sembollerinin genişliği) olduğunu ve olası çakışma sorunları hakkında endişelenmenize gerek olmadığını varsayıyoruz. Benzer nedenlerden dolayı, sınırların sadece 'metin' olduğunu ve asla LaTeX komutları olmayacağını varsayıyoruz, örneğin \sum_{\sum_{1}^{2}}^{1}
geçerli bir giriş değil.
çıktılar
Programınızın çıktısı, giriş olarak verdiğiniz LaTeX komutunun ASCII gösterimidir.
Programınız yatay hizalamayı dikkate almalıdır: örneğin toplamın veya ürünün sınırları toplam veya ürün sembolüyle yatay olarak hizalanmalıdır (her ikisi de 4 karakter genişliğindedir). Sınır, tek sayıda karakter içeriyorsa, hangisinin iyi olursa, bir karakterin sağdan mı sağdan mı yoksa soldan mı geldiği önemli değildir. Kesir çizgisi, hangisi en uzunsa, pay veya payda olduğu sürece olmalıdır.
Programınızın dikey olarak hizalamasını göz önünde \frac{\frac{1}{2}}{3} = \frac{1}{6}
bulundurması gerekir : örneğin,
1
-
2 1
- = -
3 6
Toplamlar ve ürünler için, semboller 4 karakter yüksekliğinde olduğu için dikey merkezin üstten ikinci satır olduğu varsayılır.
Verilen girişte yatay boşlukların doğru olduğu varsayılmaktadır, yani girişteki boşluklar çıktıda gösterilmelidir.
Test durumları
Giriş
abc = 2
Çıktı
abc = 2
Giriş
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Çıktı
+inf ___ 1 e = \ ` -- /__, n! n=0
Giriş
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Çıktı
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Giriş
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Çıktı
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Giriş
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Çıktı
prod sum ___ ---- = \ ` sum prod /__, frac
puanlama
Bu kod golf , yani en kısa kod kazanır.