> В этой и всех предыдущих после фикса с if/o/ версиях -- баг. Проявляется
> только если в левом верхнем углу 1 и первым же шагом мы съедаем 1.
> Фикс такой:
>
> #!perl -naF
> map{/[h-l]/?do{$;[$n]=o;p...@p,$n;$;[$p[$t+=$;[$n+=$$_]!=1]]=~s/o/-/;$;[$n]=x}:do{$k-=...@f,$h--,$n=@;if/x/;$p[/o/]=@;;$l=1;push@;,$...@f}{pop@;;print@
Соптимайзил до такого (-3 символа):
#!perl -naF
map{/[h-l]/?do{$;[$n]=o;p...@p,$n;$;[$p[++$t]]='-'if$;[$n+=$$_]!=1;$;[$n]=x}:do{$k-=...@f,$l=!$h--,$n=@;if/x/;$p[/o/]=@;;push@;,$...@f}{pop@;;print@
Т.е. убрал замену через s///, вытащил прирост головы $n и проверку на
яблоко в пост-условие, сделав обычный инкремент для $t, а присваивание
$l единицы сделал как $l=!$h--.
Врубился наконец, как работает print@ в конце - только при условии
перевода строки после этой конструкции. Тут просто вопрос какой: как
считаем размер кода? Простым размером в байтах, или как-то по-другому?
Просто если байтами - то смысла в print@ с переводом строки нет -
можно добавить точку с запятой.
Извиняюсь, что поднимаю уже мертвого слона, но интерес еще не пропал :)
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org