[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