Dado este texto
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. Excepcional sint occasionecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
escribe el programa más corto que produce el mismo texto justificado con 80 caracteres. El texto anterior debe verse exactamente como:
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.
Reglas:
- las palabras no deben cortarse
- se deben agregar espacios adicionales
- despues de un punto.
- después de una coma
- después de la palabra más corta (de izquierda a derecha)
- el resultado no debe tener más de 2 espacios consecutivos
- La última línea no está justificada.
- las líneas no deben comenzar con coma o punto.
- proporcionar la salida de su programa
Ganador: El programa más corto.
nota: la cadena de entrada se proporciona en STDIN como una línea (sin avance de línea o retorno de carro)
actualizar:
La cadena de entrada puede ser cualquier texto con una longitud de palabra razonable (es decir, no más de 20 ~ 25 caracteres) como:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, sempre congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis sempre. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Congüe pellenteque. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo en pede. Praesent blandit odio eu enim. Pellenteque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis en faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, en tempus sapien eros vitae ligula. Pellenteque rhoncus nunc et augue. Identificación de enteros felis. Curabitur aliquet pellentesque diam. Entero quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla y Sapien. Tortor entero tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, y tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim en fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem en sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla en justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, y ultricies lacus lorem varius purus. Curabitur eu amet.
fuente
Respuestas:
Perl, 94 caracteres
Corre con
perl -nM5.01
. (Eln
está incluido en el recuento de caracteres).El código anterior es el más corto que pude hacer que podría manejar cualquier bola curva que le arrojé (como palabras de una letra al comienzo de una línea, líneas de entrada de exactamente 80 caracteres de largo, etc.) exactamente de acuerdo con las especificaciones:
(Con disculpas a Gareth por usar su comentario como entrada de prueba adicional).
La siguiente versión de 75 caracteres funciona lo suficientemente bien como para producir la salida de muestra de la entrada de muestra, pero puede fallar para otras entradas. Además, deja un espacio extra al final de cada línea de salida.
Ambas versiones se repetirán para siempre si encuentran datos que no pueden justificar correctamente. (En la versión más larga, reemplazar
until
conuntil$i>80||
arreglaría eso a costa de siete caracteres adicionales).fuente
Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.*?\.|.*?,|(.*? )??\S{ <-- HERE 32767}) \b/
el segundo texto.$i>80
cheque, expande la línea 11 apede pellentesque fermentum. Maecenas adipiscing ante non diam sodales
, que tiene solo 78 caracteres de largo, y luego se da por vencido ya que cada palabra (excepto la última) es seguida por dos espacios.Ruby, 146 caracteres.
Imprime exactamente la salida deseada (ver más abajo) si el texto dado se alimenta a STDIN.
Editar: Justo después de enviar mi primera solución, vi en los comentarios que se requiere que se pueda procesar cualquier cadena de entrada. La respuesta anterior tenía solo 95 caracteres, pero no cumplía este requisito:
fuente