8 my ($ymin, $ymax, $xmin, $xmax);
12 my ($c1n, $c1, $c2min, $c2max) = /\A(.)=(\d+), .=(\d+)\.\.(\d+)/;
14 for my $c2 ($c2min .. $c2max) {
17 $ymin = $c2 if !defined $ymin || $ymin > $c2;
18 $ymax = $c2 if !defined $ymax || $ymax < $c2;
19 $xmin = $c1 if !defined $xmin || $xmin > $c1;
20 $xmax = $c1 if !defined $xmax || $xmax < $c1;
23 $ymin = $c1 if !defined $ymin || $ymin > $c1;
24 $ymax = $c1 if !defined $ymax || $ymax < $c1;
25 $xmin = $c2 if !defined $xmin || $xmin > $c2;
26 $xmax = $c2 if !defined $xmax || $xmax < $c2;
33 say "y=$ymin .. $ymax";
37 return if $iter++ % 1000;
39 for my $y (0 .. $ymax) {
40 for my $x ($xmin .. $xmax) {
41 print $map{$x}{$y} // ' ';
42 $total++ if defined $map{$x}{$y}
43 && $map{$x}{$y} =~ /[~]/;
57 return 0 if $y > $ymax;
65 while ($map{$xp}{$y+1}) {
66 last if $map{$xp+1}{$y};
71 while ($map{$xm}{$y+1}) {
72 last if $map{$xm-1}{$y};
78 if (!$map{$xp}{$y+1} && $y < $ymax) {
80 if (!defined $map{$xp}{$y+1}) {
81 say "calling to $xp, $y+1";
82 $was_change += explore($xp, $y+1);
86 if (!$map{$xm}{$y+1} && $y < $ymax) {
88 if (!defined $map{$xm}{$y+1}) {
89 say "calling to $xm, $y+1";
90 $was_change += explore($xm, $y+1);
93 say "was_change = $was_change";
97 if ($map{$xp+1}{$y} && $map{$xm-1}{$y}) {
98 for my $x0 ($xm .. $xp) {
105 say "$x,$y returning $was_change";