From: Jan "Yenya" Kasprzak Date: Wed, 10 Dec 2025 18:09:53 +0000 (+0100) Subject: Day 10: simplex method X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=55ee1c1053a65cb2d991ba4596d332bab10a84df;p=aoc.git Day 10: simplex method --- diff --git a/2025/19.pl b/2025/19.pl new file mode 100755 index 0000000..8c28c03 --- /dev/null +++ b/2025/19.pl @@ -0,0 +1,32 @@ +#!/usr/bin/perl -w + +use v5.42; + +my $sum; + +while (<>) { + /(?<=\[).*?(?=\])/; + my $state = $&; + my @btns = map { [ /\d+/g ] } /\(.*?\)/g; + + my @q = [ $state, 0, -1 ]; + while (my $f = shift @q) { + my ($state, $n, $b, @rest) = @$f; + if ($state !~ /#/) { + $sum += $n; + last; + } + $n++; + for my $btn ($b+1 .. $#btns) { + my $b = $btns[$btn]; + my $nstate = $state; + for my $i (@$b) { + substr($nstate, $i, 1) =~ y/#./.#/; + } + push @q, [ $nstate, $n, $btn, @rest, $btn ]; + } + } + +} + +say $sum; diff --git a/2025/20.pl b/2025/20.pl new file mode 100755 index 0000000..11fb8be --- /dev/null +++ b/2025/20.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl -w + +# Run as +# ./20.pl input.txt > x.py && python3 x.py | perl -lnE '$sum += $_ }{ say $sum' + +use v5.42; +use List::Util qw(max); + +say "import z3"; +say "sum = 0"; + +while (<>) { + /(?<=\{).*?(?=\})/; + my @state = split /,/, $&; + my @btns = map { [ /\d+/g ] } /\(.*?\)/g; + + my $m; + my $max = max @state; + push @$m, [ (0) x @btns, $_ ] for @state; + for my ($i, $btn) (indexed @btns) { + $m->[$_][$i] = 1 for @$btn; + } + say "s = z3.Optimize()"; + say join(', ', map { "x$_" } 0 .. $#btns), " = z3.Ints('", + join(' ', map { "x$_" } 0 .. $#btns), "')"; + say "s.add(x$_ >= 0)" for 0 .. $#btns; + for my $row (@$m) { + say "s.add(", join(' + ', map { "x$_" } grep { $row->[$_] } 0 .. $#$row - 1), ' == ', $row->[-1], ")" + } + say "s.minimize(", join(' + ', map { "x$_" } 0 .. $#btns), ")"; + say "s.check()"; + say "m = s.model()"; + say "val = m.eval(", join(' + ', map { "x$_" } 0 .. $#btns), ")"; + say "print(val)"; + say "sum = sum + val"; + say ""; +} +say "print(sum)"