Вот довольно простое описание открытой книги в формате ASCII:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Обратите внимание, что текстовая часть находится только на правой странице и имеет 7 символов в ширину и 5 в высоту. Также обратите внимание, что верхний край книги имеет 5 обратных слешей и 10 подчеркиваний. 10 прибывает из ширины текста плюс 3, и 5 - половина 10.
Используя тот же формат масштабирования, мы можем изменить размер книги, чтобы текстовая область имела ширину w и высоту h , где w - любое нечетное положительное целое число, а h - любое положительное целое число.
Некоторые книги в формате W × H : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Количество подчеркиваний в верхней части всегда равно w +3, а число обратных косых черт всегда ( w +3) / 2.
Цель
Напишите программу, которая принимает имя файла и w и h в качестве аргументов командной строки, и выводит книгу с этими размерами текста в стандартный вывод, отображая содержимое файла.
Если в файле больше текста, чем уместится на одной странице, Nключ должен напечатать следующую страницу и Bвернуться назад. Ничего не должно происходить, если Bнажать на первой странице или Nнажать на последней странице. Программа должна остановиться при Qнажатии клавиши.
пример
Предположим, f.txtсодержит Lorem ipsum dol?и пользователь нажал последовательность клавиш N N B N N Q. Программа должна запустить что-то вроде этого:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Обратите внимание, что после каждой книги стоит новая строка, а пробелы отсутствуют. Это обязательно.
Ноты
- Вы можете предположить, что файл содержит только печатные символы ASCII (шестнадцатеричные от 20 до 7E).
- Напечатайте один символ в каждом доступном месте, независимо от границ слова.
- w и h являются необязательными аргументами, которые по умолчанию равны 7 и 5 соответственно. Ваша программа будет либо ни один, ни оба. (Вы можете предположить, что входные данные всегда правильно сформированы.)
- Заполните любое пустое место на последней странице пробелами.
Qпо-прежнему необходимо выйти, если есть только одна страница.
выигрыш
Самая короткая программа в байтах после применения бонусов выигрывает.
Бонусы
- Удалите начальные пробелы, чтобы каждая строка начиналась со слова (или сегмента слова). например,
| amet, |в первом примере станет| amet, c |. (-30 байт) - Очистите экран ранее нарисованных книг после
Nили послеBнажатия (иTесли вы делаете бонус после этого), чтобы книга выглядела как изменяющиеся страницы на месте. (-20 байт) Сделайте так, чтобы
Tклавиша мгновенно переключалась между текстом, рисуемым слева направо сверху вниз (по умолчанию), сверху вниз слева направо. Если вы сделали первый бонус, он должен работать для столбцов в режиме сверху вниз. (-100 байт)Так, например:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|становится
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H