以下は、開いた本のかなり単純な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をコマンドライン引数として取り、それらのテキスト寸法の本をstdoutに出力し、ファイルの内容を表示するプログラムを記述します。
ファイルのテキストが1ページに収まらない場合、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文字(16進数で20から7E)のみが含まれていると想定することができます。
- 単語の境界に関係なく、使用可能な各スポットに1文字を印刷します。
- wとhはオプションの引数で、デフォルトはそれぞれ7と5です。プログラムにはどちらも与えられないか、両方が与えられます。(入力は常に正しい形式であると想定できます。)
- 最後のページの空のテキストスペースをスペースで埋めます。
Q1ページしかない場合でも、終了する必要があります。
勝利
ボーナスが適用された後のバイト単位の最短プログラムが勝ちます。
ボーナス
- すべての行が単語(または単語セグメント)で始まるように、先頭のスペースを削除します。たとえば
| amet, |、最初の例ではになり| amet, c |ます。(-30バイト) NまたはBを押した後(およびTその後にボーナスを実行した場合)、以前に描いた本の画面をクリアして、本が変化するページのように見えるようにします。(-20バイト)作成し
Tたテキストの間で瞬時に切り替えキーは、上から下、左から右へ、左から右、上から下(デフォルト)から引き出されています。最初のボーナスを実行した場合、上から下モードの列で機能するはずです。(-100バイト)だから例えば:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|なる
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H