Aquí hay una representación ASCII bastante simple de un libro abierto:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Observe que la porción de texto está solo en la página derecha y tiene 7 caracteres de ancho por 5 de alto. Observe también que el borde superior del libro tiene 5 barras diagonales invertidas y 10 guiones bajos. El 10 proviene del ancho del texto más 3 y el 5 es la mitad de 10.
Utilizando el mismo formato de escala podemos cambiar el tamaño del libro que tiene un área de texto w caracteres anchos y h de altura, donde w es cualquier extraño número entero positivo y h es cualquier número entero positivo.
Algunos libros w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
El número de guiones bajos en la parte superior siempre es w +3 y el número de barras invertidas siempre es ( w +3) / 2.
Objetivo
Escriba un programa que tome un nombre de archivo yw y h como argumentos de línea de comando, y muestre un libro con esas dimensiones de texto en stdout, mostrando el contenido del archivo.
Cuando el archivo tiene más texto del que cabe en una página, la N
clave debe imprimir la página siguiente y B
debe retroceder una página. No debe suceder nada si B
se presiona desde la primera página o si N
se presiona desde la última página. El programa debe detenerse cuando se Q
presiona la tecla.
Ejemplo
Supongamos que f.txt
contiene Lorem ipsum dol?
y el usuario ha presionado la secuencia de teclas N N B N N Q
. El programa debería ejecutar algo como esto:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Observe que hay una nueva línea después de cada libro y no hay espacios finales. Esto es requerido.
Notas
- Puede suponer que el archivo solo contiene caracteres ASCII imprimibles (hexadecimal 20 a 7E).
- Imprima un carácter en cada lugar disponible, independientemente de los límites de las palabras.
- w y h son argumentos opcionales que por defecto son 7 y 5 respectivamente. Su programa recibirá ninguno o ambos. (Puede suponer que la entrada siempre está bien formada).
- Rellene cualquier espacio de texto vacío en la última página con espacios.
Q
aún se debe exigir que salga si solo hay una página.
Victorioso
El programa más corto en bytes después de aplicar los bonos gana.
Bonos
- Elimine los espacios iniciales para que cada línea comience con una palabra (o segmento de palabra). por ejemplo,
| amet, |
en el primer ejemplo se convertiría| amet, c |
. (-30 bytes) - Despeje la pantalla de los libros dibujados previamente después
N
oB
se presione (yT
si hace la bonificación después de esto) para que el libro se vea como si sus páginas cambiaran en su lugar. (-20 bytes) Haga que la
T
tecla cambie instantáneamente entre el texto que se dibuja de izquierda a derecha de arriba a abajo (el valor predeterminado), de arriba a abajo de izquierda a derecha. Si hiciste la primera bonificación, debería funcionar para las columnas en el modo de arriba a abajo. (-100 bytes)Así por ejemplo:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
se convierte
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
fuente
\033[2J\033[;H