]> www.fi.muni.cz Git - aoc.git/blob - 2022/41.pl
Day 21: first ugly eval-based working solution
[aoc.git] / 2022 / 41.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5
6 my %names;
7 my %vals;
8 while (<>) {
9         chomp;
10         my ($name, $rest) = split /:/;
11         $names{$name} = $rest;
12         $vals{$name} = 0+$rest if $rest =~ /\A\s*\d+\z/;
13 }
14
15 while (!defined $vals{root}) {
16         for my $n (keys %names) {
17                 next if defined $vals{$n};
18                 my $e = $names{$n};
19                 my $d = 1;
20                 for my $v (keys %vals) {
21                         $e =~ s/$v/$vals{$v}/g;
22                 }
23                 next if $e =~ /[a-z]/;
24                 say "eval $e";
25                 eval "\$vals{$n} = $e";
26                 say "set \$vals{$n} to $vals{$n}" unless $@;
27         }
28         say " ================= ";
29 }
30
31 say $vals{root};