Une excellente preuve, trop petite pour fi ...!

12

Vous êtes assis à la maison, en vous frottant les mains de la manière la plus mauvaise. Cette fois, je vais pouvoir définir la communauté A-SPIN! Je vais simplement affirmer que j'ai prouvé ce problème (qui est sans aucun doute améliorable) à l'intérieur de ce livre ici… Vous ouvrez la première page pertinente. Vous gribouillez ces mots…

Vous êtes, bien sûr, le méchant Fermat! Haha je plaisante. Vous savez que cela ne s'est pas passé comme ça; ce n'est que le récit de son jumeau maléfique, Format. Le format ici est trop paresseux pour condenser sa «preuve» dans la marge. Il vous a donc demandé de le faire pour lui.

Objectif Étant donné une preuve (chaîne) et une page (bloc de texte), "écrire" dans la marge la preuve.

Règles de page valides

Un bloc de texte contient une page si et seulement si elle remplit les conditions suivantes:

  • Les bordures supérieure et inférieure sont de la forme -{10,}\+$(expression régulière -au moins dix fois jusqu'à a +, puis la fin de la ligne).
  • Chaque ligne non supérieure et non inférieure doit se terminer par un |. Il y aura au moins une telle ligne.
  • Il y aura au moins cinq espaces à partir du dernier |de chaque ligne.
  • Toutes les lignes ont la même largeur.

Donc, ce qui suit est une page valide (les .s sont pour montrer où la bordure de marge maximale est):

-----------------+
Lorem Ipsum.     |
and other  .     |
latin crud .     |
           .     |
        EOF.     |
-----------------+

Voici une autre page avec une marge plus large:

------------------------+
Hello world!   .        |
How are you, to.        |
day? --Mme. B  .        |
               .        |
------------------------+

Vous devez écrire la chaîne donnée dans la marge, en conservant autant que possible les mots que vous pouvez. Par exemple, s'il hellotient sur la ligne suivante, ne le cassez pas sur la ligne actuelle.

E / S

Texte de remplissage

Proof: This is a most excellent proof, too small for anyone!
Text:                       ; not a leading newline
------------------------+
Hello world!            |
How are you, to         |
day? --Mme. B           |
                        |
------------------------+
Output: 
------------------------+
Hello world!    This a  |
How are you, to most    |
day? --Mme. B   excellen|
                t proof,|
------------------------+    

Proof: Execute the member as an example to the others!
Text:
------------------------------------------------+
Contrary to popular belief, Lorem               |
Ipsum is not simply random text.                |
It has roots in a piece of classical            |
Latin literature from 45 BC, making             |
it over 2000 years old. Richard                 |
McClintock, a Latin professor at                |
Hampden-Sydney College in Virginia,             |
looked up one of the more obscure               |
Latin words, consectetur, from a                |
Lorem Ipsum passage, and going through          |
the cites of the word in classical              |
literature, discovered the undoubtable          |
source. Lorem Ipsum comes from...               |
------------------------------------------------+
Output:
------------------------------------------------+
Contrary to popular belief, Lorem      Execute  |
Ipsum is not simply random text.       the      |
It has roots in a piece of classical   member as|
Latin literature from 45 BC, making    an       |
it over 2000 years old. Richard        example  |
McClintock, a Latin professor at       to the   |
Hampden-Sydney College in Virginia,    others!  |
looked up one of the more obscure               |
Latin words, consectetur, from a                |
Lorem Ipsum passage, and going through          |
the cites of the word in classical              |
literature, discovered the undoubtable          |
source. Lorem Ipsum comes from...               |
------------------------------------------------+

Proof: Consider supercalifragilisticexpialidocious. Therefore, x.
Output:
-----------------------------------------+
sections 1.10.32 and                     |
1.10.33 of "de Finibus                   |
Bonorum et Malorum"                      |
(The Extremes of Good                    |
and Evil) by Cicero,                     |
written in 45 BC. This                   |
book is a treatise on                    |
the theory of ethics,                    |
very popular during the                  |
Renaissance. The first                   |
line of Lorem Ipsum,                     |
"Lorem ipsum dolor sit                   |
amet..", comes from a                    |
line in section 1.10.32.                 |
-----------------------------------------+
Output: Consider supercalifragilisticexpialidocious. Therefore, x.
-----------------------------------------+
sections 1.10.32 and     Consider        |
1.10.33 of "de Finibus   supercalifragili|
Bonorum et Malorum"      sticexpialidocio|
(The Extremes of Good    us. Therefore, x|
and Evil) by Cicero,     .               |
written in 45 BC. This                   |
book is a treatise on                    |
the theory of ethics,                    |
very popular during the                  |
Renaissance. The first                   |
line of Lorem Ipsum,                     |
"Lorem ipsum dolor sit                   |
amet..", comes from a                    |
line in section 1.10.32.                 |
-----------------------------------------+

Proof: Alex is a bird. All birds can fly. All things that fly are wrong. Ergo, Alex is wrong.
Text:
----------+
Sorry     |    ; 5 spaces. 
----------+
Output:
----------+
Sorry Alex|
----------+

Il s'agit d'un , donc le programme le plus court en octets gagne!


Classement

Conor O'Brien
la source
Petit nouveau sur codegolf, puis-je récupérer la page et la preuve des fichiers? Ou doivent-ils provenir des E / S des utilisateurs?
wnnmaw
@wnnmaw bienvenue au golf de code! Si c'est mieux, vous pouvez choisir de lire à partir d'un fichier.
Conor O'Brien
@Mego Pas tout à fait. Cela veut que vous reconnaissiez en outre une "marge"; ce texte doit avoir été justifié, pas simplement scindé.
Conor O'Brien
Eh bien, merci de m'avoir enseigné le lorem ipsum. : P
Rɪᴋᴇʀ

Réponses:

4

Python 2, 334

p=open("f.txt",'r').readlines()
r,S,p=p[0][7:],p[2].strip(),p[3:-1]
import textwrap as t,itertools as i
m,l=max([len(s[:-5].strip()) for s in p]),len(S)-2
P = i.izip_longest(["{} {{:{}}}|".format(s[:m],l-m) for s in p],t.wrap(r,l-m),fillvalue="")
print S
for q in P:
 if not q[0]:break
 print q[0].format(q[1])
print S

Exemple d'E / S avec contenu de f.txtsuivi de sortie de code

Cas 1

Proof: This is a most excellent proof, too small for anyone!
Text:                       
------------------------+
Hello world!            |
How are you, to         |
day? --Mme. B           |
                        |
------------------------+

------------------------+
Hello world!    Proof:  |
How are you, to This is |
day? --Mme. B   a most e|
                xcellent|
------------------------+

Cas 2

Proof: Consider supercalifragilisticexpialidocious. Therefore, x.
Output:
-----------------------------------------+
sections 1.10.32 and                     |
1.10.33 of "de Finibus                   |
Bonorum et Malorum"                      |
(The Extremes of Good                    |
and Evil) by Cicero,                     |
written in 45 BC. This                   |
book is a treatise on                    |
the theory of ethics,                    |
very popular during the                  |
Renaissance. The first                   |
line of Lorem Ipsum,                     |
"Lorem ipsum dolor sit                   |
amet..", comes from a                    |
line in section 1.10.32.                 |
-----------------------------------------+

-----------------------------------------+
sections 1.10.32 and     Consider superca|
1.10.33 of "de Finibus   lifragilisticexp|
Bonorum et Malorum"      ialidocious.    |
(The Extremes of Good    Therefore, x.   |
and Evil) by Cicero,                     |
written in 45 BC. This                   |
book is a treatise on                    |
the theory of ethics,                    |
very popular during the                  |
Renaissance. The first                   |
line of Lorem Ipsum,                     |
"Lorem ipsum dolor sit                   |
amet..", comes from a                    |
line in section 1.10.32.                 |
-----------------------------------------+

Cas 3

Proof: Alex is a bird. All birds can fly. All things that fly are wrong. Ergo, Alex is wrong.
Text:
----------+
Sorry     |   
----------+

----------+
Sorry Alex|
----------+
wnnmaw
la source
Lorsqu'on lui donne un mot qui ne rentre pas dans le reste d'une ligne, votre programme doit le mettre sur la ligne suivante.
Conor O'Brien
Où voyez-vous qu'il ne fonctionne pas de cette façon?
wnnmaw
Dans votre premier exemple, "excellent" devrait être mis sur la ligne suivante; dans votre deuxième exemple, "superca" devrait également être mis sur la ligne suivante. Désolé pour l'ambiguïté là-bas.
Conor O'Brien
1
Mais "excellent" ne rentre pas sur la ligne suivante, il doit casser dans les deux sens, donc je ne vois pas comment cela est incompatible avec les règles telles qu'elles sont actuellement écrites. Je ne connais actuellement aucun moyen d'implémenter le code comme vous le décrivez maintenant
wnnmaw
2
Vous avez un point là, c'est la façon dont il est rédigé. Ma faute entièrement, votre code est très bien.
Conor O'Brien