Задачка от яндекса
Jan. 29th, 2014 10:07 pmвот тут.
С однострочником не получилось (не влезла юстификация строки),
Строка 17 — читаем файл полностью в память, структура текста такова, что приходится
использовать сложный регексп для деления на абзацы.
Строка 19 — делим текст на абзацы и нормализуем в одну строку с одним пробелон за раз.
Строка 20 — если строка короткая, то печатаем как есть (с отступом), если нет, то
Строка 21 — делим строку на подстроки не более $a1 символов, с границей по слову,
Строка 22 — последняя подстрока всега годна.
Строка 23 — юстифицируем строки кроме последней и печатаем.
Строка 6 — функция юстификации, прямо, как описано в задании, вставляем пробелы справа,
пока строка не вытянется.
Параметры:
1. желаемая ширина текста
2. отступ
Результаты:
С однострочником не получилось (не влезла юстификация строки),
1 #! /usr/bin/perl
2 #
3
4 my ( $a1, $a2 ) = ( shift, shift );
5
6 sub A {
7 my $str = scalar reverse $_[0];
8 my ( $from, $to ) = ( " ", " " );
9 while (length $str < $a1) {
10 unless ($str =~ s#(\S)$from(\S)#$1$to$2#) {
11 $from .= " "; $to .= " ";
12 }
13 }
14 return scalar reverse $str;
15 }
16
17 local $/;
18
19 foreach $a (map { s#\n# #g; s# +# #g; $_ } split "\\s*\n\n+|\\s*\n(?=[[:upper:]])", <>) {
20 if (length $a > $a1-$a2) {
21 my @a = grep { m#\S+# } split "(.{2,$a1})( +|\$)", " "x$a2 . $a;
22 my $l = pop @a;
23 print join "\n", map({ A $_ } @a), $l, "", "";
24 }
25 else {
26 print " "x$a2, $a, "\n\n"
27 }
28 }
Строка 17 — читаем файл полностью в память, структура текста такова, что приходится
использовать сложный регексп для деления на абзацы.
Строка 19 — делим текст на абзацы и нормализуем в одну строку с одним пробелон за раз.
Строка 20 — если строка короткая, то печатаем как есть (с отступом), если нет, то
Строка 21 — делим строку на подстроки не более $a1 символов, с границей по слову,
Строка 22 — последняя подстрока всега годна.
Строка 23 — юстифицируем строки кроме последней и печатаем.
Строка 6 — функция юстификации, прямо, как описано в задании, вставляем пробелы справа,
пока строка не вытянется.
Параметры:
1. желаемая ширина текста
2. отступ
Результаты:
# 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 у события.
#