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 Nclave debe imprimir la página siguiente y Bdebe retroceder una página. No debe suceder nada si Bse presiona desde la primera página o si Nse presiona desde la última página. El programa debe detenerse cuando se Qpresiona la tecla.
Ejemplo
Supongamos que f.txtcontiene 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.
Qaú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
NoBse presione (yTsi 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
Ttecla 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 | \||_____|
\033[2J\033[;H