<div>29.01.2014, 15:38, "Андрей П. Ковбович" <akovbovich@gmail.com>:</div><blockquote type="cite"><div>Всем привет!<div> </div><div>Неплохое тестовое задание у Яндекса для разработчиков на Startup Camp.</div><div> </div><div><a href="http://tech.yandex.ru/education/tolstoycamp/march2014/register/?answer_choices_1907=2850">http://tech.yandex.ru/education/tolstoycamp/march2014/register/?answer_choices_1907=2850</a></div><div> </div><div>Кратко условия задачи:</div><div> </div><div><div style="color:#000000;font-family:Arial,Helvetica,sans-serif;font-size:15px;">Дан текст, состоящий из нескольких строк произвольной длины. Нужно разбить его на абзацы и юстифицировать, то есть оформить в виде текста шириной в N (20 - 120) символов, выровняв по правой и по левой границе.</div></div><div> </div><div>Правда в примере вывода допущена ошибка: (Яндекс, что за дела?)</div><div>в 4ой строке 2го параграфа, строка заканчивается на "<span style="color:#666666;font-family:monospace;font-size:13px;">velit  esse"</span></div><div>а должно быть "<span style="color:#666666;font-family:monospace;font-size:13px;">velit  esse </span><span style="font-size:13px;color:#666666;font-family:monospace;">cillum</span>"</div><div> </div><div>Ну и я не прошел мимо и запостил свой вариант <a href="https://gist.github.com/akovbovich/a6b6de7ce540b9424f37">https://gist.github.com/akovbovich/a6b6de7ce540b9424f37</a></div><div> </div><div>Было бы интересно посмотреть и на другие варианты решения.</div></div></blockquote><div> </div><div>  Однострочник получается корявый, а так:</div><div>#! /usr/bin/perl<br />#<br /><br />my ( $a1, $a2 ) = ( shift, shift );<br /><br />sub A {<br />        my $str = scalar reverse $_[0];<br />        my ( $from, $to ) = ( " ", "  " );<br />        while (length $str < $a1) {<br />                unless ($str =~ s#(\S)$from(\S)#$1$to$2#) {<br />                        $from .= " "; $to .= " ";<br />                }<br />        }<br />        return scalar reverse $str;<br />}<br /><br />local $/;<br /><br />foreach $a (map { s#\n# #g; s#  +# #g; $_ } split "\\s*\n\n+|\\s*\n(?=[[:upper:]])", <>) {<br />        if (length $a > $a1-$a2) {<br />                my @a = grep { m#\S+# } split "(.{2,$a1})( +|\$)", " "x$a2 . $a;<br />                my $l = pop @a;<br />                print join "\n", map({ A $_ } @a), $l, "", "";<br />        }<br />        else {<br />                print " "x$a2, $a, "\n\n"<br />        }<br />}</div><div>  Результаты:</div><div> </div><div>  # perl x.pl 40 2 test.txt</div><div>  Lorem ipsum<br /><br />  Lorem   ipsum    dolor    sit    amet,<br />consectetur  adipisicing  elit,  sed  do<br />eiusmod tempor incididunt ut  labore  et<br />dolore magna aliqua. Ut  enim  ad  minim<br />veniam,   quis   nostrud    exercitation<br />ullamco laboris nisi ut  aliquip  ex  ea<br />commodo consequat. Duis aute irure dolor<br />in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur.<br /><br />  Excepteur sint occaecat cupidatat  non<br />proident,  sunt  in  culpa  qui  officia<br />deserunt mollit anim id est laborum.</div><div>  # perl -CSI x.pl 48 4 test.utf8</div><div>    Не совсем понятно, какое отношение системные<br />логи имеют к специфичным логам программы.<br /><br />    Ну  и  кто  сказал  разработчикам  wot,  что<br />loggerd будет иметь  имено  те  ключи  какие  им<br />надо, а не как в журнале windows,  где  например<br />название   программы    в    логе    инсталляций<br />присутствует только  где-то  в  человекочитаемом<br />поле description у события.</div><div>-- </div><div>wbw, artur</div><div> </div>