#!/usr/bin/perl -w # neptune9_generator.pl - Don Yang (uguu.org) # # 2014-03-16 use strict; use Compress::Zlib; my $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,<; close $file; # Output bytes $encoded =~ s/\s//gs; my $c = 0; for(my $i = 0; $i < length($template); $i++) { my $t = substr($template, $i, 1); if( $t =~ /[\sxoq]/ ) { print $t; } else { if( $c >= length($encoded) ) { my $extra = 0; for(; $i < length($template); $i++) { unless( substr($template, $i, 1) =~ /[^\sxoq]/ ) { $extra++; } } die "Template too long, excess = $extra\n"; } print substr($encoded, $c, 1); $c++; } } if( $c != length($encoded) ) { my $short = length($encoded) - $c; die "Template too short, difference = $short\n"; }