Voici une représentation ASCII assez simple d'un livre ouvert:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Notez que la partie texte est uniquement sur la page de droite et fait 7 caractères de large par 5 de haut. Notez également que le bord supérieur du livre comporte 5 barres obliques inverses et 10 traits de soulignement. Le 10 vient de la largeur du texte plus 3 et le 5 est la moitié de 10.
En utilisant le même format de mise à l'échelle, nous pouvons redimensionner le livre pour avoir une zone de texte w caractères large et h haut, où w est tout entier positif impair et h est tout entier positif.
Certains livres w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Le nombre de traits de soulignement en haut est toujours w +3 et le nombre de barres obliques inverses est toujours ( w +3) / 2.
Objectif
Écrivez un programme qui prend un nom de fichier et w et h comme arguments de ligne de commande, et sort un livre avec ces dimensions de texte vers stdout, affichant le contenu du fichier.
Lorsque le fichier contient plus de texte que ne peut en contenir une page, la N
clé doit imprimer la page suivante et B
revenir en arrière d'une page. Rien ne devrait se produire si vous B
appuyez sur la première page ou N
sur la dernière page. Le programme devrait s'arrêter lorsque la Q
touche est enfoncée.
Exemple
Supposons que f.txt
contient Lorem ipsum dol?
et que l'utilisateur ait appuyé sur la séquence de touches N N B N N Q
. Le programme devrait exécuter quelque chose comme ceci:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Notez qu'il y a une nouvelle ligne après chaque livre et aucun espace de fin. Ceci est nécessaire.
Remarques
- Vous pouvez supposer que le fichier contient uniquement des caractères ASCII imprimables (hex 20 à 7E).
- Imprimez un caractère à chaque emplacement disponible, quelles que soient les limites des mots.
- w et h sont des arguments facultatifs par défaut à 7 et 5 respectivement. Votre programme ne recevra ni l'un ni l'autre ni les deux. (Vous pouvez supposer que l'entrée est toujours bien formée.)
- Remplissez tout espace de texte vide sur la dernière page avec des espaces.
Q
devrait toujours être requis pour quitter s'il n'y a qu'une seule page.
Gagnant
Le programme le plus court en octets après application des bonus gagne.
Bonus
- Supprimez les espaces de début pour que chaque ligne commence par un mot (ou segment de mot). par exemple
| amet, |
dans le premier exemple deviendrait| amet, c |
. (-30 octets) - Effacer l'écran des livres préalablement dessinés après
N
ouB
est pressé (etT
si vous faites le bonus après) de sorte que les regards du livre comme ses pages l' évolution en place. (-20 octets) Faites en sorte que la
T
touche bascule instantanément entre le texte en cours de dessin de gauche à droite de haut en bas (par défaut), de haut en bas de gauche à droite. Si vous avez fait le premier bonus, cela devrait fonctionner pour les colonnes en mode de haut en bas. (-100 octets)Ainsi, par exemple:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
devient
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
la source
\033[2J\033[;H
Réponses:
C # 535 octets
Le score est de 655 octets de code -20 octets de bonus pour la suppression et -100 octets de bonus pour la touche T ... Je pense, je ne peux pas dire que je suis sûr que je n'ai rien manqué dans la spécification
Je peux essayer de réduire les boucles en demandant à la méthode W de renvoyer l'argument s, mais cela nécessiterait des efforts, donc aucune promesse.
Code golf:
Formaté un peu:
la source
Java,
10391001993953946Avec bonus: Supprimer les espaces de tête (-30 octets) ->
1009971963923916Effacer l'écran ne vaut pas la peine avec java (sauf si j'imprime juste quelques nouvelles lignes. Mais alors l'utilisateur doit utiliser la taille de console correcte)
Code:
Joli:
Si le programme ne doit pas s'exécuter indéfiniment, je pourrais également enregistrer quelques octets en supprimant la boucle while et en appelant simplement main.
Ce n'est pas optimal, mais c'est un début.
la source
public
mots - clés ... De plus, çaimport java.*;
marche?import java.*;
aussi, mais ça ne marche pas. Et la méthode principale doit être exactementpublic static void main(String[]c)
(y comprispublic
), sinon elle n'est pas reconnue. Mais la classe n'a bien sûr pas besoin d'être publique, bonne prise.