Doskonały dowód, zbyt mały, aby fi-!

12

Siedzisz w domu, pocierając ręce w najbardziej zły sposób. Tym razem będę mógł ustawić społeczność A-SPIN! Po prostu twierdzę, że udowodniłem ten problem (który bez wątpienia można naprawić) w tej książce tutaj… Otwierasz się na pierwszej odpowiedniej stronie. Rysujesz te słowa…

Jesteś oczywiście złym Fermatem! Haha tylko żartuję. Wiesz, że tak się nie stało; jest to jedynie opowieść o jego złym bliźniaku, Format. Format tutaj jest zbyt leniwy, aby zagęścić swój „dowód” na marginesie. Dlatego wezwał cię, abyś zrobił to dla niego.

Cel Biorąc pod uwagę dowód (ciąg znaków) i stronę (blok tekstowy), „napisz” na marginesie dowód.

Prawidłowe reguły strony

Blok tekstowy zawiera stronę wtedy i tylko wtedy, gdy spełnia następujące wymagania:

  • Górna i dolna ramka mają postać -{10,}\+$(Wyrażenie regularne -co najmniej dziesięć razy do a +, a następnie do końca linii).
  • Każda linia inna niż górna i dolna musi kończyć się na |. Będzie co najmniej jedna taka linia.
  • W |każdej linii będzie co najmniej pięć spacji od ostatniego .
  • Wszystkie linie mają tę samą szerokość.

Zatem następująca strona jest poprawna ( .s służą do pokazania, gdzie jest maksymalna granica marginesu):

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

Oto kolejna strona z szerszym marginesem:

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

Masz napisać podany ciąg na marginesie, zachowując słowa, które możesz, o ile to możliwe. Na przykład, jeśli hellopasuje do następnego wiersza, nie łam go w bieżącym wierszu.

I / O

Wypełnij tekst

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

To jest , więc wygrywa najkrótszy program w bajtach!


Tabela liderów

Conor O'Brien
źródło
Czy to nowość w codegolf, czy mogę pobrać stronę i dowód z plików? A może muszą pochodzić od I / O użytkownika?
wnnmaw
@wnnmaw welcome to code golf! Jeśli tak jest lepiej, możesz wybrać odczyt z pliku.
Conor O'Brien
@Mego Niezupełnie. To dodatkowo wymaga uznania „marginesu”; ten tekst musiał być uzasadniony, a nie tylko podzielony.
Conor O'Brien
Dzięki za nauczenie mnie o lorem ipsum. : P
Rɪᴋᴇʀ

Odpowiedzi:

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

Próbka IO z zawartością, f.txta następnie wyjście kodu

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

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

Przypadek 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
źródło
Jeśli podano słowo, które nie pasuje do reszty jednego wiersza, twój program powinien umieścić je w następnym wierszu.
Conor O'Brien
Gdzie widzisz, że nie działa w ten sposób?
wnnmaw
W pierwszym przykładzie „doskonała” powinna być umieszczona w następnym wierszu; w drugim przykładzie „superca” należy również umieścić w następnym wierszu. Przepraszam za dwuznaczność.
Conor O'Brien,
1
Ale „doskonała” nie pasuje do następnego wiersza, musi się złamać w obu kierunkach, więc nie widzę, jak to jest niespójne z regułami, jak są obecnie napisane. Obecnie nie znam żadnego sposobu implementacji kodu, tak jak to teraz
opisujesz
2
Masz rację tam, że jest , jak to brzmi. Moja wina całkowicie, twój kod jest w porządku.
Conor O'Brien