Вы переноситесь в параллельную вселенную, где люди пишут математические уравнения на компьютерах как искусство ASCII вручную. Как наркоман LaTeX, это абсолютно неприемлемо, и вам следует несколько автоматизировать этот процесс.
Ваша цель - написать программу, которая выводит версию уравнения в формате ASCII, введенную как математическая команда LaTeX.
Обязательные команды LaTeX для поддержки
Сумма: команда LaTeX для суммы
\sum_{lower bound}^{upper bound}
Число ASCII, которое вы должны использовать для сумм:
upper bound ___ \ ` /__, lower bound
Product: команда 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
счет
Это код-гольф , поэтому выигрывает самый короткий код.