Solve day05
This commit is contained in:
parent
3b4a20bce0
commit
35da387b49
513
day05/input
Normal file
513
day05/input
Normal file
|
@ -0,0 +1,513 @@
|
|||
[C] [S] [H]
|
||||
[F] [B] [C] [S] [W]
|
||||
[B] [W] [W] [M] [S] [B]
|
||||
[L] [H] [G] [L] [P] [F] [Q]
|
||||
[D] [P] [J] [F] [T] [G] [M] [T]
|
||||
[P] [G] [B] [N] [L] [W] [P] [W] [R]
|
||||
[Z] [V] [W] [J] [J] [C] [T] [S] [C]
|
||||
[S] [N] [F] [G] [W] [B] [H] [F] [N]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 2 from 5 to 9
|
||||
move 3 from 1 to 7
|
||||
move 2 from 3 to 9
|
||||
move 6 from 9 to 5
|
||||
move 2 from 3 to 8
|
||||
move 9 from 7 to 8
|
||||
move 15 from 8 to 9
|
||||
move 3 from 1 to 6
|
||||
move 6 from 4 to 2
|
||||
move 6 from 5 to 6
|
||||
move 1 from 4 to 2
|
||||
move 14 from 6 to 2
|
||||
move 2 from 1 to 5
|
||||
move 1 from 7 to 3
|
||||
move 1 from 4 to 8
|
||||
move 2 from 5 to 6
|
||||
move 25 from 2 to 4
|
||||
move 2 from 6 to 4
|
||||
move 1 from 8 to 1
|
||||
move 2 from 9 to 1
|
||||
move 1 from 6 to 1
|
||||
move 2 from 1 to 7
|
||||
move 1 from 7 to 3
|
||||
move 2 from 1 to 8
|
||||
move 1 from 2 to 6
|
||||
move 1 from 3 to 8
|
||||
move 4 from 5 to 6
|
||||
move 1 from 5 to 3
|
||||
move 1 from 9 to 6
|
||||
move 2 from 3 to 4
|
||||
move 1 from 2 to 6
|
||||
move 12 from 9 to 7
|
||||
move 1 from 9 to 1
|
||||
move 1 from 5 to 8
|
||||
move 1 from 3 to 8
|
||||
move 28 from 4 to 5
|
||||
move 1 from 4 to 3
|
||||
move 1 from 2 to 6
|
||||
move 1 from 3 to 9
|
||||
move 12 from 7 to 2
|
||||
move 1 from 9 to 6
|
||||
move 6 from 6 to 4
|
||||
move 1 from 7 to 4
|
||||
move 1 from 1 to 2
|
||||
move 28 from 5 to 1
|
||||
move 2 from 2 to 8
|
||||
move 3 from 8 to 2
|
||||
move 7 from 4 to 1
|
||||
move 4 from 8 to 6
|
||||
move 9 from 2 to 8
|
||||
move 7 from 6 to 5
|
||||
move 3 from 5 to 9
|
||||
move 1 from 9 to 7
|
||||
move 1 from 7 to 1
|
||||
move 5 from 8 to 4
|
||||
move 4 from 1 to 9
|
||||
move 6 from 9 to 4
|
||||
move 5 from 1 to 5
|
||||
move 5 from 2 to 3
|
||||
move 4 from 8 to 2
|
||||
move 5 from 1 to 4
|
||||
move 4 from 5 to 9
|
||||
move 9 from 4 to 9
|
||||
move 10 from 9 to 8
|
||||
move 1 from 9 to 1
|
||||
move 2 from 2 to 8
|
||||
move 4 from 3 to 8
|
||||
move 1 from 2 to 3
|
||||
move 2 from 9 to 2
|
||||
move 1 from 2 to 6
|
||||
move 4 from 4 to 3
|
||||
move 3 from 5 to 1
|
||||
move 12 from 1 to 4
|
||||
move 1 from 5 to 3
|
||||
move 1 from 5 to 3
|
||||
move 5 from 8 to 5
|
||||
move 7 from 8 to 5
|
||||
move 8 from 3 to 4
|
||||
move 1 from 5 to 1
|
||||
move 1 from 6 to 7
|
||||
move 2 from 1 to 6
|
||||
move 8 from 5 to 9
|
||||
move 2 from 5 to 1
|
||||
move 9 from 1 to 4
|
||||
move 20 from 4 to 2
|
||||
move 1 from 5 to 2
|
||||
move 4 from 4 to 2
|
||||
move 5 from 9 to 2
|
||||
move 2 from 8 to 9
|
||||
move 23 from 2 to 4
|
||||
move 2 from 2 to 5
|
||||
move 5 from 1 to 2
|
||||
move 28 from 4 to 3
|
||||
move 2 from 8 to 1
|
||||
move 2 from 5 to 7
|
||||
move 1 from 6 to 9
|
||||
move 1 from 4 to 8
|
||||
move 1 from 8 to 9
|
||||
move 1 from 4 to 6
|
||||
move 2 from 7 to 2
|
||||
move 13 from 3 to 4
|
||||
move 5 from 9 to 7
|
||||
move 1 from 9 to 6
|
||||
move 14 from 2 to 6
|
||||
move 1 from 4 to 1
|
||||
move 10 from 3 to 2
|
||||
move 1 from 6 to 9
|
||||
move 2 from 3 to 2
|
||||
move 3 from 1 to 9
|
||||
move 1 from 3 to 5
|
||||
move 3 from 9 to 3
|
||||
move 6 from 7 to 4
|
||||
move 1 from 9 to 4
|
||||
move 1 from 9 to 2
|
||||
move 1 from 5 to 3
|
||||
move 5 from 3 to 1
|
||||
move 17 from 4 to 7
|
||||
move 2 from 2 to 8
|
||||
move 1 from 3 to 9
|
||||
move 1 from 8 to 2
|
||||
move 1 from 9 to 6
|
||||
move 4 from 6 to 2
|
||||
move 10 from 6 to 5
|
||||
move 4 from 1 to 5
|
||||
move 15 from 2 to 9
|
||||
move 1 from 8 to 6
|
||||
move 1 from 2 to 8
|
||||
move 6 from 9 to 2
|
||||
move 3 from 4 to 8
|
||||
move 11 from 7 to 1
|
||||
move 6 from 9 to 6
|
||||
move 1 from 6 to 2
|
||||
move 3 from 9 to 3
|
||||
move 6 from 2 to 7
|
||||
move 6 from 7 to 8
|
||||
move 7 from 1 to 9
|
||||
move 4 from 1 to 6
|
||||
move 2 from 1 to 2
|
||||
move 4 from 6 to 7
|
||||
move 1 from 2 to 9
|
||||
move 1 from 2 to 3
|
||||
move 1 from 2 to 1
|
||||
move 6 from 8 to 4
|
||||
move 2 from 6 to 7
|
||||
move 13 from 5 to 9
|
||||
move 1 from 5 to 4
|
||||
move 3 from 4 to 7
|
||||
move 1 from 1 to 7
|
||||
move 14 from 9 to 2
|
||||
move 2 from 9 to 3
|
||||
move 3 from 8 to 5
|
||||
move 4 from 3 to 4
|
||||
move 8 from 4 to 1
|
||||
move 7 from 1 to 9
|
||||
move 5 from 6 to 9
|
||||
move 4 from 9 to 2
|
||||
move 1 from 1 to 9
|
||||
move 17 from 2 to 4
|
||||
move 1 from 6 to 3
|
||||
move 4 from 7 to 5
|
||||
move 5 from 7 to 5
|
||||
move 1 from 6 to 4
|
||||
move 1 from 8 to 3
|
||||
move 5 from 7 to 1
|
||||
move 2 from 7 to 6
|
||||
move 2 from 3 to 6
|
||||
move 1 from 2 to 9
|
||||
move 7 from 9 to 6
|
||||
move 2 from 3 to 7
|
||||
move 8 from 6 to 4
|
||||
move 3 from 9 to 2
|
||||
move 1 from 6 to 4
|
||||
move 26 from 4 to 8
|
||||
move 2 from 7 to 8
|
||||
move 5 from 5 to 9
|
||||
move 2 from 6 to 7
|
||||
move 4 from 9 to 1
|
||||
move 2 from 7 to 5
|
||||
move 14 from 8 to 6
|
||||
move 3 from 2 to 8
|
||||
move 3 from 6 to 8
|
||||
move 3 from 6 to 1
|
||||
move 10 from 8 to 4
|
||||
move 5 from 9 to 4
|
||||
move 3 from 8 to 5
|
||||
move 1 from 8 to 2
|
||||
move 12 from 4 to 8
|
||||
move 1 from 9 to 3
|
||||
move 6 from 6 to 4
|
||||
move 6 from 8 to 2
|
||||
move 1 from 3 to 8
|
||||
move 1 from 8 to 4
|
||||
move 10 from 1 to 9
|
||||
move 2 from 1 to 3
|
||||
move 7 from 4 to 9
|
||||
move 1 from 2 to 1
|
||||
move 11 from 8 to 9
|
||||
move 1 from 3 to 9
|
||||
move 2 from 2 to 7
|
||||
move 1 from 3 to 6
|
||||
move 2 from 7 to 9
|
||||
move 2 from 4 to 6
|
||||
move 4 from 6 to 4
|
||||
move 2 from 2 to 8
|
||||
move 2 from 8 to 4
|
||||
move 1 from 1 to 7
|
||||
move 2 from 2 to 8
|
||||
move 9 from 5 to 2
|
||||
move 3 from 5 to 9
|
||||
move 1 from 8 to 3
|
||||
move 30 from 9 to 7
|
||||
move 1 from 6 to 2
|
||||
move 7 from 4 to 8
|
||||
move 13 from 7 to 2
|
||||
move 8 from 7 to 4
|
||||
move 2 from 4 to 8
|
||||
move 8 from 8 to 1
|
||||
move 1 from 8 to 3
|
||||
move 2 from 8 to 9
|
||||
move 1 from 3 to 7
|
||||
move 5 from 7 to 6
|
||||
move 1 from 3 to 1
|
||||
move 7 from 4 to 8
|
||||
move 20 from 2 to 6
|
||||
move 2 from 2 to 7
|
||||
move 1 from 9 to 5
|
||||
move 4 from 7 to 6
|
||||
move 3 from 7 to 8
|
||||
move 1 from 7 to 2
|
||||
move 7 from 8 to 6
|
||||
move 3 from 6 to 7
|
||||
move 4 from 9 to 1
|
||||
move 1 from 2 to 6
|
||||
move 1 from 9 to 7
|
||||
move 1 from 2 to 8
|
||||
move 1 from 7 to 6
|
||||
move 3 from 6 to 3
|
||||
move 4 from 8 to 1
|
||||
move 8 from 6 to 4
|
||||
move 3 from 7 to 2
|
||||
move 1 from 3 to 2
|
||||
move 1 from 4 to 5
|
||||
move 2 from 3 to 5
|
||||
move 1 from 4 to 6
|
||||
move 4 from 1 to 5
|
||||
move 4 from 2 to 9
|
||||
move 2 from 1 to 6
|
||||
move 4 from 9 to 2
|
||||
move 3 from 2 to 8
|
||||
move 2 from 8 to 4
|
||||
move 13 from 6 to 1
|
||||
move 4 from 5 to 2
|
||||
move 14 from 6 to 3
|
||||
move 1 from 2 to 7
|
||||
move 2 from 2 to 4
|
||||
move 1 from 8 to 6
|
||||
move 1 from 6 to 3
|
||||
move 1 from 7 to 4
|
||||
move 1 from 2 to 3
|
||||
move 1 from 2 to 6
|
||||
move 11 from 4 to 6
|
||||
move 2 from 5 to 4
|
||||
move 1 from 5 to 6
|
||||
move 12 from 3 to 6
|
||||
move 1 from 3 to 7
|
||||
move 1 from 5 to 7
|
||||
move 3 from 3 to 6
|
||||
move 2 from 7 to 5
|
||||
move 2 from 5 to 2
|
||||
move 8 from 6 to 7
|
||||
move 24 from 1 to 3
|
||||
move 1 from 4 to 6
|
||||
move 10 from 3 to 1
|
||||
move 6 from 1 to 8
|
||||
move 1 from 6 to 3
|
||||
move 1 from 4 to 2
|
||||
move 1 from 3 to 1
|
||||
move 2 from 2 to 1
|
||||
move 1 from 7 to 6
|
||||
move 2 from 7 to 5
|
||||
move 4 from 3 to 7
|
||||
move 1 from 2 to 3
|
||||
move 6 from 1 to 6
|
||||
move 3 from 7 to 5
|
||||
move 4 from 7 to 8
|
||||
move 1 from 1 to 2
|
||||
move 1 from 2 to 7
|
||||
move 8 from 3 to 4
|
||||
move 3 from 4 to 7
|
||||
move 6 from 8 to 6
|
||||
move 2 from 3 to 2
|
||||
move 1 from 3 to 9
|
||||
move 5 from 5 to 1
|
||||
move 2 from 8 to 2
|
||||
move 1 from 9 to 2
|
||||
move 4 from 1 to 3
|
||||
move 3 from 2 to 9
|
||||
move 1 from 1 to 2
|
||||
move 2 from 9 to 7
|
||||
move 2 from 2 to 9
|
||||
move 8 from 7 to 5
|
||||
move 33 from 6 to 5
|
||||
move 20 from 5 to 9
|
||||
move 21 from 5 to 7
|
||||
move 17 from 7 to 6
|
||||
move 10 from 6 to 9
|
||||
move 5 from 4 to 7
|
||||
move 2 from 3 to 9
|
||||
move 1 from 2 to 3
|
||||
move 2 from 7 to 3
|
||||
move 3 from 9 to 5
|
||||
move 23 from 9 to 7
|
||||
move 8 from 9 to 6
|
||||
move 1 from 9 to 1
|
||||
move 1 from 5 to 3
|
||||
move 1 from 8 to 9
|
||||
move 5 from 6 to 8
|
||||
move 1 from 9 to 6
|
||||
move 18 from 7 to 2
|
||||
move 6 from 7 to 4
|
||||
move 6 from 4 to 8
|
||||
move 5 from 7 to 4
|
||||
move 6 from 6 to 3
|
||||
move 1 from 4 to 2
|
||||
move 10 from 2 to 1
|
||||
move 1 from 2 to 4
|
||||
move 7 from 1 to 6
|
||||
move 1 from 7 to 1
|
||||
move 11 from 6 to 2
|
||||
move 1 from 6 to 8
|
||||
move 12 from 3 to 1
|
||||
move 8 from 1 to 8
|
||||
move 2 from 5 to 2
|
||||
move 12 from 8 to 6
|
||||
move 15 from 2 to 4
|
||||
move 7 from 4 to 5
|
||||
move 4 from 5 to 9
|
||||
move 4 from 9 to 4
|
||||
move 5 from 4 to 6
|
||||
move 2 from 5 to 2
|
||||
move 1 from 2 to 5
|
||||
move 2 from 5 to 4
|
||||
move 2 from 1 to 3
|
||||
move 4 from 1 to 5
|
||||
move 2 from 8 to 4
|
||||
move 5 from 2 to 9
|
||||
move 17 from 6 to 8
|
||||
move 1 from 3 to 2
|
||||
move 2 from 5 to 4
|
||||
move 1 from 3 to 8
|
||||
move 1 from 1 to 6
|
||||
move 2 from 5 to 6
|
||||
move 3 from 9 to 5
|
||||
move 1 from 5 to 1
|
||||
move 3 from 1 to 8
|
||||
move 26 from 8 to 4
|
||||
move 1 from 5 to 3
|
||||
move 3 from 2 to 7
|
||||
move 1 from 5 to 7
|
||||
move 21 from 4 to 9
|
||||
move 19 from 4 to 5
|
||||
move 3 from 4 to 3
|
||||
move 2 from 7 to 5
|
||||
move 1 from 8 to 2
|
||||
move 1 from 6 to 2
|
||||
move 1 from 8 to 9
|
||||
move 1 from 6 to 7
|
||||
move 1 from 2 to 4
|
||||
move 1 from 4 to 7
|
||||
move 1 from 2 to 7
|
||||
move 1 from 7 to 1
|
||||
move 1 from 1 to 6
|
||||
move 1 from 3 to 5
|
||||
move 2 from 6 to 3
|
||||
move 13 from 5 to 8
|
||||
move 1 from 4 to 2
|
||||
move 3 from 5 to 4
|
||||
move 5 from 5 to 4
|
||||
move 5 from 8 to 9
|
||||
move 9 from 9 to 3
|
||||
move 2 from 7 to 1
|
||||
move 6 from 4 to 2
|
||||
move 8 from 9 to 4
|
||||
move 1 from 2 to 7
|
||||
move 12 from 9 to 8
|
||||
move 1 from 4 to 2
|
||||
move 3 from 7 to 3
|
||||
move 11 from 8 to 5
|
||||
move 5 from 8 to 6
|
||||
move 3 from 6 to 5
|
||||
move 2 from 4 to 1
|
||||
move 13 from 5 to 3
|
||||
move 1 from 1 to 7
|
||||
move 2 from 1 to 8
|
||||
move 3 from 4 to 9
|
||||
move 1 from 1 to 7
|
||||
move 1 from 2 to 4
|
||||
move 2 from 7 to 3
|
||||
move 1 from 5 to 3
|
||||
move 4 from 4 to 2
|
||||
move 1 from 4 to 9
|
||||
move 30 from 3 to 2
|
||||
move 1 from 9 to 7
|
||||
move 6 from 8 to 6
|
||||
move 1 from 7 to 6
|
||||
move 1 from 5 to 1
|
||||
move 1 from 3 to 5
|
||||
move 30 from 2 to 3
|
||||
move 1 from 1 to 9
|
||||
move 2 from 9 to 2
|
||||
move 9 from 6 to 9
|
||||
move 2 from 2 to 9
|
||||
move 1 from 5 to 1
|
||||
move 5 from 9 to 7
|
||||
move 8 from 2 to 5
|
||||
move 1 from 1 to 9
|
||||
move 3 from 9 to 1
|
||||
move 5 from 3 to 6
|
||||
move 8 from 5 to 9
|
||||
move 13 from 3 to 9
|
||||
move 3 from 1 to 7
|
||||
move 5 from 7 to 9
|
||||
move 17 from 9 to 6
|
||||
move 1 from 7 to 6
|
||||
move 6 from 3 to 9
|
||||
move 1 from 2 to 1
|
||||
move 2 from 7 to 1
|
||||
move 1 from 2 to 5
|
||||
move 21 from 9 to 2
|
||||
move 4 from 3 to 6
|
||||
move 6 from 6 to 5
|
||||
move 7 from 5 to 9
|
||||
move 2 from 3 to 8
|
||||
move 3 from 1 to 3
|
||||
move 4 from 6 to 5
|
||||
move 1 from 8 to 1
|
||||
move 1 from 8 to 2
|
||||
move 4 from 5 to 2
|
||||
move 4 from 9 to 1
|
||||
move 4 from 3 to 5
|
||||
move 2 from 1 to 7
|
||||
move 1 from 7 to 4
|
||||
move 3 from 9 to 5
|
||||
move 25 from 2 to 9
|
||||
move 18 from 9 to 1
|
||||
move 1 from 4 to 5
|
||||
move 1 from 3 to 8
|
||||
move 4 from 5 to 6
|
||||
move 2 from 9 to 3
|
||||
move 17 from 1 to 5
|
||||
move 1 from 2 to 7
|
||||
move 2 from 3 to 5
|
||||
move 3 from 1 to 8
|
||||
move 5 from 9 to 2
|
||||
move 4 from 8 to 9
|
||||
move 12 from 5 to 2
|
||||
move 1 from 1 to 8
|
||||
move 3 from 9 to 5
|
||||
move 1 from 8 to 2
|
||||
move 2 from 7 to 2
|
||||
move 1 from 9 to 5
|
||||
move 9 from 5 to 2
|
||||
move 6 from 6 to 2
|
||||
move 15 from 6 to 2
|
||||
move 5 from 5 to 9
|
||||
move 1 from 5 to 9
|
||||
move 3 from 9 to 2
|
||||
move 3 from 9 to 1
|
||||
move 1 from 1 to 9
|
||||
move 1 from 9 to 1
|
||||
move 19 from 2 to 8
|
||||
move 2 from 1 to 9
|
||||
move 33 from 2 to 6
|
||||
move 4 from 6 to 4
|
||||
move 1 from 2 to 6
|
||||
move 1 from 9 to 8
|
||||
move 3 from 4 to 8
|
||||
move 18 from 8 to 3
|
||||
move 1 from 4 to 9
|
||||
move 10 from 3 to 9
|
||||
move 1 from 1 to 4
|
||||
move 24 from 6 to 3
|
||||
move 1 from 4 to 3
|
||||
move 2 from 8 to 7
|
||||
move 8 from 9 to 3
|
||||
move 5 from 6 to 7
|
||||
move 35 from 3 to 2
|
||||
move 7 from 7 to 1
|
||||
move 3 from 1 to 3
|
||||
move 33 from 2 to 6
|
||||
move 6 from 3 to 7
|
||||
move 5 from 7 to 3
|
||||
move 1 from 1 to 4
|
||||
move 1 from 7 to 8
|
||||
move 1 from 4 to 8
|
||||
move 1 from 3 to 2
|
||||
move 30 from 6 to 5
|
||||
move 2 from 1 to 6
|
||||
move 5 from 8 to 1
|
||||
move 1 from 9 to 2
|
||||
move 2 from 6 to 4
|
||||
move 4 from 1 to 7
|
||||
move 21 from 5 to 8
|
9
day05/input.test
Normal file
9
day05/input.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
[D]
|
||||
[N] [C]
|
||||
[Z] [M] [P]
|
||||
1 2 3
|
||||
|
||||
move 1 from 2 to 1
|
||||
move 3 from 1 to 3
|
||||
move 2 from 2 to 1
|
||||
move 1 from 1 to 2
|
|
@ -1,3 +1,124 @@
|
|||
fn main() {
|
||||
println!("Hello, world!");
|
||||
use std::{
|
||||
fs::File,
|
||||
io::{BufRead, BufReader},
|
||||
};
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Port {
|
||||
containers: Vec<Vec<u8>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
struct Move {
|
||||
count: usize,
|
||||
from: usize,
|
||||
to: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Eq)]
|
||||
enum SolvePuzzle {
|
||||
First,
|
||||
#[default]
|
||||
Second,
|
||||
}
|
||||
|
||||
impl Port {
|
||||
fn parse_from_lines<I, S>(lines: &mut I) -> Result<Self, ()>
|
||||
where
|
||||
I: Iterator<Item = S>,
|
||||
S: AsRef<str>,
|
||||
{
|
||||
let mut relevant: Vec<_> = lines.take_while(|line| !line.as_ref().is_empty()).collect();
|
||||
let _number_line = relevant.pop().unwrap();
|
||||
let mut containers = vec![];
|
||||
relevant.iter().rev().for_each(|line| {
|
||||
let bytes = line.as_ref().as_bytes();
|
||||
let mut container_idx = 0;
|
||||
while 4 * container_idx + 1 < bytes.len() {
|
||||
if containers.len() <= container_idx {
|
||||
containers.push(vec![])
|
||||
}
|
||||
let container = bytes[4 * container_idx + 1];
|
||||
if container != b' ' {
|
||||
containers[container_idx].push(container)
|
||||
}
|
||||
container_idx += 1;
|
||||
}
|
||||
});
|
||||
Ok(Self { containers })
|
||||
}
|
||||
fn apply(&mut self, mv: Move, reverse_on_move: bool) {
|
||||
let column = &mut self.containers[mv.from];
|
||||
let mut moved = column.split_off(column.len() - mv.count);
|
||||
if reverse_on_move {
|
||||
moved.reverse();
|
||||
}
|
||||
self.containers[mv.to].extend(moved);
|
||||
}
|
||||
fn to_top_row_string(self) -> String {
|
||||
let bytes: Vec<u8> = self
|
||||
.containers
|
||||
.into_iter()
|
||||
.map(|mut column| column.pop())
|
||||
.map(Option::unwrap)
|
||||
.collect();
|
||||
String::from_utf8(bytes).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_instruction_line<S: AsRef<str>>(line: S) -> Move {
|
||||
let mut words = line.as_ref().split_ascii_whitespace();
|
||||
let _move = words.next().unwrap();
|
||||
let count = words.next().unwrap().parse().unwrap();
|
||||
let _from = words.next().unwrap();
|
||||
let from = words.next().unwrap().parse::<usize>().unwrap() - 1;
|
||||
let _to = words.next().unwrap();
|
||||
let to = words.next().unwrap().parse::<usize>().unwrap() - 1;
|
||||
Move { from, to, count }
|
||||
}
|
||||
|
||||
fn solve_puzzle<R>(reader: R, solve: SolvePuzzle) -> String
|
||||
where
|
||||
R: BufRead,
|
||||
{
|
||||
let mut lines = reader.lines().map(Result::unwrap);
|
||||
let mut port = Port::parse_from_lines(&mut lines).unwrap();
|
||||
lines
|
||||
.map(parse_instruction_line)
|
||||
.for_each(|mv| port.apply(mv, solve == SolvePuzzle::First));
|
||||
port.to_top_row_string()
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut args = ::std::env::args().skip(1);
|
||||
let file = args.next().unwrap_or_else(|| String::from("./input"));
|
||||
let solve = args
|
||||
.next()
|
||||
.map(|arg| match arg.as_str() {
|
||||
"first" => SolvePuzzle::First,
|
||||
"second" => SolvePuzzle::Second,
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.unwrap_or_default();
|
||||
let file = BufReader::new(File::open(file).expect("Input file not found"));
|
||||
println!("{}", solve_puzzle(file, solve));
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::io::Cursor;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn first_puzzle_test_input() {
|
||||
let reader = Cursor::new(include_str!("../input.test"));
|
||||
assert_eq!(solve_puzzle(reader, SolvePuzzle::First), "CMZ");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn second_puzzle_test_input() {
|
||||
let reader = Cursor::new(include_str!("../input.test"));
|
||||
assert_eq!(solve_puzzle(reader, SolvePuzzle::Second), "MCD");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue