29.01.2014, 15:38, "Андрей П. Ковбович" <[email protected]>:
Всем привет!
 
Неплохое тестовое задание у Яндекса для разработчиков на Startup Camp.
 
 
Кратко условия задачи:
 
Дан текст, состоящий из нескольких строк произвольной длины. Нужно разбить его на абзацы и юстифицировать, то есть оформить в виде текста шириной в N (20 - 120) символов, выровняв по правой и по левой границе.
 
Правда в примере вывода допущена ошибка: (Яндекс, что за дела?)
в 4ой строке 2го параграфа, строка заканчивается на "velit  esse"
а должно быть "velit  esse cillum"
 
Ну и я не прошел мимо и запостил свой вариант https://gist.github.com/akovbovich/a6b6de7ce540b9424f37
 
Было бы интересно посмотреть и на другие варианты решения.
 
  Однострочник получается корявый, а так:
#! /usr/bin/perl
#

my ( $a1, $a2 ) = ( shift, shift );

sub A {
        my $str = scalar reverse $_[0];
        my ( $from, $to ) = ( " ", "  " );
        while (length $str < $a1) {
                unless ($str =~ s#(\S)$from(\S)#$1$to$2#) {
                        $from .= " "; $to .= " ";
                }
        }
        return scalar reverse $str;
}

local $/;

foreach $a (map { s#\n# #g; s#  +# #g; $_ } split "\\s*\n\n+|\\s*\n(?=[[:upper:]])", <>) {
        if (length $a > $a1-$a2) {
                my @a = grep { m#\S+# } split "(.{2,$a1})( +|\$)", " "x$a2 . $a;
                my $l = pop @a;
                print join "\n", map({ A $_ } @a), $l, "", "";
        }
        else {
                print " "x$a2, $a, "\n\n"
        }
}
  Результаты:
 
  # perl x.pl 40 2 test.txt
  Lorem ipsum

  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.
  # perl -CSI x.pl 48 4 test.utf8
    Не совсем понятно, какое отношение системные
логи имеют к специфичным логам программы.

    Ну  и  кто  сказал  разработчикам  wot,  что
loggerd будет иметь  имено  те  ключи  какие  им
надо, а не как в журнале windows,  где  например
название   программы    в    логе    инсталляций
присутствует только  где-то  в  человекочитаемом
поле description у события.
-- 
wbw, artur
 
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить