1
0
Fork 0
master
Stefan Bühler 2 years ago
parent ef4ae63d33
commit fcb4e887b9
  1. 375
      data/day18/input
  2. 169
      src/bin/day18.rs

@ -0,0 +1,375 @@
5 + 9 + 3 + ((2 + 8 + 2) + 8 + 9 * (4 * 2 * 5) + 6) * 4
7 + ((9 * 5 + 9 + 2 * 7 * 6) + 3 + (3 + 2 * 8 + 6) * 6 + 4 * 8) + 5
9 + (6 * (4 * 8 + 2 * 4 + 8 + 6) * 4 * 5 * (7 * 8 * 9 + 3 * 4) + 8) + ((2 + 7 * 5 + 8) * 5 * (3 + 8) + 5 + 8 * (7 + 8)) + (2 + 2 + 5 + 7 + 7)
6 + (5 * 7 * (6 * 4 * 5 * 3 + 2) + 3) * 3 + 6
9 + 3 + 7 + (5 * (7 * 8 + 3 * 8) * 2)
2 + 4 + (3 * (8 + 2 + 9) + 5 * 6 * 3 * (6 + 9 + 5 * 9 * 9 + 4)) + 8
6 * 3 + 8 + 3 * (9 * 2 + 5 + 4) + 2
2 * (9 + 9 + 5) * 8 + 5 + 6 + 3
3 + (2 + 3 * 3 * 3) + 2 * 3
(7 + 3 + 5 * 9 * 5 * 5) * 5
3 + 7 * 9 * 7
((9 + 5 + 2) * 7 * (2 + 7 * 8 * 7 * 8 + 3)) * 2 * (2 + 3)
2 + 7 * (2 * (5 + 8 + 5 * 7 * 2 * 7) + 2 + 6) * 6 + 2 * 6
(8 * (6 * 3 + 7 + 8 * 4 * 5)) * (9 + 8 * 8 + (9 + 2) + 6) * 7 + 5
3 + 9 + 9 * 5 + 4
7 * ((4 + 9 + 6 + 9 + 5 + 7) * 8 * 7 + 3 + 7 + 6) * 5 * 3 + 8
(2 * (8 + 5 + 5 + 7) + (2 + 9 + 8) * 8 * 8 * (4 * 8 * 7)) * ((6 + 2 + 7 * 2) * (4 * 2 + 9) + (4 + 3 + 8 + 8) + 4 + (2 * 4 * 9 * 9 + 4 + 6)) + 4 * (6 + 3 + (6 + 5 * 6 + 9)) + 9 + 7
4 * 3 + 6
8 * 8
4 + 6 * 6 + 7 * (4 * 2 * 4) * 5
7 * 6 * 8 * 3 * 9
8 + 2 + 4 + ((4 + 9) * 8 + 4 * 4 * 4 * 2)
5 * (5 + 3 + (6 * 6) * (9 * 8 * 4 * 6) + 5 * 8) * (4 + 9 + 2 * (3 + 4) * 2)
(4 + (8 + 4 + 3 + 4 * 7 + 2) * 4 * 8 + 9) * 5 + 4
8 * 6 + (3 + 7 * (7 * 3 + 5 * 4 + 6 * 9)) + 6 * 8
8 * (9 * 4 + (5 + 4 + 3 + 3 + 4)) * (4 * 9)
6 + ((7 + 3 * 4) + (7 + 6)) * ((6 + 6 + 7) + 7 * 9 * (8 + 4 + 7 * 3))
3 * (3 + (3 + 2 * 3 * 5 + 3) * (9 + 8 + 3 * 3 + 8 + 7) + 9) + 3 + 8 * 4 + 4
2 * (5 * 2 + 2 + 8 + (3 * 9 * 5 + 9 * 4) + (2 + 6 * 3 + 8 * 5)) + 3 * 5
4 + 8 * (6 * 6) + 7 * 4 + 2
(3 * 8 * (3 + 2 * 3 + 5 + 5) * 4 * (4 * 2 + 5 * 6 + 2 + 6) + (7 * 7 + 7 * 4)) + 3 * 6 * 8
3 * 8 + 3 * ((5 + 5 * 5 * 8 * 2) * 2 * (9 * 8 * 8) * (6 * 5 * 8 * 3 + 6 + 8) + 6 + 6)
((9 + 7 * 2 * 7 * 2 * 9) * 2 * 8 * 5 + (7 + 4 + 9)) + 8 + 5 * 3 + 3
(2 + 5 + 9 * 7 * 4) + (4 * 3 + 8 * 2)
5 * (8 * 3 * 6 + 8 + (7 + 9 + 4 * 7) * 2) + 5 * 9 * 7
4 + 5 + (9 * 9 + (4 * 6 * 6) + (4 + 5 + 8 + 9 * 2 * 6) * 2 + 4) + ((5 + 6) + (4 * 7 * 5 * 9 * 5 * 6) * 6 * 2 + 4 + (9 * 7 * 5 + 7)) * (7 * (6 + 3 * 5 + 4))
(4 + 8 * 7 + 5 + 7) * 4 * 7 * 8 * 8 + 6
6 * 2 * (5 * 7 + 9 * 7 + 5 + 3)
9 * 5 * 7 + 8 + (5 + 2 * 7 * 8 + 2) + 5
6 + 3 + 2 * 4 + (8 * 9 + 4 + (9 + 5 + 2 * 3)) + 4
(8 + 9 + (6 * 4 * 9 + 6) * 9 + 3) * 6 + (7 + 7 * 6 * 8 + 4) + 4
(9 + (7 * 9 * 6 * 3 + 9 * 7) * 8 * (9 + 4 + 8 + 9) + (6 * 8 * 7 + 6 + 2) * 5) * 8
7 + (9 * 6 * 3 + 8) + 5
9 * 2 + (2 * 9 * (3 * 5)) * (9 + 5 * 7 + (2 * 2 + 7 * 5 * 2 * 2) * 9)
(4 + (5 * 2 * 3)) + 8 * 8 * 6 * 6
(4 + 7 + 6 + 6 * (9 * 5 + 9 * 6 * 7)) * (4 * 3 * 5) * 9 * 3 * 7 + 4
(6 * 6 + 5) + 5 * (7 + 7 * 5 + 4)
(6 + 7) * 4 + 3
4 + 5 * 6 * (8 + (5 * 2) + 8 * 4 + (4 * 6 * 3 * 2) * 8)
8 * (8 + 4 * (2 * 5 + 9 * 8 * 6 * 9) * 3 + 2 * 5)
(4 * 3 * 6 * 7) * 4 + 4
((8 + 8 * 5 + 2 * 5 * 9) + 3 * (3 + 7 * 6 + 5 + 2)) * 3 * 7 + 4 + 6 * 6
4 * (7 + 6 + 7 * (4 + 9 + 8 + 9))
2 + 9 * 5 + (7 + 6 + 5 * 9) * 9
(3 * 3 * 4) * (2 + 3) + 2 * 7
7 * 6 + (2 + 5) + 4 * 3
8 + (2 * 3) * 7 + 4 * 3 + 6
4 * (6 + (6 + 7 * 8 + 7))
6 * (7 + 5 * (2 + 9 * 8 * 8 + 2 * 3) * (3 + 2 + 9) + 5 + 5)
7 + 6 + (7 * 2 * 9 * 9 + 5) * (6 * 9 + 2 * 2 + 2 * 3) * 5 + 2
5 + 4 + 8 * (2 + 2 + 7 + (7 + 6 + 9 + 5 * 7 + 3) * 7 + (2 * 6 * 6))
3 * (4 + (2 * 6 + 3) + 2 * 2 * 5) + (7 + 2)
(3 * (9 + 3 + 7) * 5 * 8) * 2 * ((6 + 7 + 2 * 7 * 9) + 4 * 5 + 9 * 7) + (6 * 2 * 4 * 8 + (5 * 4 + 4 * 3 * 2) + 5) + 2 + 5
(7 + 6 * 8 + 3 + (7 * 2)) * 5 + 5 * 6 + 8
(6 + 3) + (9 * 7 + 3) + (8 * 4) + 9 * 9 * (3 * 3 + (5 * 3 + 9 * 7 * 3))
5 * 2 * 5 + 2 + 5 * 6
((2 + 9 * 8 + 2 * 2 * 4) + 5 + 6 + 4 + (6 + 3 + 2 + 6 * 2)) + 4 + 8 + 6
8 + (8 * 5 * 6) + 5 + 6 + 5
8 * 3 + 7 * 6 + 5 * ((6 * 9 + 5) + 7 + 5 * 2)
(7 + 2 + 5 * (4 + 9 + 5 * 3 * 3) + 2 * (9 + 5 * 3 * 7 + 5 * 5)) * 5 * 3 + 3 * 7
8 + (3 * (4 + 9 * 2 * 4 * 6) + 8 + 5) + 9 + ((2 + 4 * 6 * 4) * 3) + 3
(6 * 9 * 3) + 8
4 + ((6 * 2 + 7) * 4 * 2 + (5 + 9 * 8 + 9) * 9) * 9 * 8 + (6 + 5 + 7 * 7 + (3 * 9 * 3 + 2) * (5 * 2 * 2 * 8 + 2))
4 + ((2 + 7 + 6 + 5) * 8 * 9 * 7 + 5 + 3) * 8 * 2
7 * 2 * 6 + 2 * ((5 * 7) * 6 * (9 + 6 + 7) * 4 + (9 + 7) + 9) * (6 * 3 + 3 + 2 * 8)
5 + 7 + 8 * 2 + (6 * 3 * 7 + 6 * 2)
9 * 7 * 6 * 8 + (4 * 2 * 5 + 4 + 9 + 3)
4 * 5 + (8 + 5 * 4 + 3 * 8) * 3 + 4 * 2
6 + 9 + (2 * (5 + 2 * 9 + 4) * (2 * 9)) + (7 * 5 + 7 * 4 + (8 * 3 * 7 + 4 + 3) + 9)
((6 * 6 * 2 * 6) * (6 + 5) + 7) + 6 + 8
3 + 9 + (5 * 7 + 9 + 5) * 2 * 5 + 2
4 + 6 * 7 + 4 * 9 + ((9 * 2 + 5 + 3 + 8 * 2) * (9 + 3 + 3 * 2 * 2) * 9 * 2 + 7)
8 + 6
6 + 6 * 5 * (7 + 6 + 4) + 2
9 + 7 + (4 + 5 * 2 * 3) * (6 + 3 + 8 + 6 * (2 + 9 * 2 * 9 * 7 * 5)) * (8 * 7 * 7 + 4 + (7 * 5 + 2) + (7 * 8)) + 7
6 * 9 + 3 + 6 + 9
5 * (6 + 7 + 8 + (3 + 7 + 4 * 7) * (2 * 5)) + 2
(8 * 8 * 5) * ((6 + 7 * 6 * 6) + 4 * 8 + 4 + 9) * (9 * 9 + 4 * 2 * 3) * 8
9 * 9 + 7 * 6 + (9 + 7 + 9 * 9)
2 + 9 + (5 * 6 * 7 * 8 * 6 * 2) * 2 * 8 * (3 * 6)
(3 + 2 * 9 * 8) * 2 + 6 + 9 + (3 * 8 * 6)
(4 * 4) + 5
4 + 6 * 2 + 7 * 3 * 7
6 + (5 * (5 + 3 + 6) + 6 + 9) * 2 + 8 + 9
((4 * 9 + 7 + 9 * 8 * 2) * 4 + (9 * 3 + 8) + 8) * 2
8 + 2 + 7 * (8 * 9) + (2 * 9) + 4
(3 * 9 + 7 + 3) * (9 * (8 * 3 + 8 + 7 + 7 * 6)) + 7
9 * 2 + (3 * (7 + 9 * 5) + 6) * 4 * (7 + 6 + 4) + ((9 * 2 + 9 * 3 + 4 * 3) + 5 * (7 * 2 + 9 + 3 * 9) * (6 * 2 + 4 + 6) * 7)
9 * 3 * (7 + 8 * 8) + 9 + 7 * 9
(8 + 4 * (2 * 2)) * ((7 + 8 + 8 * 5 + 6) * 2 + 5 * 4)
(2 + 2 + 6 * 5 * 2 + 4) * 9 * 7 * 2 + (6 * 8 * 5 + 6 + 3)
4 * ((5 + 8 + 4 * 3 + 6) + 9 * (5 * 2 + 9)) * 9 + 8
9 * 5 + 9 + ((7 * 3) * (7 * 4 * 3 * 2) * (9 * 9 * 5) * 2) + 8 * (5 + 4 + 9 + 6)
2 + 6 + (7 * 8 + 3) + 3
(7 + 4 + 7) * 3 * 7
((8 * 8) * 7 + 2 + 5 * (6 * 4 + 4) + (3 + 4 * 8)) * 4 * 8
9 * ((5 * 2 * 5 + 8 * 7) * 2 + 7)
2 + 8 + 8 + 3 * 5
7 + 6 * (6 * 5 + (2 + 6) * 2 * (5 * 6))
5 * (2 + 2 + 2 * 9)
9 + 6 * 4 + (6 * 6 + 4 * 9 * 8 + 8) * 5 + 6
4 * 3
8 * 3 + 7 * 2 + (2 * 3 + 3 * 7 * (4 + 7 * 9 * 7 * 2 * 3))
(9 * (8 * 9)) + 4 + 8 + 5 + ((2 + 5) + (6 + 2 + 2 + 2 * 8) * 6 + 5)
9 + 8 + ((5 * 7) + 9 * 3 + 8) * 7
(3 * 5 * (2 + 4 + 3 * 7)) + 8 * 7
(9 * 5 * 9 + 5 * (7 + 4 * 8)) * 7 + 3
((6 * 9 + 5 + 8) + 6 * 5 + 9) * 2 * 9 + (8 + (8 * 2 * 2) * 4 + (4 * 5) + 3) * (4 * 4 + 6 + 5 + 6)
4 + (3 * (6 + 8 * 6 * 8 * 9) * (2 * 7 + 9 * 4 * 2)) * 2 + 7 + (6 + 9 + 6) * 2
2 + 5 + 9 * 5
4 + (9 * 2) + 5 + 3 * 6 * (9 * 3 * 2 * 9 * 7)
(8 + (2 + 8 + 5 * 7 + 6 + 5) * 4 + 9) * 4 + 6
3 + (9 + (8 + 2 * 2 + 9 + 7 + 7)) + 9
(7 + 6 * 8 + 6 + (7 + 7 * 8)) + 2
(7 * 7 + 6 * 9 * 8) + 6 + 3 + 6
(4 * 5 * 8 * 6 + 5 * 9) * (2 + (8 + 5 * 9 * 2) + 6 * 8 * 2 * 5) * 5 * 5 + 4
4 + (6 + 5 * (9 * 5 * 8 + 4 * 7 + 7) * 6) + 9 * 4 * 7 * 2
((8 + 2 + 8 * 4 * 6) * 2 + 3) + 6 + 8
(3 * 8 * 2 * (3 + 7 * 9) * 2 * 4) * (3 + 6 + (8 * 2 + 8 + 2) * (8 + 2) + 9) * (3 * 5 * 3 + 2) + 3 * 7
7 + 2 + 3 + (9 * 7)
(2 * 6 + 4 * 3 + 2) * 5 + 3 * 8 * 7 * (8 + 3 + 3 + 9)
7 * (9 * 2 + 8 + 2 * 9) + (7 * 7 + (2 * 2 + 2 * 4 * 9 + 9) + 6 + 5) * 2 * (3 + (4 + 8 * 7 * 7) + 5 * 2) * 9
6 + 5 * 7 * 6 + (2 * (6 + 6 + 2 + 9 * 5 * 3) * 5) + 2
(3 + 6 + 8 * 3) + 7 * 5 + 9 + 3
(3 + 6 + 4 * 6) * 5
4 * 7 * (9 * 9 + 7 + 2 * (4 * 4 + 4 + 9 * 8) + 5) + 8 * 7 * 7
6 + ((6 + 2) + 4 * (7 * 5 * 2) * 5 * 6)
3 + (3 * 9 + (2 + 3 + 8 * 8 * 8) + 4 * 3 + 7) * 8
(3 + 5 + 8 + 6) * 5 + ((4 * 4 * 8 + 7 * 7 + 6) * 2 * (4 * 3 + 7) * (8 + 5 * 8 + 8 + 4) + (6 + 3 + 2 + 2)) * 6 + 2 + 5
8 + ((8 + 7 * 9 + 9) + 6 * 8)
3 * (4 + (2 + 4 * 7) + 5) + 5
6 + 8 * (6 + 2 * 9) + 4 + 4
6 + (9 * 2 * (2 * 7 + 7 * 6 * 7 * 4)) + 4
4 + 4 + (5 * 8 * 4 * (4 + 4 + 6 + 4 * 3) + (6 + 7) * 6) * 8 * (5 + 7 + 4 * 7 + 9 * 4)
8 + ((8 + 5 + 6 + 2 * 6) * 4 * (3 * 5 * 5) + 9 * 8 * 8) * 8 + 2 * 5 + 6
4 + 4 * (8 * 5 + 5 * 2 * 5 * 2) + 2 + 3 * 7
6 + 4 + (9 + 4 * 3 * 2 + 7) * 5 + 5
8 * ((3 + 5) * 7 * (5 + 3 * 6 * 4) + 5) * (2 * 6 * (5 + 6) * 9) * (5 * 7 + 3 + (5 * 9 * 8)) * 6 + 7
9 + 2 * 7 * 6 * (2 + 6 * (6 * 5 + 5 + 3 + 8) * 8 + 5 * 9)
((8 + 4) * (3 * 7 + 8 * 5 + 4) + 7 * 9 * (6 + 3 * 5 * 3) * 2) * 7 + (4 * 9) * 4 + 4 + 3
9 * (9 + 2 * 5 + 4 + 8 + 7) + 2 + 9 * 3
(9 * 9 + 4 * (2 + 6 + 9) * 2) + 8 * (3 + 6 + 6) * 8 * 9 * (6 * (2 * 7 + 3) * 6)
5 * (3 * 2 * 6 + 9) * 2 * 5 + 3
((9 + 6) * 3 + 3) * 5 * 5 + 2 + ((8 + 7 + 3) + (7 + 5) * 4 * 3 * (6 + 6 + 4 + 4))
4 + (3 + 6 + 6 * 5 * 4 * 2) * (5 + 2 * 3) * (8 * 6 * 5 * 3) + 5
(7 + (3 + 3 + 9 * 4 * 9)) + 5 * 3 * 7 * 3
4 + (9 + (5 * 6 + 2) + 3 + 7) + 3 + 9 + ((5 * 8 * 6) + 8) + (6 + 4 + 8 * 4 * (9 + 2 * 4 * 5 * 6))
5 * 4 + 9 * (3 * 2 * (8 + 5 + 6 * 2 * 4) * 4) * 9
7 + 4 * 5 + (3 * 2 + 4 + 2)
2 + (6 * 8 + 3 * (4 * 8 + 4 * 2 * 3 + 6)) + 8 + 6 * 8 + (4 + 8 * 9 + 5 * 6 + 8)
2 * 2 * (3 + 7 * 8 * 2 + 8 + (8 * 6 + 5 * 8 + 5)) + 7 * 3
(5 * 5 * 3 + 8 + (6 + 9 + 2)) + 7 + 5 * 6
(4 * 5 + (6 + 4 + 6 + 4) + 5 + 7) * 5
7 + (6 * 5 * 8 + 9 * 8 * (5 * 4 * 8 + 3 + 9))
3 * (5 * 2) + 4 * 8
((5 * 8 + 6 * 4 * 4 + 7) * 4 * 6) + (9 * (4 * 2 * 6 + 7 + 7 + 6) * 6) * 2 * 5 * 2
(3 + 7) + 5 * (7 * 4 + 6 + 4 + 7 * (4 * 3 * 6 * 9 * 2)) * 5 * 6
((6 + 9) * 7) * 6 + (5 * 3 * 3 * 7 * 2 * 8) + 2
6 + (7 + 5 * 3 * (4 + 8 * 9 * 9 + 7)) + 9 * 5 + (5 * 3 * 2 * 7 * (6 + 6 + 6 * 7))
(6 + 2 + 4 * 5 * (3 * 9) + 7) + ((4 + 2 + 7) * 9) * 4 * 7 + 6 * 9
9 + 6 * (2 * 6 * (2 + 5 * 4 * 6) + 3)
(6 + (9 + 4 * 6) + 6) + 7
6 + 5 * 7
(8 * 8 * 7 * 4 * 2) + 6 * 3 + (9 + 9 + 7 + (9 + 2 * 2 * 6 * 7) + 3) * 7
4 + 4 + (3 + 9 * (2 * 7 * 7 * 3) * 6) + 4 * 4
(2 * 2 * 6) + 8 + (5 + 4) * 4 * 5
6 * 3 + 3 * 7
3 * 7 + (2 + (3 + 6 * 5 * 4 + 5 * 2) * 6 * 5 * 9) + ((8 + 2 * 2 * 5 + 2) + (2 + 4) + 7 * 7 + (3 * 3 * 5 + 5 * 4 + 3) * 7) * 6
8 + 7 + 4 * ((8 * 7 + 4) + 4) + (4 + 2 * 3) * 2
2 + 3 * 2 * (8 + (6 + 3 + 2 * 2 * 5 * 5) * 9) * 6 * 5
2 * 5 + 5 * (8 + (8 * 7) + 2 + (8 + 2 * 3)) + 6
(8 + (2 + 4 + 5) + 2 * 3) * 5
7 + 7 * (6 + 9 + (6 + 5) * 3 * 5)
2 + (5 * (9 * 5 + 4 + 3 + 8 * 9) + 9)
2 + 7 + ((2 * 8) + 4) + 7
7 * 9 * (2 * 7 + 9 + 6)
(4 + 5 + (8 + 4)) + 4 * 2 * 8 + 7 * 5
3 + 5 + 2 + 8 + 7 + 2
(2 * 6 + 8) + (2 + 3 * 6 * 5) + 3 * 4
9 * (2 + 8 + 2 * (2 * 7 + 9 + 8 * 6 + 8) * 3 * (8 + 5 + 8 + 6 + 9 + 9)) * 2 + 4
(2 + (4 * 9 * 7) * (6 + 4) * (9 * 2 * 4 + 5) + 5) + 8 * 6 + 4
(7 + (4 * 5 + 4 * 2 + 7 + 6) + 5) + 9 + 7
2 + 5 * (7 + (9 + 8) * 7)
3 * ((9 * 6) * 6 * 5 * 5 * (6 + 6 + 9 * 4 + 7 * 6)) + 6 + 2 + 2 * 9
(6 * 6 * 8 * 5 + 8) + 4 * (9 + 6) * 5 * ((9 + 7) + (3 * 6 * 8 + 5 * 4 + 7) + 9 + 5) + (2 + 6 + 9 * 2 + 8)
8 + 2 + 2 * 6 + 8
((2 + 8 + 6 * 2 + 9 + 8) + 8 * 7 + 4 * 4 + 2) + 9 + (4 * 3 + 2 + (3 * 2 + 8) + 4) + 9
3 * 7 + (5 * (9 + 6 * 5) + 4 + 6 + 8 + 2) * (3 * 7 + 3) + 8
5 * (4 + 6 + (2 * 8 + 9 + 3 + 2 * 2) * (4 + 5 * 2 * 3 * 8 * 3)) + 9
(6 + 9 + 8 * 5) + (8 * (6 + 8 + 8 + 9 + 3 * 2) * 3 + (8 * 4 + 5 + 9 + 5 * 6)) + 3 * (2 * (7 * 6 + 9 + 8 * 9 + 3) + 3 * 4 * 4) + 8 + (3 + 2)
6 + ((8 * 8 + 5 + 3 + 4 * 7) * 2 + (2 * 8 * 7)) * 4 + 7 + 9 * 8
6 * (4 + 4 + 7)
6 * (8 * 4 * 3 * (4 + 5 + 7 + 9 * 3) * 2)
9 + 8 + (5 * 2 + 9) + (8 * (3 * 9) + 3 + (7 + 8 + 4) + 3) + 7 + 5
8 + 4 * 8 * (4 + 8 * (9 * 7 * 6 + 2 + 5)) * (4 * 3)
(7 * 2 * 6 * 2 * 8) + 6
(2 * (7 + 2) + (5 + 8 * 8 + 9 + 6)) * 8 + 3 + 9 * (6 + (7 * 2 * 2 + 4) * 8 * 4 * (3 + 3 * 3 + 8 + 4) * 5) * 8
7 * (3 + 7 + 3 * (2 * 5 + 5) + 6 * 5) * 8 * 2
3 * 9 * 5 * ((4 + 5 + 3) * 6 + 8 + 9 * (6 + 6)) + (6 * 6)
(4 * 8) + (7 * 9 + (3 * 4 + 8 * 7 + 5 + 3) * (7 + 6 + 2 * 7 * 6 * 2)) + ((4 + 7 + 3 + 9) * 5) + 8
4 + (9 * 4 * 3 * 7 * 6) * 3 * 6 * 7 * 4
5 * 9 + ((8 * 8 * 6 + 2 + 4 * 3) * 5 + (7 * 5) * 6 * 5)
6 + 7 * 3 + (6 + 6 + (9 + 7 * 5 + 5)) * 7
5 + ((6 + 9) * 8 * (8 + 3 + 3 * 5 + 9 * 9) * 3 + 5 * 9) + ((6 + 2 + 3) + 6 + 7 + 7) * 6 * 6 * 4
6 + 5 + (9 + 9 + 5 * (2 + 3 * 4 + 2) * 9)
(9 + 4) * 7 * (9 * 7 + 5 * 4 + 4 + 5) + 8
4 * 2 * 4
9 + ((4 * 6 + 9) + (8 * 3 + 6 * 5) + 3 + 4 * 8) * 8 * (2 + 6 * 3 * 2)
9 + 9 * 3 + ((9 * 7 * 6 + 8) + 9 * 4 + 6) * 5
(3 * 2 * 8 + 7 + 7) * 8 * 4
(9 + 2 * 4 * 7) * 8 * (8 * 4 * 4 + 5) + 4 + ((9 * 8 * 5 + 6 + 8) * 5 * (4 * 9 * 8) * 7) * 2
(9 + 6 + 7 * 6 + 9 * 4) + 4 * (4 * (6 * 5 + 8 * 9 + 2) * 4 + (3 * 8 + 8) + 3 + 6) * 6
9 * 9 * (4 + 9 * (2 + 7) * (5 + 3 + 5) + (6 * 4))
(9 + 6 * (2 + 3 + 2) * 8 + 3) * 5 * 6 + 7 + 9 * 2
3 + 4 * (2 + 4 + 6 + 2 * 7 + 4) + 5
7 + ((8 + 3 * 9) + 7 + 7 + 5) * (4 * (6 * 3 * 4 * 4 + 9 * 8) * 7 + 2 + 2) + ((6 + 8 * 5 + 2) + 4 + 2)
(3 * (8 * 2)) + 8 * 5 * (5 + 4 * 4 + 8 * 8 * 8) * 2
7 + 8 * 8 * (7 + 7 * (8 * 7 + 2 + 6 + 6 + 5) + 3 * 2)
9 * 9 * 4 * ((4 * 6 + 7 + 9 * 4 + 2) * 5 + 7 + 3 * 3 + 8) * ((4 + 6) + 4 + (4 * 5 * 7 + 4 + 2) + 2)
3 * 2 * 9 + ((8 * 7 * 6 * 3) * 6 * 9 + 3 + 2 + 8)
(3 * 7 + 6 + 7 * 3 + 7) + (9 + 4) + (8 * 3 * 8 + 5) * 2 + 8
3 + 7 + ((9 * 6 * 9 + 7) + 3 + 2 * 4 * (2 * 2)) + 7
9 + 3 * (5 * 4 + 2 + (9 * 2 * 3 * 6) * 6 * 7) * 7
((5 * 2 + 8 * 5 + 2) + 8) * (5 * 3)
(5 + 8 + 3) * (8 + 7 * 8 + (7 + 9 + 2 * 5 + 3))
(6 * (8 * 6 * 2 * 9) * 8 + 5 + 7 * 6) * 3 + 9 * 2 + 3 * 9
4 * 4 + 7 * 4 * (5 + 8) * 3
2 + 7 + (5 * 9 * 2 * 7 + 4)
6 * ((8 + 7) + (6 + 3 * 2 * 9 + 4) * 2 + 8 + 5 + 5)
5 * (2 + 4 * 8 + 3 + 3 + 5) * 4
9 * 2 + 3 * 9 * (8 + (4 * 8 * 2 * 7 + 3) * (9 + 4 * 9 + 3 * 8 + 7)) + 3
3 + 7 + 7 * 6 * 8 + 3
2 + 6 * (6 * 3 + 3 + (9 * 2 + 2)) * 4
((4 + 4 * 4 + 4) + 2 * 9 * 2) + 4 * 9
((7 * 4 + 5) * 8 + 7 + (4 * 6 + 8 + 5 * 6 * 6) + (5 + 3 * 7)) + (2 * (2 + 6) + 4 + 9 + 4 * 3)
6 * (3 + 5 + 9) * ((4 + 9) + 5) + 3 * 6 + 9
(7 * 2 * (6 * 8 * 9 * 3 * 9)) * 2
5 + (5 * (6 + 7 + 5 * 4)) + 9 + (9 + 9 + 6 + 5 + 4) + 8
((9 * 3 + 8 + 3 + 8 + 5) * 8 + 4 + 3) * 2 * 9 + 2
5 * ((5 + 3 + 9 * 6 + 9) * (3 * 6 * 6 * 2) + 6 * 3 * 9 * 3)
(4 * 4 * 7 * 2 + 2 * 7) * 5 * 5 + 7
3 + (7 * (8 + 6 * 5 * 3)) + 9
5 + ((5 + 6) * (9 * 3)) + 5 * 6 + 8 * 6
2 * 6 * (8 * 8 + 5 * (9 + 6 + 3 * 6 + 9) * 3 + 4) * (4 + 4 * 4 * (8 + 5) + 7 + 6) + 5
((7 + 3 * 6) + 6 + (7 * 8 + 4 + 2 + 2 + 2)) + 7 * (4 + 2 + 2) + ((6 + 2) * 6) * 6 + 9
(6 + 2 + 9 * 7) * 7 * 4 + 8
2 + 2 * ((4 + 4 * 8) * 5) * 3 + 8 * ((9 + 8) + 8 * 6)
(6 * 8 * 6 + 2 + (4 * 6 + 4 * 7 + 7) * 2) * 7 * ((5 + 9 + 5) * 8 * 3)
8 + (3 + 5 * 9 * 6 + 3)
2 * 6 + 8 + (2 + (4 + 8 * 5 * 4) + 9) * (7 * (8 * 9 + 9 + 3)) * 8
(3 + (7 * 4 + 7) + 7) + 9 + 3 * (8 * (6 * 3) + 4) + 9 * 2
(4 + 5 * (2 + 6 + 5) * 4) * 9 + 9 + 3
9 + (4 * 7 * 6 * 9 + 8 + 3) * (6 * 4 + 4)
(3 * (2 * 4) * (3 * 7 + 4 * 4) + 2 + 3) * 3 + 3 * 8
7 * (8 + 5 * (3 * 6) + 5 + (2 + 4 * 6 * 7 * 6))
(5 + 7 + 6 * 6) * 8 + 2 * 4 + (2 + (2 + 3 * 5 * 2 + 5) * 7 + 4 * 4)
(3 + 2 + 2 * 4 + (8 + 6)) + 2 + 9 + 3 + 6 + 7
9 + 2 + (7 + 6)
(7 * (6 * 4 * 9 * 4 + 2 + 9) * 5 + 7 + 9) * 3 + 5 + 3 * 7
((3 + 5 * 5) + 4 + (7 * 7)) + (2 + 8 + 7 + 6 + 5 + (7 + 7 + 6 + 4 + 6)) + 8 + 7 + (5 + (5 * 7 * 9 * 4) * 2 + 7)
(5 * 3 + 4) * 4 + 3 + ((3 * 3 * 3 + 5) * 7) * 8 + 7
7 + (2 + 3 * (8 + 4)) * ((2 + 5) + 6 + 6) + 9 + 7
6 + 6 + 3 + 3
7 + 9 + 6 * ((6 * 7 + 2) + (6 * 4 * 4 + 4) * 9) * 3 * (5 * 2 * 8 * 9)
(6 * (2 + 4 * 9 + 3 + 9 * 4) * 5 + 6 + 8 * 7) * 5 * 5 * (9 * 8)
8 + 2 + (4 + 3 * (8 * 6 + 5 + 8)) + 5 + 2
6 * ((9 * 3 + 8 * 8 + 2 * 5) * 8 + 7) * 7 * 5 + 6
2 + 3 + 5 * 5 + ((3 * 7 * 6 * 8 * 3) + 9 * 9) + 2
7 + 2 * 2 + (5 * (8 + 5 * 2) * (3 * 9 + 7 * 7 * 2) * 7 + 8 * 2) + 4
5 * 6 * (7 + 2 * 8)
9 * 4 + ((2 + 3 + 2 + 2 * 8) + 7) * (2 * 9 + 2 + 6)
((5 + 5 + 8) + 8 + 8 + 9 * 7 * 8) * (8 + 5 + 9 + 4) + 5 + 7 + 8 * 3
(3 * 6 + (3 * 8 + 5 + 4 + 6) + (6 * 4 + 6 * 8 * 4) + 7) * (5 * (3 * 7 + 5 + 5 + 2)) * 5 * 6
5 + 6 * 5 * 8 + 2 * (7 + 2 * 9)
4 * 4 + 4 + 3 + 2 + 3
((2 * 4) + 5 * 6 + 2 + 3 + 2) + 4 * 8
5 + (5 + (6 * 3 + 3 * 6) + 7 + 9 * 9) * 9 * 7 + 4
9 + ((8 * 7) + 3 * 5) * 7
4 + (9 + 3 * 7) * 8 * 3
6 + (8 + 9 * 5 + 2) * 3 + (3 * 7)
(8 * 6 * 9) + 9 * 7 * 6 + 2 * (4 + 4 + (2 * 3 + 3 * 4 * 8) + (8 * 5))
(3 + 7) + 8 * 7 * (9 + (8 + 5 + 9) + 3) * 4 * 4
((8 * 5 + 5 + 5 * 3 + 5) + 7 * (3 + 2 * 2 * 3 + 7 * 3) * 2) * 5 + 3 + 3
8 + 3 * 6 + (9 * 7 + 4 * (3 + 3 + 9)) + 3
8 * (8 + 4 + 5 + (9 * 3)) * 5 + 7 + 3 + 7
4 * ((4 * 5 * 4) + 4) * 8 * (2 + 2 + 4 + 7 + 2 + 2)
9 * (6 * 9 + 2 + (7 + 7 + 5 + 4) + 2 + 2) + 5 * ((4 * 3) + (2 * 2) * 6) + 9
8 + (9 * (8 + 6 * 7 * 7 + 3) + 7 * 2 + 5) * 4
5 + (8 + (5 * 3 + 6 + 6 * 3)) * 6 + 4 + ((5 * 3 * 2) + 6 * (4 * 3 + 6) + (4 + 5 * 8) + 9 + 2) * 9
4 * (3 + (9 * 5 * 2 + 2) * 6 + 6 * 4 + 7) * 3 + 3 * (2 * 8 * 5 * 3 + (6 * 7 * 4 + 4))
4 + 6
(2 + 3 + 9) + (9 * 4) * 7 + (2 * 6 * 8 + 3 * (6 + 7)) + 7 + 5
4 + ((9 * 5 + 9) * 6) + 5 * 8 + 6 * 5
2 + (8 * 6 + (6 + 5 * 8) + 3 + 7 + 9) + 6 * (4 * 2 * 5)
(4 * 3 + 5 * 2 + (4 * 4 * 4 + 3 * 2) + (4 + 3 + 9 * 5 + 5)) + 5 * 3 + 2 * (9 * 2 * 5 + 6)
6 * 6 + (3 + (8 * 4 + 8 + 7))
4 + (5 + 4 + 8 * 8) + 6 + 2 + 7 * 5
5 + (6 * 2) * 7 + 5 * 5
2 + 3 + (5 * 4) * 4 + 8 * (5 * 8 * 9 + 8 + 4)
(5 * 3 * 4 * 9 * 3 + 6) + 5 * (9 * 4 + 4)
8 * 7
4 * 2 + 6 + 9 + 6 * (2 * (7 * 9 * 7 + 3 * 9 * 8) * 4 * 4 + 6 + 3)
(3 + 5 * 2) * (8 + 2 + 2 * 7 + 2 * 6) + 9
2 * (4 + 2 + 5 + (4 + 3 * 6 * 7 * 7) + (9 + 7 + 5 + 6)) + (3 * 9)
(3 * 7 + 5 * 7) * ((4 + 2 + 9 + 3 + 3 * 3) + 6 * 7 + (4 * 3 + 8)) + 7 * 9
9 + 9 + 6
((9 + 4 * 4 * 4) * 6 + 2 * 9 * 4 * 9) * 3 + 3 * 8 + 4
7 * 7 + 8 * 3 + 5 * (3 * 7)
((5 * 9) * 3 + 8 * 6 * 4 + 3) + (6 + 7 * 4 + 8) + 8
7 * (5 * 4 * 3 * (2 * 5 * 2) + 6)
9 + 5 * (7 + 8 * 4) * 3 + 2 + (2 + 3 + (8 + 4 + 4 * 5 * 8 + 6) + (4 * 8 + 9 * 4 * 9 * 5))
((9 * 9) + 2 * 8 + 9 + (4 + 9 * 8) + (6 * 3 + 9 * 6)) + (3 * 9 + 8 + 8 * 9) + 5 * 8
((2 * 2 + 5) * (2 + 6 * 5 + 8)) * 5 + 3 * 4
8 + (9 * (7 * 5 * 3 * 2 + 9) + 9) * 6
(6 + (9 * 4 * 7 + 2 + 9) * 7 + 6) + (2 * 4 + 5 + (5 + 8) * 3 + (8 * 9 + 2 * 4 * 4 + 5)) + 2 + 4
3 + 5 * 8
5 + 9 * 4 * 7 + 5 + (9 * 5 * 2 + 8 * 3)
3 * (7 + 6 * (8 + 6) + (9 + 3 * 3)) * 6 + 4 * 3 * 3
(9 * 5 + 2 * 8 + 4) * (8 + (5 * 5 * 6 + 2 + 2)) * 6 * 6 + (5 * 3 + 3) + ((2 * 7 + 7 * 7 + 7 + 3) * 4 + 5 * 3 * 3)
(5 + 5 * 4 + 7 * 8) * (9 * 9 * (4 + 4 * 2 * 5 * 2)) * 8 * 7 + 8 * 9
3 * 5 + 5 * (2 * 3 + 7)
(7 * 5) * 8 * 4 * 5
6 * 3 * 5 * ((4 + 4 * 9 + 2 * 3) * 5) + (7 * 3 * 5 + (8 * 7 + 7 * 6) + 4) * 2
7 + (6 * (5 + 6 * 7)) * 9 * 8 + 3 + 7
6 * 3 * (8 * 8 * 7 * 8 * 2 * 8) * (6 + 5 + (2 + 9 * 6) + 5 * 3) + 6
2 * 9 + 8 + (9 + 9 + 9 * 9 * 3)
((2 + 7) + 2 + 2 * (8 * 2 * 5 * 2)) + 8 + 2 * 3 + 9
8 + 7 + (2 * 5) + 9 * (5 + 4 + 8 + 4) * 3
6 * 9 * 6 + 4 + (5 * 4 * 7 * 9 * (8 + 9 * 3 + 8 + 4) * 6) * 4
8 * (3 * 4 * 3) * (2 * 2 * 8 * 5) + 8 * 4
2 * 7 * ((2 + 2 * 6 * 2) + 3 * 8 * (8 + 6 * 4 + 8 + 2) + 7)
7 + (4 * (5 * 8 * 5)) + 7
5 + (6 + 8)
2 * 4 + (3 * 6 + 8 + 2) * (7 + 3 + 6 + 8)
9 * 3 * 4 + 8 + 3 + (7 + 9 + 9 * 8 + 3 + (8 + 5 + 2 + 9))
6 + (3 + 9 + 8 + 6 * 8 * 7) + 6 * 8
8 + 3 + ((2 + 3) * 8 * 5 + 8 * (2 * 9 * 8 + 5 * 2) + 2)
(8 + 3 + (9 + 9 * 4 * 4) + (3 + 8 * 3 * 4 + 2) * 8) + (5 * 4 + 7 * 3 + (3 + 2 + 2)) + 8 * 5
(8 + 8 * 6 * 3 + (5 + 7)) * 2 * (4 + 3 * 5 * 2 * 9)
(7 + 8 * (6 * 5 + 3 + 2 + 3 * 2) * 7 * 7 * 2) + 4 * 3 * ((3 * 3 * 8 + 8 + 5 * 6) + 5)
3 * 5 + (6 + 7 + 7 + 5) + 2
((2 + 8 * 7 * 5) * (8 + 6 * 5 + 7 * 7 + 3) + (2 * 6) + (9 + 5 + 2 * 7)) * 4 * 5 * 7
7 * 2 * 5 * (8 * 6 * 3) * (5 + (7 * 8 * 3))
(8 + 2 * 5 * 9) + 6 * (7 * 8) + 5 * 9
8 + (5 + (9 * 8) * (7 + 7 * 4 + 7) + 5 + 2) + ((4 + 7 * 3) + (6 + 6 * 8 * 5 + 3) * 6 * (9 * 6 * 6) * 8 * 8) * 3
(7 * 7 + 7) * 3 + 4 * 6
(3 * 2 * (3 + 9 * 3 * 9 * 9) * 6 + 3) * 4 * (8 + 9 + 3 + 6 + 4 * 5)
(7 + 7 * 6) + 6 + 9 * (5 * 4 * 5 * 7 * (4 * 2 * 3 + 8) + 3) + (9 + 8) * 8
4 + (8 + 3 * 3) * ((5 * 7) + 9 + 4) * 2 + 8 + 3
(8 * (6 * 8 + 3 * 3 + 3 + 6) + 5 * (2 * 5 * 5 * 5 + 9 * 8) * 7 + 6) * 7 + 3 * (2 + (6 * 2 + 4 * 2 * 6) * 8) * 3 * 7
3 + 4 + (5 + 3 * (3 + 3 * 6) * 8 * 8 * 9) * 3
(4 + 8) + 7 + 6 * 2 * (8 * 7 * (7 + 7 * 3))
3 * ((7 + 8 + 8 * 7) * 5 * 3 + 8 * 2) * 5 + 2
9 + 2 * 6 * (5 + 8 * (8 * 4 * 7 + 6 + 3 * 8) + 7) + 4 * 3
2 + 6 * 4 * 6 * (3 + 5 * (2 + 4 + 9 * 8 + 6))
3 + (7 + 9 * (3 + 4 * 7 + 2 + 7 * 5)) * (9 + (2 + 9 * 8)) * (7 * 4 + 7 * 4 + (7 + 2 * 5 + 5 * 2))
(7 + 7 * 5 + (3 + 3 * 4)) + 2 + 4 + 8 + 3
2 * (9 + 7 + (6 * 2 + 9)) * (2 * 5 * 3 * 8 * 2 + (3 * 3 * 6))
8 * (8 + 8 + 7 * (7 + 3)) + 4
4 + 9 + 5 * 3
9 * (7 * 7 * (6 + 9 * 7 + 9 * 4) * 9) + 2
(2 * 4 + (8 * 8 * 5) + 4) + 3 + 3 * 3 + 2 + 8
5 + (4 + 7 + (3 * 9) * (5 + 6 * 5 + 4 + 5) * 9) + 6 * 3 * 2 + 7
7 + (7 * 9 * 7 + (8 * 4 + 7 + 7 + 2) * (4 + 5 + 7 + 6 + 6) + 9) * 5 + 5 + 2 + 3
((6 + 7 + 8 + 6 + 7) + 8 * 4 + 8 + 8) * (4 * 6) + 7 * 6

