From: Jan "Yenya" Kasprzak Date: Wed, 14 Dec 2022 07:05:00 +0000 (+0100) Subject: Day 14: pretty straightforward X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=aoc.git;a=commitdiff_plain;h=0077fc29c954b97d03f9d3799bde41e81a15b79a Day 14: pretty straightforward --- diff --git a/2022/27.pl b/2022/27.pl new file mode 100755 index 0000000..425f1e6 --- /dev/null +++ b/2022/27.pl @@ -0,0 +1,55 @@ +#!/usr/bin/perl -w + +use v5.36; +use strict; +use experimental 'multidimensional'; + +my @map; + +sub sgn($x) { $x > 0 ? 1 : $x < 0 ? -1 : 0 }; + +my $maxy; +while (<>) { + my ($x0, $y0); + my @list = /(\d+)/g; + + for my ($x, $y) (@list) { + if (!defined $x0) { + $x0 = $x; $y0 = $y; + $map[$y][$x] = 1; + } else { + while ($x0 != $x || $y0 != $y) { + $x0 += sgn($x-$x0); + $y0 += sgn($y-$y0); + $map[$y0][$x0] = 1; + $maxy = $y if !defined $maxy || $y > $maxy; + } + } + } +} + +my $units = 0; +while (1) { + my ($sx, $sy) = (500, 0); + + while ($sy <= $maxy) { + say "at $sx $sy"; + if (!$map[$sy+1][$sx]) { + $sy++; + } elsif (!$map[$sy+1][$sx-1]) { + $sx--; + $sy++; + } elsif (!$map[$sy+1][$sx+1]) { + $sx++; + $sy++; + } else { + $map[$sy][$sx] = 2; + last; + } + } + say "stopped at $sx, $sy"; + last if $sy > $maxy; + $units++; +} + +say $units; diff --git a/2022/28.pl b/2022/28.pl new file mode 100755 index 0000000..4af8d29 --- /dev/null +++ b/2022/28.pl @@ -0,0 +1,58 @@ +#!/usr/bin/perl -w + +use v5.36; +use strict; +use experimental 'multidimensional'; + +my @map; + +sub sgn($x) { $x > 0 ? 1 : $x < 0 ? -1 : 0 }; + +my $maxy; +while (<>) { + my ($x0, $y0); + my @list = /(\d+)/g; + + for my ($x, $y) (@list) { + if (!defined $x0) { + $x0 = $x; $y0 = $y; + $map[$y][$x] = 1; + } else { + while ($x0 != $x || $y0 != $y) { + $x0 += sgn($x-$x0); + $y0 += sgn($y-$y0); + $map[$y0][$x0] = 1; + $maxy = $y if !defined $maxy || $y > $maxy; + } + } + } +} + +my $units = 0; +UNIT: +while (1) { + my ($sx, $sy) = (500, 0); + + while (1) { + if ($sy >= $maxy + 1) { + $map[$sy][$sx] = 2; + last; + } elsif (!$map[$sy+1][$sx]) { + $sy++; + } elsif (!$map[$sy+1][$sx-1]) { + $sx--; + $sy++; + } elsif (!$map[$sy+1][$sx+1]) { + $sx++; + $sy++; + } else { + last UNIT if $map[$sy][$sx]; + $map[$sy][$sx] = 2; + last; + } + } + $units++; + last if $sy == 0; +} + +say $units;