use v5.16;
my %dots;
-
+$; = ',';
while (<>) {
chomp;
- my ($x, $y) = split /,/;
- last if !defined $y;
- $dots{$x}{$y}++;
+ last if !length;
+ $dots{$_}++;
}
-my ($maxx, $maxy);
+my %max;
while (<>) {
chomp;
my ($axis, $val) = /fold along (.)=(\d+)/;
+ $max{$axis} = $val;
- $maxx = $val if $axis eq 'x' && (!$maxx || $maxx > $val);
- $maxy = $val if $axis eq 'y' && (!$maxy || $maxy > $val);
-
- for my $x (keys %dots) {
- for my $y (keys %{$dots{$x}}) {
+ for (keys %dots) {
+ my ($x, $y) = split /,/;
if ($axis eq 'x' && $x > $val) {
- $dots{2*$val - $x}{$y}++;
- delete $dots{$x}{$y};
+ $dots{2*$val - $x,$y}++;
+ delete $dots{$x,$y};
} elsif ($axis eq 'y' && $y > $val) {
- $dots{$x}{2*$val - $y}++;
- delete $dots{$x}{$y};
+ $dots{$x,2*$val - $y}++;
+ delete $dots{$x,$y};
}
- } }
+ }
}
-for my $y (0 .. $maxy) {
- for my $x (0 .. 40) {
- print $dots{$x}{$y} ? '#' : ' ';
+for my $y (0 .. $max{y}) {
+ for my $x (0 .. $max{x}) {
+ print $dots{$x,$y} ? '#' : ' ';
}
print "\n";
}