Oto dość proste przedstawienie otwartej książki w ASCII:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Zauważ, że fragment tekstu jest tylko na prawej stronie i ma 7 znaków szerokości i 5 wysokości. Zauważ również, że górna krawędź książki ma 5 ukośników odwrotnych i 10 znaków podkreślenia. 10 pochodzi od szerokości tekstu plus 3, a 5 to połowa 10.
Stosując ten sam format skalowania możemy zmienić rozmiar książkę mieć obszar tekstu wagowo znaków szerokich i h High, gdzie w jest jakiś dziwny dodatnia i h jest dowolną liczbą całkowitą dodatnią.
Niektóre książki w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Liczba znaków podkreślenia u góry wynosi zawsze w +3, a liczba odwrotnych ukośników wynosi zawsze ( w +3) / 2.
Cel
Napisz progam która przyjmuje nazwę pliku i w i h jako argumentów wiersza poleceń i wysyła książkę z tych wymiarów tekst na standardowe wyjście, wyświetlając zawartość pliku.
Gdy plik zawiera więcej tekstu niż zmieści się na jednej stronie, Nklawisz powinien wydrukować następną stronę i Bpowrócić na stronę. Nic nie powinno się zdarzyć, jeśli Bzostanie naciśnięty z pierwszej strony lub Nzostanie naciśnięty z ostatniej strony. Program powinien zatrzymać się po Qnaciśnięciu klawisza.
Przykład
Załóżmy, że f.txtzawiera Lorem ipsum dol?i użytkownik nacisnął sekwencję klawiszy N N B N N Q. Program powinien uruchomić coś takiego:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Zauważ, że po każdej książce jest nowa linia i brak spacji. To jest wymagane.
Notatki
- Możesz założyć, że plik zawiera tylko drukowalne znaki ASCII (szesnastkowo od 20 do 7E).
- Wydrukuj jeden znak w każdym dostępnym miejscu, niezależnie od granic słów.
- w i h są opcjonalnymi argumentami, które domyślnie wynoszą odpowiednio 7 i 5. Twój program nie otrzyma ani jednego, ani jednego i drugiego. (Możesz założyć, że dane wejściowe są zawsze dobrze sformułowane).
- Wypełnij puste miejsce na ostatniej stronie spacjami.
Qnadal powinno być wymagane zamknięcie, jeśli jest tylko jedna strona.
Zwycięski
Najkrótszy program w bajtach po zastosowaniu bonusów wygrywa.
Bonusy
- Usuń spacje wiodące, aby każda linia zaczynała się od słowa (lub segmentu słowa). np.
| amet, |w pierwszym przykładzie stałoby się| amet, c |. (-30 bajtów) - Wyczyść ekran poprzednio narysowanych książek po naciśnięciu
NlubBnaciśnięciu (iTjeśli zrobisz bonus po tym), aby książka wyglądała, jakby zmieniała strony na swoim miejscu. (-20 bajtów) Spraw, aby
Tklawisz błyskawicznie przełączał się między rysowanym tekstem od lewej do prawej od góry do dołu (domyślnie), od góry do dołu od lewej do prawej. Jeśli zrobiłeś pierwszą premię, powinien działać dla kolumn w trybie od góry do dołu. (-100 bajtów)Na przykład:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|staje się
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H