LINUX.ORG.RU

История изменений

Исправление 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”.

На мой взгляд, неплохо получилось. Конечно есть более короткие и выразительные решения, но они или менее универсальны или побочные эффекты имеют.