История изменений
Исправление perl5_guy, (текущая версия) :
Ну и ты всегда можешь играть в гольф, не говоря об этом другим. :3
Вот чего я на прошлой неделе прислал (даже комментарий про eval оставил спецом для таких как ты, Тайгер Вудс):
#!/usr/bin/env perl -p
# echo 1,2,3,4,42,43,45 | ch-1.pl
use 5.028.1;
use List::Util qw(sum);
s{
( \b \d+ )
( ,? \d+ , )+
( \d++ )
(??{
# this block is treated as a pattern
# != will return '' (match) or 1 (fail, because \d++ will swallow all)
# sum( eval $& ) will work too (;
( $3 - $1 + 1 ) * ( $1 + $3 ) / 2 != ( sum( split ',', $& ) || -1 );
})
}
{$1-$3}xg;
Задание было:
Create a script which takes a list of numbers from command line and print the same in the compact form. For example, if you pass “1,2,3,4,9,10,14,15,16” then it should print the compact form like “1-4,9,10,14-16”.
На мой взгляд, неплохо получилось. Конечно есть более короткие и выразительные решения, но они или менее универсальны или побочные эффекты имеют.
Исходная версия perl5_guy, :
Ну и ты всегда можешь играть в гольф, не говоря об этом другим. :3
Вот чего я на прошлой неделе прислал:
#!/usr/bin/env perl -p
# echo 1,2,3,4,42,43,45 | ch-1.pl
use 5.028.1;
use List::Util qw(sum);
s{
( \b \d+ )
( ,? \d+ , )+
( \d++ )
(??{
# this block is treated as a pattern
# != will return '' (match) or 1 (fail, because \d++ will swallow all)
# sum( eval $& ) will work too (;
( $3 - $1 + 1 ) * ( $1 + $3 ) / 2 != ( sum( split ',', $& ) || -1 );
})
}
{$1-$3}xg;
Задание было:
Create a script which takes a list of numbers from command line and print the same in the compact form. For example, if you pass “1,2,3,4,9,10,14,15,16” then it should print the compact form like “1-4,9,10,14-16”.
На мой взгляд, неплохо получилось. Конечно есть более короткие и выразительные решения, но они или менее универсальны или побочные эффекты имеют.