Bạn được vận chuyển trong một vũ trụ song song nơi mọi người viết các phương trình toán học trên máy tính dưới dạng nghệ thuật ASCII bằng tay. Là một người nghiện LaTeX, điều này là hoàn toàn không thể chấp nhận được và bạn nên tự động hóa quá trình này một chút.
Mục tiêu của bạn là viết một chương trình đưa ra phiên bản ASCII của phương trình được nhập dưới dạng lệnh toán LaTeX.
Các lệnh LaTeX bắt buộc phải hỗ trợ
Tổng: lệnh LaTeX cho một khoản tiền là
\sum_{lower bound}^{upper bound}
Con số ASCII bạn phải sử dụng cho các khoản tiền là:
upper bound ___ \ ` /__, lower bound
Sản phẩm: lệnh LaTeX cho sản phẩm là
\prod_{lower bound}^{upper bound}
Con số ASCII bạn phải sử dụng cho các sản phẩm là:
upper bound ____ | | | | lower bound
Phân số: lệnh LaTeX cho phân số là
\frac{numerator}{denominator}
Con số ASCII bạn phải sử dụng cho các phân số là:
numerator ----------- denominator
Bất cứ điều gì không phải là một trong ba lệnh đó đều được hiển thị. Ví dụ, \sum{i=3}^{e^10}\frac{3x+5}{2}
nên được hiển thị dưới dạng
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Đầu vào
Đầu vào là một lệnh LaTeX được truyền dưới dạng một chuỗi (hoặc ngôn ngữ của bạn tương đương với chuỗi). Các lệnh LaTeX có thể được lồng nhau, ví dụ \frac{\frac{1}{2}}{3}
là một đầu vào hợp lệ. Các đầu vào được cho là luôn luôn chính xác (không cần kiểm tra cú pháp của LaTeX trong mã của bạn). Các đầu vào sẽ chỉ bao gồm ba lệnh LaTeX được trình bày ở trên và 'văn bản' mà bạn sẽ không cần định dạng.
Các lệnh LaTeX sẽ luôn đi kèm với cú pháp được trình bày ở trên, tức là các tổng và sản phẩm sẽ luôn có giới hạn trên và dưới (mặc dù chúng có thể trống) và sẽ luôn có một tử số và mẫu số cho các phân số.
Chúng tôi giả định rằng giới hạn của tổng và sản phẩm dài tối đa 4 ký tự (= chiều rộng của ký hiệu tổng và sản phẩm), do đó bạn không phải lo lắng về các vấn đề chồng chéo có thể xảy ra. Vì những lý do tương tự, chúng tôi giả định rằng giới hạn chỉ là 'văn bản' và sẽ không bao giờ là lệnh LaTeX, ví dụ: \sum_{\sum_{1}^{2}}^{1}
không phải là đầu vào hợp lệ.
Đầu ra
Đầu ra của chương trình của bạn là đại diện ASCII của lệnh LaTeX mà bạn được cung cấp làm đầu vào.
Chương trình của bạn phải tính đến căn chỉnh ngang: ví dụ: giới hạn của tổng hoặc sản phẩm phải được căn chỉnh theo chiều ngang với ký hiệu tổng hoặc sản phẩm (có cả 4 ký tự). Nếu ràng buộc có số lượng ký tự lẻ, việc nó là một ký tự ở bên phải hay bên trái của trung tâm, không có vấn đề gì. Dòng của phân số phải dài bằng tử số hoặc mẫu số, tùy theo giá trị nào dài nhất.
Chương trình của bạn phải đưa sự liên kết dọc vào tài khoản: ví dụ, \frac{\frac{1}{2}}{3} = \frac{1}{6}
nên được hiển thị dưới dạng
1
-
2 1
- = -
3 6
Đối với các khoản tiền và sản phẩm, vì các ký hiệu cao 4 ký tự, trung tâm dọc được coi là dòng thứ hai từ trên xuống.
Khoảng cách ngang được coi là chính xác trong đầu vào đã cho, tức là khoảng trắng trong đầu vào sẽ được hiển thị trong đầu ra.
Các trường hợp thử nghiệm
Đầu vào
abc = 2
Đầu ra
abc = 2
Đầu vào
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Đầu ra
+inf ___ 1 e = \ ` -- /__, n! n=0
Đầu vào
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Đầu ra
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Đầu vào
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Đầu ra
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Đầu vào
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Đầu ra
prod sum ___ ---- = \ ` sum prod /__, frac
Chấm điểm
Đây là mã golf , vì vậy mã ngắn nhất sẽ thắng.