这是一本打开的书的相当简单的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,以显示文件的内容。
当文件中的文本多于一页中的文本时,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