Aqui está uma descrição ASCII bastante simples de um livro aberto:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Observe que a parte do texto está apenas na página direita e tem 7 caracteres de largura por 5 de altura. Observe também que a borda superior do livro possui 5 barras invertidas e 10 sublinhados. O 10 vem da largura do texto mais 3 e o 5 é metade de 10.
Usando o mesmo formato de escala, podemos redimensionar o livro para ter uma área de texto com caracteres de largura eh alto, onde w é qualquer número inteiro positivo ímpar e h é qualquer número inteiro positivo.
Alguns livros w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
O número de sublinhados na parte superior é sempre w +3 e o número de barras invertidas é sempre ( w +3) / 2.
Objetivo
Escrever um progama que leva um nome de arquivo e w e h como argumentos de linha de comando, e produz um livro com essas dimensões de texto para stdout, exibindo o conteúdo do arquivo.
Quando o arquivo tiver mais texto do que caberá em uma página, a N
chave deverá imprimir a próxima página e B
voltar uma página. Nada deve acontecer se B
for pressionado na primeira página ou N
pressionado na última página. O programa deve parar quando a Q
tecla for pressionada.
Exemplo
Suponha que f.txt
contém Lorem ipsum dol?
e o usuário tenha pressionado a sequência de teclas N N B N N Q
. O programa deve executar algo como isto:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Observe que há uma nova linha após cada livro e não há espaços à direita. Isso é necessário.
Notas
- Você pode assumir que o arquivo contém apenas caracteres ASCII imprimíveis (hex 20 a 7E).
- Imprima um caractere em cada ponto disponível, independentemente dos limites das palavras.
- w e h são opcionais argumentos que padrão a 7 e 5, respectivamente. Seu programa receberá um ou ambos. (Você pode assumir que a entrada está sempre bem formada.)
- Preencha qualquer espaço de texto vazio na última página com espaços.
Q
ainda será necessário sair se houver apenas uma página.
Ganhando
O programa mais curto em bytes após a aplicação dos bônus vence.
Bónus
- Remova os espaços à esquerda para que cada linha comece com uma palavra (ou segmento de palavra). por exemplo,
| amet, |
no primeiro exemplo se tornaria| amet, c |
. (-30 bytes) - Limpe a tela dos livros previamente desenhados depois
N
ouB
pressionada (eT
se você fizer o bônus depois disso) para que o livro pareça com as páginas em mudança. (-20 bytes) Faça com que a
T
chave alterne instantaneamente entre o texto que está sendo desenhado da esquerda para a direita, de cima para baixo (o padrão), de cima para baixo, da esquerda para a direita. Se você fez o primeiro bônus, ele deve funcionar para colunas no modo de cima para baixo. (-100 bytes)Então, por exemplo:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
torna-se
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H