[Moscow.pm] YAPC::Russia Perl Golf 2009

Andrey jerom+moscow-pm на bibirevo.net
Чт Май 21 10:15:43 PDT 2009


Eugene Ardarov пишет:
> Ох как оказывается еще можно было сократить!
> Вот это место
>     push на y,$_;$n=$#y if/x/;$p[1]=$#y if/o/
> можно заменить на
>     $n=@y if/x/;$p[1]=@y if/o/;push на y,$_
> (еще -2 символа).
>
> Плюс:
>     }}@F;$h=-1;$l=1;$k=-($j=@F)
> заменить на
>     }$h=-1;$l=1}@F;$k=-($j=@F)
> (еще -1 символ).
>
> А каким образом вот это работает в конце?
>     }{pop на y;print на y
> Просто нет возможности сейчас читать доку.
>
>   

Ещё 1 символ выгадываем, заменив @y на @; и опустив ; в конце:

perl -MO=Deparse -naF -e 
'map{/[h-l]/?do{$;[$n]=o;push на p,$n;$;[$p[$t+=$;[$n+=$$_]!=1]]="-";$;[$n]=x}:do{$n=@; 
if/x/;$p[1]=@; if/o/;push@;,$_};$h=-1;$l=1}@F;$k=-($j=@F)}{pop@;;print@'
LINE: while (defined($_ = <ARGV>)) {
    our(@F) = split(//, $_, 0);
    map {/[h-l]/ ? do {
        $;[$n] = 'o';
        push @p, $n;
        $;[$p[$t += $;[$n += $$_] != 1]] = '-';
        $;[$n] = 'x'
    } : do {
        $n = @; if /x/;
        $p[1] = @; if /o/;
        push @;, $_
    };
    $h = -1;
    $l = 1;} @F;
    $k = -($j = @F);
}
{
    pop @;
    print @;
}
-e syntax OK



Подробная информация о списке рассылки Moscow-pm