¡La prueba más excelente, demasiado pequeña para fi—!

12

Te sientas en casa, frotándote las manos de la manera más perversa. ¡Esta vez, podré configurar la comunidad A-SPIN! Simplemente afirmaré que he probado este problema (que sin duda es mejorable) dentro de este libro aquí ... Se abre en la primera página relevante. Usted garabatea esas palabras ...

¡Eres, por supuesto, el malvado Fermat! Jaja solo bromeo. Sabes que no sucedió así; esta es simplemente la narrativa de su gemelo malvado, Format. El formato aquí es demasiado vago para condensar su "prueba" en el margen. Por lo tanto, te ha pedido que lo hagas por él.

Objetivo Dada una prueba (cadena) y una página (bloque de texto), "escriba" en el margen la prueba.

Reglas de página válidas

Un bloque de texto contiene una página solo si cumple los siguientes requisitos:

  • Los bordes superior e inferior son de la forma -{10,}\+$(Expresión regular durante -al menos diez veces hasta a +, luego el final de la línea).
  • Cada línea que no sea superior o inferior debe terminar con un |. Habrá al menos una de esas líneas.
  • Habrá al menos cinco espacios desde el último |en cada línea.
  • Todas las líneas son del mismo ancho.

Entonces, la siguiente es una página válida (las .s son para mostrar dónde está el borde de margen máximo):

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

Aquí hay otra página con un margen más amplio:

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

Debes escribir la cadena dada en el margen, manteniendo las palabras que puedas, tanto como puedas. Por ejemplo, si hellocabe en la siguiente línea, no lo rompa en la línea actual.

I / Os

Texto de relleno

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|
----------+

Este es un , por lo que gana el programa más corto en bytes.


Tabla de clasificación

Conor O'Brien
fuente
Poco nuevo para codegolf, ¿puedo recoger la página y la prueba de los archivos? ¿O tienen que venir del usuario I / O?
wnnmaw
@wnnmaw bienvenido a code golf! Si es mejor, puede elegir leer de un archivo.
Conor O'Brien
@Mego No del todo. Esto quiere que reconozca un "margen", además; ese texto debe haber sido justificado, no simplemente dividido.
Conor O'Brien
Bueno, gracias por enseñarme sobre lorem ipsum. : P
Rɪᴋᴇʀ

Respuestas:

4

Pitón 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

Muestra de E / S con contenido f.txtseguido de salida de código

Caso 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|
------------------------+

Caso 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.                 |
-----------------------------------------+

Caso 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
fuente
Cuando se le da una palabra que no cabe en el resto de una línea, su programa debe colocarla en la línea siguiente.
Conor O'Brien
¿Dónde ves que no funciona de esta manera?
wnnmaw
En su primer ejemplo, "excelente" debe colocarse en la línea siguiente; en su segundo ejemplo, "superca" también debe colocarse en la siguiente línea. Perdón por la ambigüedad allí.
Conor O'Brien
1
Pero "excelente" no cabe en la siguiente línea, tiene que romperse de cualquier manera, así que no veo cómo esto es inconsistente con las reglas tal como están escritas actualmente. Actualmente no conozco ninguna forma de implementar el código como lo está describiendo ahora
wnnmaw
2
Tienes un punto allí, así es como está redactado. La culpa es mía, tu código está bien.
Conor O'Brien