Una prova eccellente, troppo piccola per essere—!


12

Ti siedi a casa, strofinandoti le mani nel modo più malvagio. Questa volta, sarò in grado di impostare la community A-SPIN! Dirò semplicemente di aver dimostrato questo problema (che è senza dubbio migliorabile) all'interno di questo libro qui ... Si apre alla prima pagina pertinente. Scarabocchi quelle parole ...

Sei, ovviamente, il malvagio Fermat! Haha, sto solo scherzando. Sai che non è successo in questo modo; questa è semplicemente la narrazione del suo gemello malvagio, Format. Il formato qui è troppo pigro per condensare la sua "prova" nel margine. Ti ha quindi invitato a farlo per lui.

Obiettivo Data una prova (stringa) e una pagina (blocco di testo), "scrivi" sul margine della prova.

Regole della pagina valide

Un blocco di testo contiene una pagina se e solo se soddisfa i seguenti requisiti:

  • I bordi superiore e inferiore hanno la forma -{10,}\+$(espressione regolare per -almeno dieci volte fino a a +, quindi alla fine della linea).
  • Ogni linea non superiore e non inferiore deve terminare con a |. Ci sarà almeno una di queste righe.
  • Ci saranno almeno cinque spazi dall'ultimo |in ogni riga.
  • Tutte le linee hanno la stessa larghezza.

Quindi la seguente è una pagina valida (le .s sono per mostrare dove si trova il bordo del margine massimo):

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

Ecco un'altra pagina con un margine più ampio:

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

Devi scrivere la stringa data nel margine, mantenendo le parole che puoi, per quanto puoi. Ad esempio, se si helloadatta alla riga successiva, non interromperla sulla riga corrente.

I / O

Testo di riempimento

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

Questo è un , quindi vince il programma più breve in byte!


Classifica


Poco nuovo su codegolf, posso prendere la pagina e la prova dai file? O devono provenire dall'I / O dell'utente?
wnnmaw,

@wnnmaw benvenuto nel codice golf! Se è meglio, puoi scegliere di leggere da un file.
Conor O'Brien,


@Mego Non proprio. Questo vuole che tu riconosca un "margine", inoltre; quel testo doveva essere giustificato, non semplicemente diviso.
Conor O'Brien,

Bene, grazie per avermi insegnato su Lorem ipsum. : P
Rɪᴋᴇʀ

Risposte:


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

IO di esempio con contenuto f.txtseguito dall'output del codice

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

Quando viene data una parola che non si adatta a quella del resto di una riga, il programma dovrebbe inserirla nella riga successiva.
Conor O'Brien,

Dove vedi che non funziona così?
wnnmaw,

Nel tuo primo esempio, "eccellente" dovrebbe essere messo nella riga successiva; nel tuo secondo esempio, "superca" dovrebbe essere inserito anche nella riga successiva. Ci scusiamo per l'ambiguità lì.
Conor O'Brien,

1
Ma "eccellente" non si adatta alla riga successiva, deve rompersi in entrambi i modi, quindi non vedo come ciò sia incompatibile con le regole come sono attualmente scritte. Al momento non conosco alcun modo per implementare il codice come stai descrivendo ora
wnnmaw,

2
Hai un punto lì, che è come è formulata. Colpa mia, il tuo codice va bene.
Conor O'Brien,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.