Question 4: A Perl solution
#!/usr/bin/perl $posx = 0; $posy = 511; $minx = 0; $maxx = 0; $miny = 0; $maxy = 0; $next = 0; while (<>) { @chars = split //; foreach (@chars) { if ($_ eq 'N') {$posy += 1}; if ($_ eq 'S') {$posy -= 1}; if ($_ eq 'W') {$posx -= 1}; if ($_ eq 'E') {$posx += 1}; if ($_ eq '*') { $image[$posx][$posy] = 1; } else { $image[$posx][$posy] = 0; } $posx > $maxx and $maxx = $posx; $posx < $minx and $minx = $posx; $posy > $maxy and $maxy = $posy; $posy < $miny and $miny = $posy; } } $maxx++; $maxy++; print "P1 $maxx $maxy\n"; for ($i=0; $i<$maxx; $i++) { for ($j=0; $j<$maxy; $j++) { print $image[$i][$j]; } print "\n"; }