Day 4 - Solved

This commit is contained in:
Samuel Ortion 2023-12-04 19:41:29 +01:00
parent c335ec57a6
commit 9646029fea
2 changed files with 75 additions and 0 deletions

41
days/04/part1.pl Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env perl
use warnings;
use strict;
use List::Util;
my $filename = "./data/input.txt";
open(FH, '<', $filename) or die $!;
my $score = 0;
while (<FH>) {
my $card = $_;
my $points = 0;
my @parts = split /:/, $card;
my @lists = split /\|/, $parts[1];
my @winning = split ' ', $lists[0];
my @numbers = split ' ', $lists[1];
my @previous = ();
foreach my $number (@numbers) {
if ($number eq " ") {
print $_;
}
if ((List::Util::any { $_ eq $number } @winning) && (List::Util::all { $_ ne $number } @previous)) {
push(@previous, $number);
if ($points == 0) {
$points = 1;
} else {
$points *= 2;
}
# print $number . ", ";
}
}
#if ($points == 0) {
# print "no points" . "\n";
#} else {
# print $points . " points\n";
#}
$score += $points;
}
print $score . "\n";

34
days/04/part2.py Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
import queue
with open("data/input.txt", "r") as f:
data = f.read()
q = queue.Queue()
def winning_copies(card):
lists = card.split(":")[1].split("|")
winning = lists[0].split()
numbers = lists[1].split()
matching = 0
for number in numbers:
if number in winning:
matching += 1
return matching
cards = data.split("\n")
cards.remove("")
for i, card in enumerate(cards):
q.put((i, card))
counter = 0
while not q.empty():
i, card = q.get()
copies = winning_copies(card)
if copies > 0:
for j in range(1, copies+1):
copy = cards[i+j]
q.put((i+j, copy))
counter += 1
print(counter)