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
Respuestas:
C # 535bytes
El puntaje es 655bytes de código -20byte de bonificación para borrar, y -100byte de bonificación para la tecla T ... Creo que no puedo decir que estoy seguro de que no me he perdido algo en la especificación
Puedo intentar colapsar los bucles haciendo que el método W devuelva el argumento s, pero eso requeriría esfuerzo, por lo que no hay promesas.
Código de golf:
Formateado un poco:
fuente
Java,
10391001993953946Con bonificación: Eliminar espacios iniciales (-30 bytes) ->
1009971963923916Limpiar la pantalla no vale la pena con Java (excepto si solo imprimo un par de líneas nuevas. Pero entonces el usuario tiene que usar el tamaño de consola correcto)
Código:
Bonita:
Si el programa no tiene que ejecutarse para siempre, también podría guardar algunos bytes eliminando el bucle while y simplemente llamando a main.
Esto no es óptimo, pero es un comienzo.
fuente
public
palabras clave ... Además, ¿import java.*;
funciona?import java.*;
, pero no funciona. Y el método principal debe ser exactamentepublic static void main(String[]c)
(incluidopublic
), de lo contrario no se reconoce. Pero la clase, por supuesto, no necesita ser pública, buena captura.