fork(1) download
  1. <?php
  2.  
  3. $input = <<<END
  4. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac sapien nulla. Sed nec lorem dui. Sed fringilla tortor sit amet diam semper tempus. Duis auctor lectus non facilisis suscipit. Morbi pulvinar porta luctus. Pellentesque sit amet felis eu odio gravida fringilla vel non sem. Curabitur at neque pellentesque, consequat ligula quis, eleifend lacus.
  5.  
  6. Etiam semper et sapien ac accumsan. Nam at mauris varius, maximus metus pellentesque, semper risus. Sed pellentesque pretium rhoncus. Cras maximus diam imperdiet, cursus erat non, faucibus ex. Nunc nec lacinia eros. Cras commodo nulla at felis suscipit egestas. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam maximus, odio quis efficitur tincidunt, massa ex imperdiet dui, in finibus nulla nisl at est. Praesent gravida vel lacus eget rhoncus. Vestibulum sed velit eros. Proin nec ornare mi.
  7.  
  8. Pellentesque sollicitudin, est in fringilla condimentum, mauris justo pharetra magna, et lobortis diam nisl sit amet nunc. Nullam mollis facilisis neque. Aenean pharetra metus non mauris pellentesque dictum. Sed quis leo ac arcu pharetra condimentum. Aliquam vitae pretium orci, quis accumsan mi. Nunc semper orci consequat pharetra sollicitudin. Maecenas ipsum ante, lacinia a consectetur a, pretium non sem. In id neque ut augue tristique lacinia. Duis accumsan, dui eu rutrum egestas, velit purus malesuada elit, id iaculis enim elit ac justo. Vivamus sed neque tincidunt, rhoncus leo nec, tincidunt ligula.
  9.  
  10. Nunc hendrerit, lectus eu aliquam varius, diam tellus rhoncus magna, at vestibulum odio purus sed ex. Curabitur dolor sapien, vestibulum nec porta pulvinar, congue non massa. Vivamus at venenatis nunc. Aliquam id neque mauris. Maecenas id nisl elementum, dictum mauris sed, consectetur urna. Maecenas lobortis odio aliquet justo ullamcorper lacinia. In volutpat erat ac consectetur luctus. Integer gravida nisl eget diam condimentum feugiat sit amet sit amet lectus. Sed ac laoreet dui, non fermentum ligula. Phasellus mauris magna, tincidunt sed sem mollis, tempus pretium dui. Donec ac volutpat turpis, a vestibulum ante. Mauris eget pretium nibh. Vestibulum eleifend ultrices orci, ut dignissim urna efficitur id. Suspendisse sit amet justo ac est tincidunt mattis sed vel metus. Duis vitae justo in purus tristique dignissim.
  11.  
  12. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget tellus imperdiet, ullamcorper tellus eget, tempus magna. Vivamus risus massa, pellentesque commodo sem nec, vehicula ultrices urna. Vivamus semper, erat at ullamcorper ultrices, nibh ante faucibus dui, et congue enim ligula vel nunc. Donec pellentesque, magna pulvinar euismod lacinia, mi lacus placerat eros, eu lobortis mi justo eget leo. Morbi eu accumsan odio, vel hendrerit risus. Fusce et leo vel erat congue lacinia. Etiam vitae pulvinar metus. Curabitur mollis quam dui. Quisque erat felis, fermentum sit amet purus vel, suscipit pulvinar ligula. Ut in ornare metus. Aenean aliquet arcu nec ex pharetra, non faucibus tellus rutrum.
  13. END;
  14.  
  15. $input = preg_replace('/\s+/', ' ', $input);
  16. $lines = explode("\n", wordwrap($input));
  17. echo implode("\n", array_map('justify', $lines));
  18.  
  19. function justify($text, $to = 80) {
  20. $length = strlen($text);
  21. $remaining = $to - $length;
  22.  
  23. if ($remaining <= 0) {
  24. return $text;
  25. }
  26.  
  27. $words = explode(' ', $text);
  28. $text = $previous = array_shift($words);
  29. $repulsion = array_map(
  30. function ($word) use (&$previous) {
  31. $repulsion = strlen($word) + strlen($previous);
  32. $previous = $word;
  33. return $repulsion;
  34. },
  35. $words
  36. );
  37. arsort($repulsion);
  38. $glue = array_fill(0, count($words), ' ');
  39.  
  40. while ($remaining--) {
  41. $glue[key($repulsion)] .= ' ';
  42. if (!next($repulsion)) {
  43. reset($repulsion);
  44. }
  45. }
  46.  
  47. for($i = 0; $i < count($words); ++$i) {
  48. $text .= $glue[$i] . $words[$i];
  49. }
  50.  
  51. return $text;
  52. }
  53.  
  54.  
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
Lorem ipsum dolor sit amet,  consectetur  adipiscing  elit.  Praesent  ac sapien
nulla. Sed nec lorem  dui. Sed  fringilla  tortor sit amet diam  semper  tempus.
Duis  auctor  lectus  non  facilisis  suscipit.  Morbi  pulvinar  porta  luctus.
Pellentesque   sit  amet  felis  eu  odio   gravida   fringilla   vel  non  sem.
Curabitur  at  neque  pellentesque,   consequat  ligula  quis,  eleifend  lacus.
Etiam  semper  et  sapien ac  accumsan.  Nam at  mauris  varius,  maximus  metus
pellentesque,  semper  risus. Sed  pellentesque  pretium  rhoncus.  Cras maximus
diam  imperdiet,  cursus  erat non,  faucibus  ex. Nunc nec  lacinia  eros. Cras
commodo  nulla  at  felis  suscipit   egestas.   Pellentesque   habitant   morbi
tristique  senectus  et netus et  malesuada  fames ac  turpis  egestas.  Aliquam
maximus,  odio quis  efficitur  tincidunt,  massa ex  imperdiet  dui, in finibus
nulla nisl at est.  Praesent  gravida  vel lacus eget  rhoncus.  Vestibulum  sed
velit   eros.   Proin  nec  ornare  mi.   Pellentesque   sollicitudin,   est  in
fringilla  condimentum,  mauris  justo  pharetra  magna, et  lobortis  diam nisl
sit amet  nunc.  Nullam  mollis  facilisis  neque.  Aenean  pharetra  metus  non
mauris  pellentesque  dictum.  Sed  quis  leo  ac  arcu  pharetra   condimentum.
Aliquam  vitae  pretium  orci, quis  accumsan  mi. Nunc  semper  orci  consequat
pharetra   sollicitudin.   Maecenas   ipsum  ante,  lacinia  a  consectetur   a,
pretium non sem. In id neque ut augue  tristique  lacinia.  Duis  accumsan,  dui
eu  rutrum  egestas,  velit  purus  malesuada  elit,  id  iaculis  enim  elit ac
justo.  Vivamus sed neque  tincidunt,  rhoncus leo nec,  tincidunt  ligula. Nunc
hendrerit,   lectus  eu  aliquam   varius,   diam  tellus   rhoncus   magna,  at
vestibulum  odio purus sed ex.  Curabitur  dolor  sapien,  vestibulum  nec porta
pulvinar,  congue  non  massa.  Vivamus  at  venenatis  nunc.  Aliquam  id neque
mauris.  Maecenas  id nisl  elementum,  dictum  mauris  sed,  consectetur  urna.
Maecenas  lobortis  odio aliquet  justo  ullamcorper  lacinia. In volutpat  erat
ac  consectetur  luctus.  Integer  gravida  nisl eget diam  condimentum  feugiat
sit  amet  sit  amet  lectus.  Sed  ac  laoreet  dui,  non   fermentum   ligula.
Phasellus  mauris  magna,  tincidunt sed sem mollis,  tempus  pretium dui. Donec
ac volutpat  turpis, a vestibulum  ante. Mauris eget  pretium  nibh.  Vestibulum
eleifend  ultrices  orci,  ut  dignissim  urna  efficitur  id.  Suspendisse  sit
amet justo ac est  tincidunt  mattis sed vel metus.  Duis  vitae  justo in purus
tristique  dignissim.  Class  aptent  taciti  sociosqu  ad litora  torquent  per
conubia   nostra,  per   inceptos   himenaeos.   Cras  eget  tellus   imperdiet,
ullamcorper  tellus  eget,  tempus  magna.  Vivamus  risus  massa,  pellentesque
commodo   sem  nec,   vehicula   ultrices   urna.   Vivamus   semper,   erat  at
ullamcorper  ultrices,  nibh  ante  faucibus  dui, et  congue  enim  ligula  vel
nunc. Donec  pellentesque,  magna  pulvinar  euismod  lacinia, mi lacus placerat
eros, eu  lobortis  mi justo eget leo.  Morbi eu  accumsan  odio, vel  hendrerit
risus.  Fusce et leo vel  erat  congue  lacinia.  Etiam  vitae  pulvinar  metus.
Curabitur  mollis  quam  dui.  Quisque  erat  felis,  fermentum  sit amet  purus
vel,  suscipit  pulvinar  ligula. Ut in ornare  metus.  Aenean  aliquet arcu nec
ex         pharetra,         non         faucibus         tellus         rutrum.