Dado este texto
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed the eiusmod tempor incididunt ut labore et dolore magna aliqua. Por fim, ad minimamente veniam, quis exercitar nostrud ullamco laboris nisi ut aliquip ex e comodo consequente. Dre aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
escreva o programa mais curto que produz o mesmo texto justificado com 80 caracteres. O texto acima deve ter exatamente a seguinte aparência:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
Regras:
- palavras não devem ser cortadas
- espaços extras devem ser adicionados
- depois de um ponto.
- depois de uma vírgula
- após a palavra mais curta (da esquerda para a direita)
- o resultado não deve ter mais de 2 espaços consecutivos
- a última linha não se justifica.
- as linhas não devem começar com vírgula ou ponto.
- forneça a saída do seu programa
vencedor: o programa mais curto.
Nota: A sequência de entrada é fornecida no STDIN como uma linha (sem avanço de linha ou retorno de carro)
atualizar:
A string de entrada pode ser qualquer texto com comprimento de palavra razoável (ou seja, não mais que 20 ~ 25 caracteres), como:
Lorem ipsum dolor sente-se no meio, consectetur elip adipiscing. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing ne, ultricies sed, dolor. Cras elementum ultrices diam. Mecenas ligula massa, varius a, sempre congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim is eleifend mi, non fermentum diam nisl sit amet erat. Duis sempre. Duis arcu massa, scelerisque vitae, conseqüentemente, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Louvado egestas leo in pede. Louvado blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus oruct luctus and ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Mecânicas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, orn ut ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, em tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Número inteiro id felis. Curabitur aliquet pellentesque diam. Inteiro quis metus vitae elit lobortis egestas. Lorem ipsum dolor sente-se entre os elites consectetuer adipiscing. Morbi vel erat non mauris convallis vehicle. Nulla et sapien. Tellus tortor inteiro, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus e tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Álbum de louvor, enim e fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, e ultricies lacus lorem varius purus. Curabitur eu amet.
fonte
Respostas:
Perl, 94 caracteres
Corra com
perl -nM5.01
. (O valorn
está incluído na contagem de caracteres.)O código acima é o mais curto que eu poderia fazer, capaz de lidar com qualquer bola curva que eu lancei nele (como palavras de uma letra no início de uma linha, linhas de entrada com exatamente 80 caracteres, etc.) exatamente de acordo com a especificação:
(Pedimos desculpas a Gareth por usar seu comentário como entrada de teste adicional.)
A seguinte versão de 75 caracteres funciona bem o suficiente para produzir a saída de amostra da entrada de amostra, mas pode falhar em outras entradas. Além disso, deixa um caractere de espaço extra no final de cada linha de saída.
Ambas as versões serão executadas para sempre se encontrarem entradas que não podem justificar corretamente. (Na versão mais longa, a substituição
until
poruntil$i>80||
fixaria isso ao custo de sete caracteres extras.)fonte
Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.*?\.|.*?,|(.*? )??\S{ <-- HERE 32767}) \b/
o segundo texto.$i>80
verificação, ela expande a 11ª linha parapede pellentesque fermentum. Maecenas adipiscing ante non diam sodales
, que tem apenas 78 caracteres e desiste, pois cada palavra (exceto a última) é seguida por dois espaços.Ruby, 146 caracteres
Imprime exatamente a saída desejada (veja abaixo) se o texto fornecido for alimentado em STDIN.
Edit: Logo após enviar minha primeira solução, vi nos comentários que é necessário que qualquer string de entrada possa ser processada. A resposta anterior tinha apenas 95 caracteres, mas não cumpria este requisito:
fonte