diff options
author | Irene Knapp <ireneista@gmail.com> | 2020-12-17 21:56:07 -0800 |
---|---|---|
committer | Irene Knapp <ireneista@gmail.com> | 2020-12-17 21:56:07 -0800 |
commit | 781e65e5a4444800982da71d97cb6b05d7dca17e (patch) | |
tree | c9919f20c0153409b0d344f33e5a4791177387da | |
parent | 9acefe571def801d63282620cb31833a321bc551 (diff) |
18
-rw-r--r-- | 18/Cargo.toml | 16 | ||||
-rw-r--r-- | 18/build.rs | 5 | ||||
-rw-r--r-- | 18/input | 375 | ||||
-rw-r--r-- | 18/input.small | 1 | ||||
-rw-r--r-- | 18/src/expression.lalrpop | 54 | ||||
-rw-r--r-- | 18/src/main.rs | 39 | ||||
-rw-r--r-- | 18/tests/main.rs | 14 | ||||
-rw-r--r-- | Cargo.lock | 461 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | lib/Cargo.toml | 1 | ||||
-rw-r--r-- | lib/src/error.rs | 11 |
11 files changed, 978 insertions, 0 deletions
diff --git a/18/Cargo.toml b/18/Cargo.toml new file mode 100644 index 0000000..556dff0 --- /dev/null +++ b/18/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "advent_18" +version = "0.1.0" +authors = ["Irene Knapp <ireneista@gmail.com>"] +edition = "2018" + +[dependencies] +advent_lib = { path = "../lib" } +lalrpop-util = "0.19" + +[dev-dependencies] +assert_cmd = "0.10" +lalrpop = { version = "0.19", features = [ "lexer" ] } + +[build-dependencies] +lalrpop = { version = "0.19", features = [ "lexer" ] } diff --git a/18/build.rs b/18/build.rs new file mode 100644 index 0000000..23c7d3f --- /dev/null +++ b/18/build.rs @@ -0,0 +1,5 @@ +extern crate lalrpop; + +fn main() { + lalrpop::process_root().unwrap(); +} diff --git a/18/input b/18/input new file mode 100644 index 0000000..401bc01 --- /dev/null +++ b/18/input @@ -0,0 +1,375 @@ +9 * 7 + ((6 + 9 * 2 + 6 + 7 + 5) * (5 + 9 + 7) * 6) * (4 + 8) + 5 * 8 +3 * (4 * 9 + 8 + 4 * 4 + 7) + 7 * (8 * 9) +4 * ((6 * 5 * 9) + 2) + 9 * 4 +((4 * 6 * 2 * 9) + 7 * 4) + 4 * 6 + 5 * 6 + 6 +9 * 8 * ((5 + 7 * 8 * 2) * 6) + 3 +6 + (3 * 7) * 3 + (9 * (6 * 6 + 5 + 9 + 9) * 7 * 9 + (4 * 8) + 8) +6 * 4 + 2 + 8 + 7 +(5 * (9 * 8) * 6) + 2 + 8 * 5 * 4 * 3 +(3 + 2 * 2 * 8 * 5) + (7 + 6 * 4 * 8) * (6 * 9 * 5 * 9) +(4 * 2 + (9 + 2 * 4) * 5 + 9) + (9 * 3) +7 * 6 + 6 +4 + (8 + (5 * 9) + 9 * 8) +9 + 8 + 5 + 4 * 2 * 9 +8 * (5 + (8 + 2) * 9 + 4 + 7) + 8 +2 * 2 + 9 * 6 + (2 * (8 * 2 + 3 * 8) * (9 + 7 * 4 * 8 * 2)) * 2 +4 + (5 * 6 + 7 * 5) + 4 +4 + (9 * 4) + 4 * (4 + 7 + 9 * 4) * 3 +(4 * (2 + 2) * 9 * 8 * 3) + 9 * 3 +6 * (5 * 3 + 4 + (4 + 4 + 5 * 7 * 4)) * 4 +8 * (6 * 9 + 3 * (6 * 6 * 2) + 4 + 9) * (4 * 8 * (9 * 4 + 8 + 7 * 7) * 5) + 4 + 7 +(7 * 3 * 2) + 3 + 8 * (5 + 7 * 3 + 4 * 2 * (8 + 6 * 4)) * 3 * (8 + 9 + 7 * 3 * 3) +8 * 7 + 4 + 7 * (3 * 3 + 7 + (3 * 5 * 8 + 8 + 3 * 4)) +(7 * (4 * 3 + 8 * 7 * 3 + 9) * 4 + (4 * 7)) * 8 + ((2 * 9) + 6 * 7 + (9 + 3) * 5 + 2) * 8 + 6 +6 + 8 * (7 * (5 + 3 + 8 * 5 + 2 * 7) * 4 + 2 + 7 + 7) +(6 * 3 * 7) * 7 * (7 * 7 * 9) + 8 +((8 * 7 + 2 + 3) * 4) + 4 * 7 * 6 + 5 +2 * 5 * 4 * 9 + ((2 * 4 * 4) + 4 * (5 + 4)) +((3 + 5 * 5) + (5 * 9 + 5)) * 3 +8 * (3 * (9 * 3 * 9) + 3 + 5) * 2 +4 * (8 * 9 * 7 * 2 + 3) + ((9 * 8) * 9) * (4 * 5 + 6 * 8) * 3 +(5 + 2 * 9 + 5 + 8) + 9 + 6 * 2 +(5 * 9 + 9 + 3 + (5 + 9 + 4 + 3)) + 8 * 7 +(7 + 7 * 2 + 8) * (2 * 4 + 3 * 4) + 5 * 4 +3 + (4 + 6) + 8 * 5 +(6 + 5 * (8 + 2 + 6) * (2 + 9)) * ((3 + 2 * 8 + 4 * 9 * 3) * 6 * 9) +9 + (5 * (2 + 2 * 2) + 5 * 8) * 7 + 3 + 9 +2 + 8 * ((2 + 2) * 2 + 4 * 3 + 3) * 5 +(2 + 5 * 3 * (4 * 3 + 8 + 6) + 6) + ((7 + 9) + 4 * 3) + 6 * 9 +(8 + 7 * (8 + 3 * 7 + 4 + 7) + (5 + 6)) + 4 * (9 * 2 + (8 + 7 * 4 * 6 + 3) + 7 + 2) + (3 * (2 + 2 * 3)) +(3 * 6 * 4 * 8 + 4) + 6 + 3 * 3 + 4 +8 + ((6 * 2) + 6 * (8 + 5 * 2 * 2 * 9 + 8)) * 5 * 7 +7 + 3 + 5 + ((3 + 8 + 2) * 5 * 9 * 4 * 9 + 5) +4 * 5 * (8 + 6) +9 * 7 * 4 + (4 + 5) * 4 +9 + 6 + (8 * 5 * (3 + 2 * 7 + 2 + 2 + 9) + 8 * (8 * 5 + 5 * 5 * 3 * 7) * (5 * 3 + 8 + 7 * 4)) + 7 + 2 * 5 +6 + ((2 * 3 + 9 * 8 * 8) + 6 * (5 * 5)) * 2 + 3 * (2 + (7 * 8 * 9 * 4 + 7 * 3) * 2 * 7 * (7 + 3 + 2 * 7 + 9 + 2)) + (3 * 9 + 2 * 8 * 4 * 2) +(7 * 4) * 2 + 7 + 2 + 3 +(5 + 6 + 8) + 8 + 3 + (5 + 8 * 5 + 5 + 8) + 3 +2 * (6 * (3 + 5)) + 4 + (3 + 9 * 5 + 8 + (6 + 4 + 2 + 2 * 2 * 4)) * 3 + 8 +(2 + 7 + 3) + 7 + 2 + 6 * (6 * (4 + 7 * 8 * 5)) * 4 +7 * 5 + 3 + 3 +4 * (2 + 3 + 5) * 2 * 3 +(8 * 8 + (7 * 4 * 6 * 6 + 2 * 6) + (8 + 6 + 2) * 7 * 8) + (3 * (8 + 9 + 6) + 4 * 7) + 5 * 8 +(7 * 8 * 2 + 3 * 9) * ((4 * 4 + 5) + (6 + 4 + 9 + 5) + 3 * 2 * (2 + 5 * 7)) + 4 + 8 * ((8 * 8 + 5 * 4 * 3 + 4) * 5 + 4 * 4 + 4 + 7) +(9 + 8 + (4 + 2 * 9) + 7 + 7) + 7 * 8 +(3 * 5 + (7 + 5 * 2 + 2)) * 4 +(5 + 8) * 6 + (6 + (7 + 4 + 3 + 2 + 6 + 9)) +4 * 2 + 2 + 9 + 3 + (2 * 6 * (2 * 2 * 8) + 6 * (3 + 2 * 3 * 4 + 9) * 7) +(7 + (9 + 8 + 6 * 6 * 2)) + 6 * (8 * 9 * (5 * 7 + 6 + 3)) + 4 +(3 * (9 + 2) + 6 + 6) + 4 * 4 * 4 * 7 +4 * 4 + 6 * 3 * 2 * 7 +3 + (7 + 3 + (4 + 4 * 3 + 5 + 4) * 9 + (2 + 5 + 7 * 7 * 2) * 4) +5 * (3 * 6 * (7 + 2 * 2) + 7 + 7) + (2 + 7 + 3 * 7 * 6) + 3 * 4 + 4 +2 * 4 * 2 * (8 * (7 * 7) * 7 * (2 * 8 + 7)) + 5 +4 + 6 + (8 * 9 + 4 + 8 + 4) * 3 +5 * 9 * 9 + 4 + 2 + (3 + (5 + 9)) +(9 + 8 + (6 * 5 + 7 * 5 * 4) + (6 + 7 * 2 + 8 + 6)) * 4 + 8 * 6 + 8 +7 * 2 + ((7 + 3 * 7 * 7 * 2) * (9 * 9 * 8 + 7) * (7 + 9 * 4 * 2 + 3) + 6) * 6 +8 * 4 + 9 + 7 * (6 + 9) +6 + 3 + 3 * 7 + ((8 + 9) * 4) * 6 +7 + 6 * (2 * (6 + 7) * (8 * 6)) + 5 + 7 +7 * (5 + 9 * 6 * 5) * 7 + 6 * 2 * 2 +7 * 3 * (2 + (9 + 3 * 6) + 8 * (9 * 2 * 2 + 2) * 3 * 5) +6 + 5 * 7 * 9 * (8 * 2 * 6 * 5 + 9 * 6) * 2 +5 * 3 + (8 * (9 + 3 * 2 + 9 * 4) * 2 * 7) + 2 * (2 + 8 * 6 + 5 + 7 * 3) +9 * 4 * (6 + (2 + 6 + 4 + 2 * 5) * 8 + 2 + 8) + 4 * 3 * (9 + 8) +3 * 6 + 9 + 6 * 3 + (7 + 7 * 2) +7 * (8 + (3 + 9 * 3) * 3 + 2 + 9 * 5) + (3 + (3 + 3 + 8 * 9)) +2 * 2 * ((3 * 6) + 7 + 2 * (9 + 8 * 3 * 6) + 5) * (4 + (2 * 2 + 8 + 8 + 6 + 4) + (7 * 2 * 2 + 9 * 8 + 8) + 9 + 3) +(7 + 2 * 8 * 3) + 9 +8 * 8 + (9 + 2 + 3 + 2) +(3 + 2 * 4 * 6 * 3) + 7 +8 * 4 * 3 + (7 + 5 + 6 * 5 * 6) + 9 +(2 * 3) + (8 * 2 * (6 * 3) * 5) * ((7 * 9 + 4 * 4) + 2 * (4 * 9 + 3) + 9 * (5 * 5) * 4) +2 + 6 * (3 + 5 * 7) * 2 +(6 + (3 + 4) * 6 * 8) + 8 +8 * 5 * 2 + (7 * (5 + 3 + 4 + 4) * 4 + 9) +5 * 9 * (5 + 8 + 9 * (2 + 7 * 2 * 6)) * 9 +(5 + 9 * (6 * 7 + 9 + 6 * 8) * 8) * (3 + 7 + 2) * 2 + (9 + 6 * 4 * (9 * 3 * 4) * 5 * (7 * 4 + 3)) * 8 +7 * 3 * 7 * 3 * ((3 + 2 * 9) + 6 * (3 * 2) + 4) +7 + 4 * (7 + 9 * 8) * 7 * 5 + 7 +(7 + 9 * (2 + 4 * 9 * 4 * 7 + 4) * 3) * (8 * (2 * 4 + 6 * 2) * 6) +((3 * 6 + 4 * 6 * 4) * 6 * 8 * (9 * 4 + 2 + 5 + 3 + 9) * 5) * 6 + (9 + 8) +(3 * 3 + 4) * 4 +(4 * (7 * 6 + 4 * 4 * 5) * 3 + 3) + 6 * 6 * (2 * 3 * (8 * 3 + 2 * 5 * 6 + 7) + 9 + 5) * 4 * 7 +(2 * (5 * 6 + 9) * 7) + 3 +5 + 9 + 2 * ((6 * 6) * (3 + 7 + 6 + 6) + 3 + 5) +4 * 2 * 9 + (3 + 4 + 5 * (4 + 8 * 5) * 9 + 5) +7 + 4 * 6 + 9 * 7 + 3 +(8 * 7) + 7 * 3 * (7 * 9 * (4 + 4 + 7 * 5 + 7 * 2) + 9 * (5 * 5 * 8 + 7) * 3) + ((9 * 8 + 8) + 2 * 2) + 6 +2 + 7 * 4 * 7 * (4 * 3 + 6 + 8 * 6) + 7 +6 + (9 + 8 * (5 * 7) * 4) * (5 * 8 * 2 * (8 * 6 + 6) * 5 + 3) + 4 * 7 +6 + 5 + (7 + (8 + 2) * 4 * 3 * 2 * 9) * 7 +7 + 3 * 9 +(5 * 5 + 8 * (9 * 4 * 3 + 6 + 8 * 2)) * (2 * 6 + 8) + 6 * 7 +(2 + 8) * 9 + 4 + 4 * 2 + (3 * 3 + 9 + 2 + 9 + 5) +((5 * 4) + (3 * 4 + 3 + 4) + (8 + 3 + 3 + 9 + 2) + 4) * 9 * 7 * 9 + 6 +9 + 3 * 4 * (9 + 6 * (9 + 8) + (8 * 4) * 5 + 2) +(4 + (3 + 2 * 4 + 7) + 4 + 2) * 4 * 7 * 3 * (2 * 8 * 9 * 5 + (3 * 3 + 8) * 3) +2 * 7 * (2 * 5 + 5 * (2 + 7 + 4)) * 7 + 2 + 4 +4 * 2 * (6 * 6 + 2 + 2 + 6 * (2 * 2 * 8)) + 3 * 9 +(5 * 9) + 2 + (3 * 8 * (8 + 4 * 3 + 7 * 9 * 5) * 2 * 6) +2 * 9 +6 * 9 * 2 + 9 * (4 + 3) * (8 + 6 * 9 * 3 + 7 * (2 * 2 + 7 + 8 + 3 * 7)) +3 * 8 + 9 + 4 +9 + (4 * 9 + (6 * 9 + 6) + 2 * 6 * 9) * (2 * 4 * (3 * 5 * 2 + 2 + 8 * 6)) * 6 +(3 * (3 * 6 + 8 + 3 + 7) * 9 * (8 * 3 * 4) + 6 + 3) + 8 * (4 + 9 + 3 + 2 + (4 + 4 * 6 + 2)) +6 + 5 * 2 + 7 + ((9 + 2 + 4) * 6 + 5 * 8) * ((6 + 5 + 6 + 2) + (6 * 3 + 7) + 7 * 2 + (7 * 7 + 3 * 4 * 3 + 2)) +((2 + 3 * 6 * 5) * 7 * 9 * 5 * 2 * 8) + 8 + 3 * 3 * 6 +7 * (8 * 6) * 4 + 2 * 7 * 8 +2 + 4 + (9 * 5 + 3) +5 + ((7 * 8) + 8 + 6 + 6 * 2 * 3) * 2 * 3 +9 + (4 * 5 * (6 * 6 * 9 * 5 * 6 * 8)) * (8 + 5 + 3 * 7) + 9 * 3 * 4 +8 + 4 * 5 * 2 +5 + 2 + 8 + 4 * (9 * 2 * 6) * 3 +4 * 6 * (5 * 2 + 3 + 5 + (8 + 5 * 7 * 4) + 4) * 8 + 2 +(9 * 7 + 2 + (3 * 5 * 4 + 6 + 3 * 2) * (4 * 8)) * 3 + ((9 * 2 + 6) * 6 + 5 + 5 + 5) * 8 +(8 + (2 + 2)) * 7 + (9 * 9 + 3) + ((5 * 4 * 9) + (2 * 6 + 9)) + 3 * 3 +6 * 8 + 8 + 2 + 7 + (5 + 3) +2 + 2 * (4 + 5) * 6 + 4 * (6 * 8 + 4 + 2 * (9 + 5) * 3) +(5 * 5 + 6) + 8 + 3 * (2 * 3 * 3 + 6 * 7 * (6 + 7 + 8 * 6 * 4)) +7 * 8 + 2 + 5 * (9 + 6 + (5 + 5 * 6 * 3 + 7) * 2 * 5 + (7 + 8)) +6 * (9 + 5 * 3) * 7 * (9 * 5) + 3 + 4 +(9 + (3 + 2 * 2) * 6) * 2 + 5 * 6 + ((9 * 2 + 4 + 5 * 7) * 2 * 7 + 5) +6 + (5 + 7 + 5 + 5 + 9 + 5) * (8 * 4 * 8 + 4) + 4 * 3 * 9 +2 * 9 * 9 * (4 + 2) * 7 + (2 * (4 * 7 + 3) + 8 * 9 * 3 + 9) +5 * 5 * (6 * (8 * 2) + 8 * 8) +(4 * (5 * 9 * 2 * 8 * 5) * 8 + (6 + 3)) + (8 * 9 + 4 * (5 * 5 + 6)) * 4 + 6 * 4 +9 * 6 + 6 + (7 * (3 + 3 * 9 + 7 * 7 + 5) + 3) +5 * ((5 * 3 + 5 + 7 + 2 + 3) + 8) * 6 + 9 * 7 +(4 * 9 + 4 + 2 * (8 + 9)) * 6 * 4 + 9 + 5 +5 * 4 + 3 + 2 +(5 * (9 + 7 + 3 + 4) * (8 + 3 + 9 + 9 + 9) + 5 + 9) * (3 * 3) * 7 + (2 * 6) + 8 +(7 * 6 + 7) * 7 + 9 +((6 + 4 * 9 * 7 * 8) * 3 + 3 * 5 + 7) * 5 * 9 + (5 * 2 + (2 * 7 + 8 + 3)) + 5 +(3 + 8 * 4 * 3 * 5 + 9) + ((8 + 3 + 9 + 3) * 8 * 5 * 5 * 3) * 4 + 9 * 6 +4 * 3 + 2 * (9 * 6 * 3 + (9 + 3 + 4 + 8 * 4 * 4) + 3 + 6) * ((2 * 9) + 7) + 5 +(6 * 9) * 2 +8 * (5 * (7 * 4 * 5 * 3 + 4)) +2 * 9 + 7 + (8 + 5 * 8 * 8) +8 + 5 + (2 + 3 * (7 * 8 + 3)) * 4 + 8 + 6 +(6 * 4 + (3 * 6 + 7) + 9 + 5) + 4 + 4 + (5 * (9 * 7)) + 7 * 6 +6 * (7 * 9 + 3 * 3 + 4) * 4 * 4 + 7 * 6 +(2 * 5 + (5 + 5 * 9 * 3 * 4 * 9) * 7) * 8 + 9 * (6 + (9 * 4 + 3 + 2 + 9 * 3) * 4) +(6 + 6 * 6 + 6) + 3 + 6 +3 + 5 * 6 + 8 * ((5 * 5 + 8 * 4) * 9 + 7 + 6) +8 * 9 + 5 +4 * 3 + (8 * 2 + (3 + 5 * 4 + 9)) +(4 + 9) * 3 * 3 + (7 * (6 + 5 + 7 + 9) * 4 * 2 * 2 + (9 * 4 + 7 + 4 + 7 * 3)) +(2 + 8 * 6 + 2 + 8 * 6) * 2 + 7 * 5 + 3 +8 + 3 + 4 + 7 * (5 + 8 + 3 * 8 * 2 * 3) +(2 * 3 + (2 * 6 * 2 + 2 + 8 + 2)) * 9 + (2 + 9) + 4 + 3 + 9 +9 + 4 * 4 * ((4 * 6 + 2 + 8 * 7) * (3 + 8 + 6 + 3) * 3 * 3) + 4 + 6 +(7 + 8 * 9 + 5) + (4 * 5 * 4 * 9 * 5) * 9 +7 * (2 * 5 + 9) * 6 * 3 * 3 +(9 * (4 * 9 * 9)) + (5 + (7 * 9 * 2 * 7 + 4) + (3 * 8 * 2 * 2 * 6 * 4) * 6 + (3 + 3 * 2 + 2)) + 2 + (5 * (2 * 5 + 3 * 3 * 4 * 7) * (8 * 4 + 7 + 8 * 5 * 2) * 3) +9 + ((2 * 6) * 3) + (9 * 2 * 8 * (7 + 3 * 5 * 3 * 7 * 8) * 7) + 4 * 4 +6 + 9 * (2 + 7 + (7 + 5 + 2) * 5) +(7 * 2 * 4 + 8 * 2) + 8 * 4 + (7 * 3 * 2 * (5 + 8 + 6) * 3) * 6 +5 + 9 + (4 * 4 * 3 * 5 + 9) +6 * 2 * 3 +((6 + 5) + (8 * 7 + 3 + 6) + 5 + (3 + 2 + 9) + 9) * 6 +7 * 9 + 2 + 7 + (8 * 9 * 9 + 2) +(8 + (7 * 4 * 2 + 5) * 8) * 3 + 8 + 2 + 9 +((2 * 6 * 3) * (9 * 3) + (3 + 4 + 9) * 2 + (3 * 9 + 9 * 9 * 6 + 3) * (4 * 6 * 5 + 8 + 2)) * ((5 + 4 * 8) * 2 * 5) * 4 +4 + (3 + 9 + 2 * 5 * 9) + 8 + (8 * 4 * (8 + 2 + 7 + 7 + 8 * 9) * 6 + 8 + 8) * 5 +(4 * (7 + 5 + 8 * 4 * 4)) + 8 * 9 + 9 +(7 + 2 * (7 * 4) * (7 * 4 + 6) + 5) + 3 +9 * 4 * 5 + 3 + 9 + 5 +4 * (5 + (4 * 8 + 4 * 5) * 6) + 4 +6 + (7 + (7 * 8 * 3 * 3 * 9 * 3) + (7 + 9 * 7 * 9 + 3 * 6) * 4 + 3 + 4) + 6 + ((4 + 3 * 4 * 7 + 7) * 6 + 5) * 9 +9 * 9 * 7 * (8 * (6 * 6 + 2 * 8 * 8 + 8) * 4 * 7 + 4) +(2 + 5 * 6 * (3 + 9)) * (3 + (7 + 9)) * 3 * 2 +8 + 8 + 5 * (4 * (3 * 3) + 9 + 6 + 7 + 6) + ((5 * 4 + 7 + 5) + (6 * 9 + 9) + 5 * (9 + 9 + 2 * 4 + 6 * 4) + (4 + 5 + 7 + 8 + 6)) + 6 +8 + (4 * (3 + 8) * 7) + 6 +6 + 9 +4 * (8 + 4 * 5 * 6) * 6 + 2 * 3 +6 * 7 * 8 + 9 * 7 +((9 * 5 * 2) + 9 * (7 + 6) + 4) + 5 + 3 + 3 +9 + 4 * (5 + (8 * 3 + 5 * 9 + 9 * 5) * 2) + (3 + (5 + 4 * 3) * (5 + 2) + (7 * 9)) * 3 +2 + (9 + 9 + 5 + 6 + (2 + 9 * 9) * 6) * (9 + 4 + 3 * 7 * 7 + 4) +3 + (8 * 9 * 6 * 2 + (2 + 9 * 3 + 9) * 5) + 7 * 6 + (8 * 5 + (8 + 3)) +(6 * (3 + 5) * 2) + 6 * (4 * 7 * 2 + 2 + 8 * 3) + 8 + 4 * 9 +3 * 9 * ((9 + 3 + 6 * 7 + 8) * 2 * (9 * 6 * 6 + 5 + 9 * 2)) * 6 * 2 + 3 +9 * (6 + 8 + 6 * 6 * 2) + 5 * 3 +(3 + 8 + 7 * 8 + 6 + (3 + 2)) * 4 + 2 + 4 +((7 + 7 * 4 + 5) * 9 * 9 * 8) + 9 * 8 + 7 +3 + ((4 * 9 + 4 * 5 * 2 * 7) + 7 + 2 + 8 * 2) + 5 * 6 + 8 + 5 +(4 * 6 + 4 + 5) + 7 * ((6 + 9 * 2 + 8 * 3 * 4) * 9 * 9 + 4) + 3 + 3 +6 + (9 * 7 + 2 * (7 + 6 + 6 + 4 * 8 * 9) + 3 * 3) * 2 + 8 * (4 * 9) +9 + 4 + 6 + ((6 + 8 * 2 * 7 * 2) * 8) + 8 +(6 + 5) + 2 + 4 +(4 * (2 + 5 * 9) + 4) + 4 + 2 + 3 * (5 + 8 + (9 + 9 + 4)) * 6 +(7 + 8 * (9 + 8 + 8)) + 5 * 7 + 9 +5 + 6 + (9 * 6 * (3 * 4 * 5 * 2) + (5 * 4 + 4 * 2 + 6 + 5)) + 9 +((2 + 4) * 5) * 5 * 3 + 3 + 2 +8 + (8 + 9 + (9 * 5 * 4)) * 8 * (6 + 8 * 2 + 6 * (3 + 6 * 9 + 2)) + 8 * (5 + (8 + 3 + 6 * 3)) +6 * (2 * 7 * 5) + 8 +4 * 5 + 8 * (7 + 4) +(7 + 4 + 8 + 4 * 4) * 8 * 5 + ((7 * 6 * 4) + 5 * 6) +7 * ((7 * 3 + 6 * 6 * 2 * 3) * 4 + 8 * 5 + 5) + (9 * 3 + 2 + 2 + 3 + 4) + (7 + 2 + (8 * 8 + 6 + 7 + 7)) * ((5 + 6 * 4 * 3 + 7 + 5) + 2 * 5 + 4 + 5) * 4 +4 * (9 * 7 + (7 * 7 + 7 + 3) * 8) +3 + (8 * 8 * 9 + 5 * (3 * 2 + 2 + 2 * 2 + 8)) + (5 * (8 * 4) * 2 + 7 * (7 * 4 + 7 + 2 * 4 * 3) + 6) + 9 * 2 + (4 * (2 + 9 * 6 + 7 + 5 + 7) * 2 + (7 * 5 * 5 + 6 + 6) + 4 * (8 + 5)) +((6 * 9 + 3 * 3 + 8) * (3 + 9) * 2 * 2 + 3 * 8) * 3 +2 + 5 + (3 + 4 + 8 * 8) * 4 + 6 + 4 +(6 * 6) + 9 * ((2 * 2 + 4) + 6 + 9 * 8 * (7 * 4 * 3 * 8 * 3)) * 7 * 2 + 3 +9 * 4 + 2 * (3 * 6) * 8 + 3 +(9 + 7) * 2 * 7 * 3 +(8 * 7 + 2 + 8 * 3) * (3 * 7 * 2 * 2) + 4 * 3 * 3 + 6 +(2 + 7 + 7) * 9 + 7 * 7 +4 * (9 * 4 + 8 + 9 * 9) * 3 + (3 + 2 + (4 * 2 + 2 + 4 + 9 * 8) * 4) * 9 * 9 +4 * 6 * ((4 * 7 + 4) * (2 + 8 + 7 * 5 + 2 * 7)) + 2 + 3 * 5 +2 + 2 + 6 + (4 + (7 * 3)) + 5 +(9 * (3 + 8 * 3 + 9) + (8 + 4 * 2 * 8 * 2 * 6) * 9 + (5 * 7 * 7) + 5) * 3 + 3 +3 * 8 + (6 * 6 * 7 + 3 + 5 + (2 * 7 * 4 + 2 * 3 + 4)) + 8 + 7 +7 * 7 + (6 * (3 * 4 * 4 + 7 + 4) * 7 * 7 + (7 + 4 * 4 + 6 * 9 * 7)) * 2 + 8 +7 + 3 + 4 + (2 * 4 + 9 + 6 + 8) * 5 + 5 +((5 * 7 + 4 + 8 + 8 * 5) + 3 * (3 + 3 + 5 * 9 + 2) * 6) + 2 +6 * (8 * 4 + 7 + 7 * 8) * (5 * (2 + 2 + 4 + 8 + 6)) + 6 * 5 +3 + 7 + 7 * (3 + 9 * 6 * 6) + 4 * 5 +3 * ((4 + 3 * 9) * 4 + 2 * 5 + 6 + (5 + 2 + 2 + 4 + 8)) * 6 * 9 + 3 * (9 + 5 + (9 + 9 + 6 * 6 + 6 + 2) * 3) +(8 + 5 * 6 * 4 + 2 * 4) + (2 + 5 * (9 + 3 * 8 * 8) + 8 * 2 * 4) * (3 + 7 * (8 * 4 * 4 * 8)) * 9 + 8 +6 * 6 + (6 + 3 + (8 * 8 * 8 + 5 + 3 * 6) + 7) +3 + 7 + ((3 * 6 + 4 + 9 * 3) * 9 * 7 + 2) + (8 + 2 * 3 * 8 * 7) * 6 + 5 +2 + ((7 * 7 * 3) + (4 + 8 + 3 + 5) + 3 + 7 * 9 + 7) +9 * 9 * 7 + ((8 + 7 * 8 * 8 + 6 + 8) + 3 + 2 + 6 + 9) +3 + ((3 + 8 * 5) + 7 * 2) + (2 + 9) +((7 * 2 * 3 * 3 * 9) * 6 * 2 * (3 * 4) + 5) * 4 + 6 + 6 + 2 +6 * 3 * 2 + 2 + 4 * 9 +4 * 4 * ((2 * 4 * 4 * 2 + 9 + 7) + 9 + 8 + 5) * 9 +6 + 4 * 4 * (7 + 6 + (3 * 7 * 6)) + 5 +9 + 3 * ((7 * 9 * 7 * 7 + 5 * 4) * 6 * 3 + 3) * 7 * 5 +3 + (8 + 6 + (7 * 3 * 9 + 4) + 9 + (3 + 8 + 9 * 8 + 5 * 6) + 8) + ((9 * 2 + 3 * 9 + 6) * 5 * 2 * 7 + 2 + 3) * (6 + (5 * 6 * 5 * 5 * 2) + 4 + 4 + 9) * 7 + (9 * (5 + 3 + 3 * 4 * 7) * 7 * 9 * 8 + 4) +2 * 4 * 3 + (4 + 7 * 4) +(4 * (6 + 4)) * 2 * 9 +((8 + 8 + 2 + 4) + 5 * 8 + 2 + 5) * (5 + 9 * 6 + 5 + 9) * 8 * 4 + 7 +2 + (7 * 6 * 7 * 4 * 2) +((7 * 5 + 4 * 8) * 5) + 4 + 7 * 8 * 8 + 3 +4 + ((6 + 6 + 5 + 8) * 5 + 5 * 2) +(9 + 6 * (6 * 6 + 9 + 5) + 4) * 3 + ((6 + 5 * 2 * 7) * 2) +(3 * (6 * 9 + 9) * 9 * 3) + 2 + 7 + 5 +5 * ((6 + 9 + 6) + 7) +2 + 5 + ((9 + 3 + 6 + 4 + 2 + 7) * 7 * 8 * 4 + 8 * 6) * 2 * 2 +((4 * 7) + 9 + 7 + 8 + 3) + 6 * 5 +(3 + 6 + 7 + (7 * 5)) * 6 + 8 * 9 +9 + 5 * 6 * 9 + (8 + 6 * 6) +(7 * (9 + 8 * 4 * 7 + 3) + 8 * 3 * 3 * (6 * 8 * 8 * 3 + 9)) + 8 * 5 + 6 * 6 +3 * 4 * ((9 + 2) * (7 * 4 * 9 + 5 + 7)) + (6 + 7 + 8) + 2 * 9 +4 + 4 + 4 + 3 +6 + 6 * 6 * ((5 + 4 + 5 * 5 + 6 * 9) * (6 * 3 * 9) + 7 + (2 * 4 + 3 * 4) + 6) + 9 + 3 +4 * 5 + 5 * (8 + 4 * 7 + (3 * 6 + 3 * 6 + 5 + 9) * (4 + 5 + 6 * 7 + 7 * 8)) * 3 +4 * (5 + (2 + 8 + 8 * 7 * 3 * 9) * 4 + 4 * 4) + 3 +5 + (3 + (9 + 5 * 7) + 9) + 2 +3 * (4 + 9) +9 + 5 * 7 + (7 + 5 + 8 * 3 * 7) + 8 + (2 + 3 * 9 * 4 + 3) +8 + (9 + 8) + 5 * 2 + 9 * ((4 * 8 + 5) * 3 * (8 + 3 + 6 + 5 + 7 * 4) * 5) +7 * 8 * 9 + 9 * (4 + (7 * 9 * 7 + 9)) +7 * ((5 * 6 * 4 * 2) * 9 * 7 + 3) + 3 +2 + 9 * 4 +2 * 2 + (5 + 2 + 4 * 5 + 5) + 5 * 5 +4 * 8 + 9 * (7 * 9 + 9 + 8) + 8 +9 + ((6 + 6 + 2 * 2 * 9 * 9) * 8 * 9 * 4 * 6) +((2 + 8 + 9 * 4 + 7) * 7 * 5 + 3 + 9) * 4 * 3 + 7 +(8 * 8 + (5 + 3 + 9 * 9)) + ((7 + 5 + 5) + 2 + 7) * (9 + 4 + 4) + 8 + 4 * 8 +(9 * 6 * 3) * 3 * (6 * 2 + (3 + 4 + 2) * (7 + 9 * 5 + 5)) + 8 + 6 +(8 + (3 + 8 * 3) * 3 * 6 + 5) + 5 + 7 +((9 + 8) + (6 + 2) * 7) * 2 + 6 * 4 * 2 +3 + 6 + (3 + 2 + 2 + 6 * 5 + 3) +(6 + 4 + (2 + 3 * 4 + 3) + 4 + (3 * 2 + 5) * 8) + 9 +(3 + 3 + (9 * 4) * 2) + 5 * 7 * 3 * (8 + 4) + 6 +(3 + 7) + 7 * (4 + 7 * (9 + 2 * 7) + 8 * 5 * 8) * 3 +((2 * 4 * 5 * 4) + 3 + 3 * 7 + (8 * 2 + 6)) + 8 +(5 + 6 + 9 + 8 + 8 + 3) * 2 + 6 +4 + 6 + 8 + (9 * 8 * 2 + 6 * 4 + 3) * 5 +(2 * 2 * 5 * 7 + 4) * 6 + 7 + 5 * (9 + 7) +5 * 9 + (7 * 4 + (9 * 7) * 5 * 7) + 5 +(3 * 6 + 8) + 7 + 8 + 3 + 4 +4 + 3 * 3 * 3 + 7 * (5 + 9 + 6 + 5 + 6) +3 + 9 + 8 * 4 + (6 * 7 * 3 + 7 * 5) +8 * 3 * (9 * (4 * 8 * 7 * 9 + 3 * 9) * 2 + 5 * 7) * 4 * 4 +5 * 7 * (4 * (9 * 7 * 7 + 5) * (7 + 5 * 9 * 6 + 8) + 4 * 6 * (4 + 6 + 6)) + 3 +4 + ((4 + 2) + 7 * (3 * 4 + 4 * 9 + 6 + 8)) + 7 * 4 + 5 * 7 +((6 + 2 * 6) * 2) + (5 * 9 + 9 + 7) + 7 * 4 * 2 +4 + 7 * 8 * 7 + (3 * 7 + (4 * 6 * 5 * 2)) * 5 +6 + (9 + 6 * 4 + 6 * 6 + 3) * 5 * 2 +8 * 3 * 7 * (6 + 3 + (7 * 6 * 5 + 9 + 4) + 6 * (2 * 7 + 5 + 6) + 3) * (6 * 4 + 2 * 9 * 7 + 6) +2 * (5 * (9 + 6)) * (4 + (5 * 2 + 3) + 7 * 6 * (8 * 4 * 4) * 4) * 5 +2 * 2 * (3 + 8 + (4 * 3) + (6 + 5 + 6 + 8 * 5 * 4) + 8) + 3 * 3 + 8 +4 * (8 * 4 * (3 * 6) + (5 + 3 + 4 * 6 + 4 + 7) * 4) + ((8 * 2) * (2 * 7) + (9 + 7 * 2 + 2)) +3 * 4 + (7 * 8) + (5 + 7 * 8 + 9) * 9 +(9 * 4) * 5 * 3 * 9 + 5 + 7 +(7 * (9 * 4 + 9 + 5) * (2 + 3 * 3 + 8 + 2)) * 5 +((9 * 2 * 9 + 8 + 8 * 3) * 5 * 7 + (2 * 2 * 3 * 2) + 6) + (7 + 8 * (4 + 2 * 9 * 6 + 3 * 9) * 4 * 2) + ((4 + 9 * 9 * 5 * 5) + 2 + 8 * 9 * 2) + 9 * 6 +9 + 7 + 9 * (9 + 4 * 5) * 7 +7 + 8 + ((2 + 3) * 4) * 6 +6 * 4 +(9 + 4 * (6 * 2 + 2 + 7 * 6) * 4) * ((6 + 8 + 7 + 4 + 9) + (7 + 9 + 8 + 6)) + (2 * (3 + 8) + 7 * (4 + 3) * 5) +(9 + (2 + 4 * 3 + 3 + 2 + 2) + 4 + (2 + 3) + 3) * ((6 + 6 + 7 * 6) * 2 + 3 + 9 * 4 + 8) * 2 * 2 + (9 + (5 * 6 * 8 * 3)) +(8 * (4 + 9 * 3 + 6 + 6) * 7 * 6) * 5 + 4 + 8 * 8 +3 * (8 * (4 * 2 + 6 * 6) * 5 + (9 * 6 * 3 + 4 * 4) + (5 * 2 + 7 + 5 + 5)) +3 * ((6 + 7 + 7 * 9 + 4) * 6 + 8) + 8 + ((7 * 9 + 5) + 5 + 6) * (5 * 6 + 2 * 6 * 6 + 7) +(3 + (8 + 9) * 5 * 6 + 8) * (2 + 6 + (7 + 4 + 6) * 4 + 3) + 6 + 2 * (7 + 8 * 5 + 7) +5 * (2 + 2 * 6 * (6 + 2 * 4 + 8) + 4 * 5) +4 * 9 * 7 + 7 * 3 +((7 + 7 * 6) * (5 * 9 * 6)) * 5 + 5 + 3 + 8 + 4 +(4 + (5 + 7 + 7 + 7)) * 4 * (7 * 7 + 3) * 6 * 3 * ((4 * 7) + 4 * 9) +2 * 2 + 6 * ((8 * 9 + 7 * 7) * (5 * 9 * 6 * 6 * 7 + 6) + 5 * 4) + (8 * 7 + 5 * 5) +9 + 6 * ((9 + 5 + 2 + 7 + 3) * 3 * 6) + 9 + 7 * 9 +4 * (8 * (4 + 6 * 4 + 8 + 2 + 3) * 5 + 8 * 5) * ((5 + 4 + 2 + 3 * 2 + 9) * (4 * 8 + 9 + 4 * 4 + 4)) + 2 +9 + (3 * 3 + 4 + 5 + 6) + 3 + (5 + 7) + (3 + 5) +((3 * 3) + 9 + 4 + 8 + 9 + 2) * (7 * (8 + 8 * 7) * 4 + (4 * 4 + 2 * 5 * 2) * 9) +2 + (7 + (6 * 2 * 4 + 2 * 9 * 2) * 4 * 5) + (4 + 5) +2 + (4 + 3 * 5 * 3 + 3) + 5 +6 * 6 + 4 + 8 + 4 +((3 + 4 + 2 + 6) + 8) + 2 +(4 + 2 * 4 + 6 + 8 * 3) + (3 * 8 + 9 + 7 * 5 + 2) + 7 * 6 * (6 * 3 * 5 * 6) * 6 +5 * 6 + (8 * (6 + 6 * 4 + 2) * (2 + 5 + 4 * 7 + 3 * 6) + 8 + 4) * 6 * 6 +3 * 6 * 5 * (3 + 4 + 3) * 3 * 5 +9 * (4 * (3 * 9 * 4 * 9 + 6 * 7) * 7 + 7 * 7) +7 * 4 + 2 + (7 + (3 * 4) * 9 * 8) * 2 +(3 * (9 * 3 + 4) * 3) + 2 + ((3 + 7 + 6 + 4 * 6 + 9) + (3 * 7)) * 8 +(4 + 3 + 6 * 7) * (7 * 7 * (8 * 4 + 2 * 8 * 2 + 3) + 4 + 8 * 3) * 8 + 2 +3 + (9 + 2 * 3) +7 * 7 * 5 + (2 * (3 + 8 + 2) + 7) +4 * (7 + 7 * 9) * ((8 + 2 * 4 * 6 + 4 + 9) * 5 * 6 + 3 + 3) + (4 + 4 * 2 * (4 + 4 + 3 + 3 + 7) + 2) +2 * 2 + 2 * 9 + 9 +9 * 4 + (2 * 5) + 8 * 5 +(8 + 9 * (2 * 2 + 3 * 9 * 3 + 3) * 8 * 8) * (9 * 4 * 6 * 7) +7 * (6 * 8 * 8 * (3 * 2 + 4 * 7 + 9 + 6) + (4 + 9 * 3 * 3 + 7 + 3)) + (4 * 3) * 5 * 8 * 4 +4 * 8 +7 * 2 * (4 + 2 * 7) + ((3 * 2 + 2 * 9 * 6 + 7) + 8 * 6 * 6 + 9) * 7 + 5 +(4 * (2 + 4 * 4 + 4) * (8 + 7)) * 7 * 8 * 9 * 9 +9 + 5 * 3 * (8 + (9 * 5 + 4 * 3) * 7 * 7 * (6 + 4 * 5 + 7 * 2 + 5)) + 3 +(4 * 4 * 9 * 8 + (7 * 2 + 9 * 6 + 4)) + 5 +(8 * 4 * 8) + 9 * (7 * 5) * 5 +(3 * 4 * 9 * 9 + (5 * 8 * 5 + 4 + 7) + (7 * 8 * 5 + 9 + 5 + 5)) + 2 +(8 * 3 + 2 + 9 + 2 + 2) + 3 +8 * (9 + 7) + 7 * 2 * (8 + 3 + 5 + 7 + 6) + 2 +2 * (2 * 6 + 8 + (7 + 6 + 2) + 3 * 6) * (5 + 8 + 7 + (9 + 9 * 3 * 7)) * 7 + 4 +(5 + 5 + 8 * (5 + 2 + 3)) * 9 * 9 + ((2 * 6 * 6 * 9) * 5 + 4 * 6) + 5 +5 + 3 * 4 * (3 + 4 + 8) * (3 * 9 + 9 + 7 * 8) +6 * 4 + ((7 + 3 * 3 + 3) + (3 * 7) * 3 + 9 * 2) +(5 * 3 * 7 * 2 + 6) * (2 * 6) + 6 +7 * 4 + (6 + 2 * 3 * 9 + (8 + 9) * (5 + 2 + 2)) +2 + 2 + ((9 * 2 * 4 + 8 + 3 * 7) * 4 + (2 + 6 + 5 * 5 * 2 + 8) + 5 * 2 * 8) + 4 +((2 + 3 + 2 * 8 * 4 * 6) * 4 * 2 * 8 * 5 + 5) + 8 * 9 +5 + 4 * (5 + (4 * 4 * 8) * 3 + 3) +4 * 3 + (7 * 4) + 8 +4 + (9 * 8 * 5 * 4) + 2 + 4 +4 + (7 + 9 * 6) * 5 + 4 + 4 + 6 +(2 + 9 * 3) * 2 * (7 + (5 + 8 * 7) + 8) +4 * 3 + 6 + 3 + ((5 + 6 + 7) * 5 * 2) +9 + 8 * (4 + 3) * 4 + 6 * 9 +4 * (6 + 5 * 5 * 8 * 6 * 6) +(8 + 7 * 4 + 4 + (2 + 8 * 2 + 4 + 6 + 2)) + 3 +2 + (9 * 4) * 7 +4 + 7 +(9 * (2 * 2 + 4) + 3 * 3 + (7 * 4 * 6 * 4 + 5 + 4) * (8 * 8 * 7 + 8)) * 6 + 3 + 7 + (6 * 5 * 8 * 6) + 2 +2 + 6 + (4 + 2 * 7 + 3 * 9 * 9) * ((8 + 2 * 4 * 4 * 2 + 3) + (3 + 9 + 4) * 3 * 4) + 8 +8 + (6 * 5 + 2 * 6 * (2 * 3 + 2 * 9 * 7 * 2) + 6) * 2 * 8 + 7 + (6 * 5 * 9 * 6) +6 + (3 + 9 + 3 * 6) +(2 + 5 * 9 * 2) * 2 * 5 + ((4 * 2 * 7 + 8 + 7) + 7 + 6 * 4 * 3 * 6) +(7 + 3 * 6 * (2 * 7) + 7 * 8) * 7 * 2 + 4 + 5 * 2 +(6 * 2 * 5) + (7 + 7) * 9 * 5 * 2 * 5 +3 * (8 + 3 * 3 * 2) + 5 + (9 * (5 + 8 * 8 * 5 + 8) * 4 + 7 * 8 + 3) diff --git a/18/input.small b/18/input.small new file mode 100644 index 0000000..9a421d5 --- /dev/null +++ b/18/input.small @@ -0,0 +1 @@ +((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2 diff --git a/18/src/expression.lalrpop b/18/src/expression.lalrpop new file mode 100644 index 0000000..222a7e6 --- /dev/null +++ b/18/src/expression.lalrpop @@ -0,0 +1,54 @@ +grammar; + +pub Expression: i64 = { + <Term>, + <left:Expression> PLUS <right:Term> => { + left + right + }, + <left:Expression> STAR <right:Term> => { + left * right + }, +}; + +Term: i64 = { + NUMBER => { + <>.parse::<i64>().unwrap() + }, + LEFT_PARENTHESIS <Expression> RIGHT_PARENTHESIS, +}; + +pub ExpressionPro: i64 = { + <Expression2Pro>, + <left:ExpressionPro> STAR <right:Expression2Pro> => { + left * right + }, +}; + +Expression2Pro: i64 = { + <TermPro>, + <left:Expression2Pro> PLUS <right:TermPro> => { + left + right + }, +}; + +TermPro: i64 = { + NUMBER => { + <>.parse::<i64>().unwrap() + }, + LEFT_PARENTHESIS <ExpressionPro> RIGHT_PARENTHESIS, +}; + +match { + r"\p{Zs}+" => { }, + + r"[0-9]+" => NUMBER, + + "+" => PLUS, + + "*" => STAR, + + "(" => LEFT_PARENTHESIS, + + ")" => RIGHT_PARENTHESIS, +} + diff --git a/18/src/main.rs b/18/src/main.rs new file mode 100644 index 0000000..53554a2 --- /dev/null +++ b/18/src/main.rs @@ -0,0 +1,39 @@ +use advent_lib::prelude::*; + +//use std::convert::TryFrom; + +#[macro_use] extern crate lalrpop_util; + +lalrpop_mod!(pub expression); + + + +fn main() -> Result<()> { + let mut args = std::env::args(); + if args.len() != 2 { + eprintln!("Usage: advent input"); + } + let _ = args.next(); + let filename = args.next().unwrap(); + + let input = advent_lib::read_lines_file(&filename)?; + + let parser = expression::ExpressionParser::new(); + let parser_pro = expression::ExpressionProParser::new(); + + let mut sum = 0; + let mut sum_pro = 0; + + for line in &input { + let value = parser.parse(line)?; + sum += value; + + let value_pro = parser_pro.parse(line)?; + sum_pro += value_pro; + } + + println!("{}", sum); + println!("{}", sum_pro); + + Ok(()) +} diff --git a/18/tests/main.rs b/18/tests/main.rs new file mode 100644 index 0000000..394fb0f --- /dev/null +++ b/18/tests/main.rs @@ -0,0 +1,14 @@ +use assert_cmd::prelude::*; +use std::process::Command; + + +#[test] +fn personal_input() -> Result<(), Box<dyn std::error::Error>> { + let mut command = Command::cargo_bin("advent_17")?; + + command.arg("input"); + command.assert().success().stdout("265\n1936\n"); + + Ok(()) +} + diff --git a/Cargo.lock b/Cargo.lock index 38f47ce..102acf1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -139,8 +139,21 @@ dependencies = [ ] [[package]] +name = "advent_18" +version = "0.1.0" +dependencies = [ + "advent_lib", + "assert_cmd", + "lalrpop", + "lalrpop-util", +] + +[[package]] name = "advent_lib" version = "0.1.0" +dependencies = [ + "lalrpop-util", +] [[package]] name = "aho-corasick" @@ -152,6 +165,27 @@ dependencies = [ ] [[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "ascii-canvas" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29" +dependencies = [ + "term", +] + +[[package]] name = "assert_cmd" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -164,12 +198,176 @@ dependencies = [ ] [[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bit-set" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "blake2b_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "crossbeam-utils" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "diff" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" + +[[package]] name = "difference" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" [[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "dirs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "docopt" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969" +dependencies = [ + "lazy_static", + "regex", + "serde", + "strsim", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "ena" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3" +dependencies = [ + "log", +] + +[[package]] name = "escargot" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -180,24 +378,176 @@ dependencies = [ ] [[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fixedbitset" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" + +[[package]] +name = "generic-array" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +dependencies = [ + "typenum", +] + +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "indexmap" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] name = "itoa" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" [[package]] +name = "lalrpop" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60fb56191fb8ed5311597e5750debe6779c9fdb487dbaa5ff302592897d7a2c8" +dependencies = [ + "ascii-canvas", + "atty", + "bit-set", + "diff", + "docopt", + "ena", + "itertools", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax", + "serde", + "serde_derive", + "sha2", + "string_cache", + "term", + "unicode-xid", +] + +[[package]] +name = "lalrpop-util" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6771161eff561647fad8bb7e745e002c304864fb8f436b52b30acda51fca4408" +dependencies = [ + "regex", +] + +[[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] +name = "libc" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] name = "memchr" version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "petgraph" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] name = "predicates" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -242,6 +592,23 @@ dependencies = [ ] [[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_users" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +dependencies = [ + "getrandom", + "redox_syscall", + "rust-argon2", +] + +[[package]] name = "regex" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -260,6 +627,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" [[package]] +name = "rust-argon2" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +dependencies = [ + "base64", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils", +] + +[[package]] name = "ryu" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -297,6 +676,43 @@ dependencies = [ ] [[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer", + "digest", + "fake-simd", + "opaque-debug", +] + +[[package]] +name = "siphasher" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" + +[[package]] +name = "string_cache" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ddb1139b5353f96e429e1a5e19fbaf663bddedaa06d1dbd49f82e352601209a" +dependencies = [ + "lazy_static", + "new_debug_unreachable", + "phf_shared", + "precomputed-hash", + "serde", +] + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + +[[package]] name = "syn" version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -308,6 +724,17 @@ dependencies = [ ] [[package]] +name = "term" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +dependencies = [ + "byteorder", + "dirs", + "winapi", +] + +[[package]] name = "thread_local" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -323,7 +750,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" [[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" + +[[package]] name = "unicode-xid" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index c2dfe1d..75704cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,4 +18,5 @@ members = [ "15", "16", "17", + "18", ] diff --git a/lib/Cargo.toml b/lib/Cargo.toml index f0a0859..6c46cec 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -5,3 +5,4 @@ authors = ["Irene Knapp <ireneista@gmail.com>"] edition = "2018" [dependencies] +lalrpop-util = "0.19" diff --git a/lib/src/error.rs b/lib/src/error.rs index 216df78..4f594b7 100644 --- a/lib/src/error.rs +++ b/lib/src/error.rs @@ -39,3 +39,14 @@ impl From<std::num::ParseIntError> for Error { Error::Parse } } + +impl From<lalrpop_util::ParseError<usize, lalrpop_util::lexer::Token<'_>, + &str>> for Error +{ + fn from(_: lalrpop_util::ParseError<usize, lalrpop_util::lexer::Token<'_>, + &str>) -> Error + { + Error::Parse + } +} + |