Вас транспортують у паралельний Всесвіт, де люди вручну пишуть математичні рівняння на комп’ютерах як мистецтво ASCII. Як наркоман LaTeX, це абсолютно неприпустимо, і вам слід дещо автоматизувати цей процес.
Ваша мета - написати програму, яка виводить ASCII версію рівняння, введеного як математична команда LaTeX.
Обов’язкові команди LaTeX для підтримки
Сума: команда LaTeX на суму є
\sum_{lower bound}^{upper bound}
Фігура ASCII, яку ви повинні використовувати для сум, це:
upper bound ___ \ ` /__, lower bound
Продукт: команда LaTeX для продукту є
\prod_{lower bound}^{upper bound}
Фігура ASCII, яку ви повинні використовувати для продуктів, це:
upper bound ____ | | | | lower bound
Дроб: команда LaTeX для дробів є
\frac{numerator}{denominator}
Фігура ASCII, яку ви повинні використовувати для дробів, це:
numerator ----------- denominator
Все, що не є однією з цих трьох команд, відображається як є. Наприклад, \sum{i=3}^{e^10}\frac{3x+5}{2}
має відображатися як
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Вхідні дані
Вхід - це команда LaTeX, передана як рядок (або еквівалентна мові рядка). Наприклад, команди LaTeX можуть бути вкладені\frac{\frac{1}{2}}{3}
, допустимий ввід. Вхідні дані повинні бути завжди правильними (не потрібно перевіряти синтаксис LaTeX у вашому коді). Вхідні дані будуть складатися лише з трьох команд LaTeX, представлених вище, та «тексту», який вам не потрібно буде форматувати.
Команди LaTeX завжди матимуть синтаксис, представлений вище, тобто суми та продукти завжди матимуть верхню та нижню межі (хоча вони можуть бути порожніми), і завжди буде чисельник та знаменник дробів.
Ми припускаємо, що межі сум і продуктів мають максимум 4 символи (= ширина суми та символів товару), так що вам не доведеться турбуватися про можливі проблеми перекриття. З подібних причин ми вважаємо, що межі є просто «текстовими» і ніколи не будуть командами LaTeX, наприклад \sum_{\sum_{1}^{2}}^{1}
, не є коректним вводом.
Виходи
Результатом вашої програми є представлення ASCII команди LaTeX, яку ви дали для введення.
Ваша програма повинна враховувати горизонтальне вирівнювання: наприклад, межі суми або продукту повинні бути горизонтально вирівняні з сумою або символом продукту (які обидва мають 4 символи). Якщо у обмеженій кількості є непарна кількість символів, не має значення, чи це один символ праворуч або ліворуч від центру, залежно від того, що буде добре. Рядок дробу повинен бути таким, як чисельник або знаменник, залежно від того, який із них є найдовшим.
Ваша програма повинна враховувати вертикальне вирівнювання: наприклад, вона \frac{\frac{1}{2}}{3} = \frac{1}{6}
повинна відображатися як
1
-
2 1
- = -
3 6
Для сум і продуктів, оскільки символи мають високу 4 символи, вертикальний центр вважається другим рядком вгорі.
Горизонтальний інтервал вважається правильним на даному вході, тобто проміжки на вході повинні відображатися у висновку.
Тестові справи
Вхідні дані
abc = 2
Вихідні дані
abc = 2
Вхідні дані
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Вихідні дані
+inf ___ 1 e = \ ` -- /__, n! n=0
Вхідні дані
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Вихідні дані
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Вхідні дані
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Вихідні дані
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Вхідні дані
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Вихідні дані
prod sum ___ ---- = \ ` sum prod /__, frac
Оцінка балів
Це код-гольф , тому виграє найкоротший код.