commit f97b0e27d2a63bb7bd1089bc2b0d04edb13dab6a
parent 6ee41c4801c2f827490a4bc6f0a5e4ebc87ef825
Author: Samir Parikh <noreply@samirparikh.com>
Date: Mon, 6 Dec 2021 13:31:05 +0000
update day04-1.pl
Diffstat:
M | day04-1.pl | | | 35 | +++++++++++++++++++++++++---------- |
1 file changed, 25 insertions(+), 10 deletions(-)
diff --git a/day04-1.pl b/day04-1.pl
@@ -56,18 +56,11 @@ sub play_turn {
my ($numbers, $boards, $state) = @_;
my $number = shift(@$numbers);
say "playing number $number";
- #say $boards->[1][2][2];
- #p($boards);
- #print Dumper($boards);
foreach my $board (@$boards) { # $board is ref to board array
foreach my $row (@$board) { # $row is ref to board row array
foreach my $column (@$row) { # $column is element of row array
- #print "$boards\t$board\t$row\t";
if ($column == $number) {
$state->{$board}{$row}{$column} = 1;
- #say "-> $column <-";
- #} else {
- #say "$column";
}
}
}
@@ -90,6 +83,26 @@ sub print_board_state {
}
}
+sub check_for_winner {
+ my ($boards, $state) = @_;
+ #my $found_winner = 0;
+ # check for row wins
+ foreach my $board (@$boards) { # $board is ref to board array
+ foreach my $row (@$board) { # $row is ref to board row array
+ my $total = 0;
+ foreach my $column (@$row) {
+ $total += $state->{$board}{$row}{$column};
+ }
+ if ($total == 5) {
+ say "found winner";
+ #$found_winner = 1;
+ return 1;
+ }
+ }
+ }
+ return 0; # no winner found
+}
+
# Advent of Code 2021 Day 04 Part 1
# initialize game variables
my $filehandle = get_filehandle();
@@ -97,12 +110,14 @@ my @numbers = get_numbers($filehandle);
my @boards = initialize_boards($filehandle);
my %state = initialize_state(\@boards);
-my $turn = 1;
+my $turn = 0;
+my $winner_found = 0;
-while ($turn < 12) {
+until ($winner_found) {
+ $turn++;
say "turn: $turn";
play_turn(\@numbers, \@boards, \%state);
- $turn++;
+ $winner_found = check_for_winner(\@boards, \%state);
}
print_board_state(\@boards, \%state);