[Moscow.pm] YAPC::Russia Perl Golf 2009
Eugene Ardarov
spleenjack на gmail.com
Вс Май 24 10:29:09 PDT 2009
> В этой и всех предыдущих после фикса с if/o/ версиях -- баг. Проявляется
> только если в левом верхнем углу 1 и первым же шагом мы съедаем 1.
> Фикс такой:
>
> #!perl -naF
> map{/[h-l]/?do{$;[$n]=o;push на p,$n;$;[$p[$t+=$;[$n+=$$_]!=1]]=~s/o/-/;$;[$n]=x}:do{$k-=$j=@F,$h--,$n=@;if/x/;$p[/o/]=@;;$l=1;push@;,$_}}@F}{pop@;;print@
Соптимайзил до такого (-3 символа):
#!perl -naF
map{/[h-l]/?do{$;[$n]=o;push на p,$n;$;[$p[++$t]]='-'if$;[$n+=$$_]!=1;$;[$n]=x}:do{$k-=$j=@F,$l=!$h--,$n=@;if/x/;$p[/o/]=@;;push@;,$_}}@F}{pop@;;print@
Т.е. убрал замену через s///, вытащил прирост головы $n и проверку на
яблоко в пост-условие, сделав обычный инкремент для $t, а присваивание
$l единицы сделал как $l=!$h--.
Врубился наконец, как работает print@ в конце - только при условии
перевода строки после этой конструкции. Тут просто вопрос какой: как
считаем размер кода? Простым размером в байтах, или как-то по-другому?
Просто если байтами - то смысла в print@ с переводом строки нет -
можно добавить точку с запятой.
Извиняюсь, что поднимаю уже мертвого слона, но интерес еще не пропал :)
Подробная информация о списке рассылки Moscow-pm