Thanks. I just now managed to cut it down by quite a bit, but I think it looks too 'fat':
#!/usr/bin/perl
use strict;
use warnings;
;$" =q%ef%;$_=q~my( $i,$x,$y,$p)=(0 ,0,
0,p op| |5) ;my $r= 2<<
$p;my@i=m ap[(1)x$r ,2],1..$r ;subi{$i[
$x] [$y
]--}i;sub p{((1<$_[ 0]?$y:$x) -=1-($_[0
]&1 )*2 ,i) for -1, 1}s
ubf {my($p,$f)=@_;$ p--;my@m=($f,3- $f,
1-$ f);
my@o=(3-$ f,$f,$f,$f-2)if$p>0;( $_&=3)for
@o, @m; @o& &f(
$p,pop@o) ,@m&&p(po p@m)while (@o||@m)}
f$p ,($ p&1 )*2
;su bb{y,y491 02, b#\ n,;print} map
{bf or@ $_} @i~ ;y~ \n ~~d ;$;
.=1;s&b&b &g;eval;# %$_+28;($ x-={}for@