]> www.fi.muni.cz Git - aoc.git/blob - 2015/13.pl
Day 25: examining the input
[aoc.git] / 2015 / 13.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4 use strict;
5 use feature 'bitwise';
6
7 $/ = undef;
8 $_ = <> . "\n";
9
10 while (1) {
11         my ($wire, $val);
12         if (s/^(\d+) -> (\w+)\n//m) {
13                 ($wire, $val) = ($2, $1);
14         } elsif (s/^NOT (\d+) -> (\w+)\n//m) {
15                 ($wire, $val) = ($2, $1 ^ 0xFFFF);
16         } elsif (s/^(\d+) AND (\d+) -> (\w+)\n//m) {
17                 ($wire, $val) = ($3, $1 & $2);
18         } elsif (s/^(\d+) OR (\d+) -> (\w+)\n//m) {
19                 ($wire, $val) = ($3, $1 | $2);
20         } elsif (s/^(\d+) RSHIFT (\d+) -> (\w+)\n//m) {
21                 ($wire, $val) = ($3, $1 >> $2);
22         } elsif (s/^(\d+) LSHIFT (\d+) -> (\w+)\n//m) {
23                 ($wire, $val) = ($3, ($1 << $2) & 0xFFFF);
24         }
25         last if !$wire;
26         if ($wire eq 'a') {
27                 say "a=$val";
28                 last;
29         }
30         # say "$wire => $val";
31         last if $val !~ /\A\d+\z/;
32         $val &= 0xFFFF;
33         s/\b$wire\b/$val/g;
34         # say "$_\n\n";
35 }