@ -0,0 +1,169 @@
const INPUT: &str = include_str!("../../data/day18/input");
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
enum Op {
Sum,
Mul,
}
impl Op {
fn apply<T>(self, a: T, b: T) -> T
where
T: std::ops::Add<T, Output=T> + std::ops::Mul<T, Output=T>,
{
match self {
Self::Sum => a + b,
Self::Mul => a * b,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
enum Elem<T> {
ParenLeft,
Op(Op),
Item(T),
}
impl<T> Elem<T> {
fn expect_item(self) -> T {
if let Elem::Item(item) = self {
item
} else {
panic!("Expected item");
}
}
fn expect_op(self) -> Op {
if let Elem::Op(op) = self {
op
} else {
panic!("Expected op");
}
}
fn expect_paren_left(self) {
if let Elem::ParenLeft = self {
()
} else {
panic!("Expected '('");
}
}
}
#[derive(Debug)]
struct Stack<T> {
elems: Vec<Elem<T>>,
same_precedence: bool,
}
impl<T> Stack<T>
where
T: std::ops::Add<T, Output=T> + std::ops::Mul<T, Output=T> + std::fmt::Debug,
{
fn new(same_precedence: bool) -> Self {
Self {
elems: Vec::new(),
same_precedence,
}
}
fn push_item(&mut self, item: T) {
self.elems.push(Elem::Item(item))
}
fn push_op(&mut self, op: Op) {
self.elems.push(Elem::Op(op))
}
fn push_paren_left(&mut self) {
self.elems.push(Elem::ParenLeft)
}
fn _peek_top(&self) -> &Elem<T> {
&self.elems[self.elems.len() - 1]
}
fn _peek_below_top(&self) -> &Elem<T> {
&self.elems[self.elems.len() - 2]
}
fn pop_item(&mut self) -> T {
self.elems.pop().expect("expect non empty stack").expect_item()
}
fn pop_op(&mut self) -> Op {
self.elems.pop().expect("expect non empty stack").expect_op()
}
fn pop_paren_left(&mut self) {
self.elems.pop().expect("expect non empty stack").expect_paren_left()
}
fn _do_reduce_op(&self, finish: bool) -> bool {
match self._peek_below_top() {
Elem::Op(Op::Sum) => true,
Elem::Op(Op::Mul) => finish || self.same_precedence,
_ => false,
}
}
fn is_empty(&self) -> bool {
self.elems.is_empty()
}
fn eval_top(&mut self, finish: bool) {
while self.elems.len() > 2 && matches!(self._peek_top(), Elem::Item(_)) && self._do_reduce_op(finish) {
let value2 = self.pop_item();
let op = self.pop_op();
let value1 = self.pop_item();
self.push_item(op.apply(value1, value2));
}
}
}
fn parse<T>(mut line: &str, same_precedence: bool) -> T
where
T: std::ops::Add<T, Output=T> + std::ops::Mul<T, Output=T> + std::str::FromStr + std::fmt::Debug,
<T as std::str::FromStr>::Err: std::fmt::Debug,
{
let mut stack = Stack::new(same_precedence);
loop {
line = line.trim();
if line.is_empty() {
break;
}
if let Some(rem) = line.strip_prefix('+') {
stack.push_op(Op::Sum);
line = rem;
} else if let Some(rem) = line.strip_prefix('*') {
stack.push_op(Op::Mul);
line = rem;
} else if let Some(rem) = line.strip_prefix('(') {
stack.push_paren_left();
line = rem;
} else if let Some(rem) = line.strip_prefix(')') {
stack.eval_top(true);
let item = stack.pop_item();
stack.pop_paren_left();
stack.push_item(item);
line = rem;
} else {
let num_end = line.find(|c: char| !c.is_ascii_digit()).unwrap_or(line.len());
let num = line[..num_end].parse::<T>().unwrap();
stack.push_item(num);
line = &line[num_end..];
}
stack.eval_top(false);
}
stack.eval_top(true);
let item = stack.pop_item();
assert!(stack.is_empty());
item
}
fn main() {
println!("Sum of evaluated lines (simple math): {}", INPUT.lines().map(|l| parse::<u64>(l, true)).sum::<u64>());
println!("Sum of evaluated lines (advanced math): {}", INPUT.lines().map(|l| parse::<u64>(l, false)).sum::<u64>());
}
Loading…
Cancel
Save