#!/usr/bin/perl -w # neptune7.pl - Don Yang (uguu.org) # # 2014-03-16 use Compress::Zlib; $q = q' @c = (); if( !defined($s) ) { if( $#ARGV ) { print "$0 \n"; exit 1; } $s = $ARGV[0]; } $r = $s; for($x = 0; $x < 27; $x++) { $c[0][$x] = $c[11][$x] = 5; } for($y = 1; $y < 11; $y++) { $c[$y][0] = $c[$y][26] = 6; for($x = 1; $x < 26; $c[$y][$x++] = 0) {} } for($x = 10; $x < 16; $c[6][$x++] = 5) { $c[5][$x] = 7; } $c[5][16] = 6; $c[6][16] = 4; @b = ([0, 1, 1, 1]); while( scalar @b ) { ($m, $n, $o, $p) = @{pop @b}; next if $c[$p][$o] & 4; $c[$p][$o] |= 4; if( $m - $o ) { $c[$p][$m < $o ? $m : $o] |= 1; } else { $c[$n < $p ? $n : $p][$o] |= 2; } @m = ([-1, 0], [1, 0], [0, -1], [0, 1]); for($i = @m; --$i;) { $j = ($r = ($r >> 1) ^ (0xd0000001 & -($r & 1))) % ($i + 1); next if $i == $j; @m[$i, $j] = @m[$j, $i]; } while( scalar @m ) { ($i, $j) = @{pop @m}; push @b, [$o, $p, $o + $i, $p + $j]; } } $c[10][25] |= 1; $c[1][0] &= ~1; if( defined($u) ) { if( defined($d) ) { if( !$d && ($c[$v - 1][$u] & 2) ) { $v--; } elsif( $d == 1 && ($c[$v][$u] & 2) ) { $v++; } elsif( $d == 2 && $c[$v][$u - 1] & 1 ) { $u--; } } else { if( $c[$v][$u] & 1 ) { $u++; } } } else { $u = $v = 1; } if( $u == 25 && $v == 10 ) { print "\n" x 25, <