or download this
$_=q`I=0;while(<>){chomp;next()if((/^\s*#/)or(!$_));_z()unless@o;my@p=
+/(\S)/g;for(J=0;$j<9;$j++){_y($i,$j,$p[$j])if($p[$
j]=~/\d/)}if(++$i>8){$i=0;$p=0;while(!_w()){if($p==$c){$p=0;_q()}$p=$c
+}_x();undef(@o)}}Zfor(I=0;$i<9;$i++){for(J=0;$j<9;
...
]<10);E=$o[$f][$d];$e=substr($e,int(rand(length($e))),1);_y($f,$d,$e);
+last};}Xfor(my $i=0;$i<9;$i++){print(join(chr(32),
@{$o[$i]}),"\n");;}print("\n");};`;s/\s//gx;s/(?<!\\)([Q-Z])/sub _\l$1
+\{/gx;s/([A-J])/my \$\l$1/gx;s/formy/for my/g;eval