Uma prova excelente, pequena demais para ser encontrada!


12

Você fica em casa, esfregando as mãos da maneira mais maligna possível. Desta vez, poderei definir a comunidade A-SPIN! Vou apenas afirmar que provei esse problema (que é sem dúvida improvável) dentro deste livro aqui ... Você abre a primeira página relevante. Você rabisca essas palavras ...

Você é, obviamente, o mal Fermat! Haha, estou brincando. Você sabe que não aconteceu assim; isso é meramente a narrativa de seu gêmeo maligno, Format. O formato aqui é muito preguiçoso para condensar sua "prova" na margem. Ele, portanto, chamou você a fazer isso por ele.

Objetivo Dada uma prova (string) e uma página (bloco de texto), "escreva" na margem a prova.

Regras de página válidas

Um bloco de texto contém uma página se, e somente se, atende aos seguintes requisitos:

  • As bordas superior e inferior são do formato -{10,}\+$(Expressão regular por -pelo menos dez vezes até a e +, em seguida, o final da linha).
  • Toda linha não superior e não inferior deve terminar com a |. Haverá pelo menos uma dessas linhas.
  • Haverá pelo menos cinco espaços do último |em cada linha.
  • Todas as linhas têm a mesma largura.

Portanto, a seguir é uma página válida (os .são para mostrar onde está a borda da margem máxima):

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

Aqui está outra página com uma margem maior:

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

Você deve escrever a sequência dada na margem, mantendo as palavras que puder, na medida do possível. Por exemplo, se hellocouber na próxima linha, não a quebre na linha atual.

I / Os

Texto de preenchimento

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 é um , então o programa mais curto em bytes vence!


Entre os melhores


Pouco novo no codegolf, posso pegar a página e fazer a prova dos arquivos? Ou eles precisam vir de E / S do usuário?
wnnmaw

@wnnmaw bem-vindo ao código de golfe! Se for melhor, você pode optar por ler de um arquivo.
Conor O'Brien


@Mego Não é bem assim. Isso quer que você reconheça uma "margem", além disso; esse texto deve ter sido justificado, não apenas dividido.
Conor O'Brien

Bem, obrigado por me ensinar sobre lorem ipsum. : P
Rɪᴋᴇʀ

Respostas:


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

Exemplo de E / S com conteúdo de f.txtseguido por saída 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|
----------+

Quando uma palavra que não se encaixa no resto de uma linha, seu programa deve colocá-la na próxima linha.
Conor O'Brien

Onde você vê que não está funcionando dessa maneira?
wnnmaw

No seu primeiro exemplo, "excelente" deve ser colocado na próxima linha; no seu segundo exemplo, "superca" também deve ser colocado na próxima linha. Desculpe pela ambiguidade lá.
Conor O'Brien

1
Mas "excelente" não se encaixa na próxima linha, tem que quebrar de qualquer maneira, para que eu não veja como isso é inconsistente com as regras, como elas são escritas atualmente. Actualmente, eu não conheço nenhuma maneira de implementar o código que você está descrevendo agora
wnnmaw

2
Você tem um argumento aí, é assim que está redigido. Minha culpa é inteiramente, seu código está bom.
Conor O'Brien
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.