day 5
parent
bfcf12a4a5
commit
8b15b5f2c6
@ -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
|
@ -0,0 +1,514 @@
|
|||||||
|
[B] [B] [S]
|
||||||
|
[M] [P] [L] [B] [J]
|
||||||
|
[D] [R] [V] [D] [Q] [D]
|
||||||
|
[T] [R] [Z] [H] [H] [G] [C]
|
||||||
|
[P] [W] [J] [B] [J] [F] [J] [S]
|
||||||
|
[N] [S] [Z] [V] [M] [N] [Z] [F] [M]
|
||||||
|
[W] [Z] [H] [D] [H] [G] [Q] [S] [W]
|
||||||
|
[B] [L] [Q] [W] [S] [L] [J] [W] [Z]
|
||||||
|
1 2 3 4 5 6 7 8 9
|
||||||
|
|
||||||
|
move 3 from 5 to 2
|
||||||
|
move 5 from 3 to 1
|
||||||
|
move 4 from 4 to 9
|
||||||
|
move 6 from 1 to 4
|
||||||
|
move 6 from 8 to 7
|
||||||
|
move 5 from 2 to 7
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 11 from 9 to 7
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 6 from 4 to 6
|
||||||
|
move 12 from 6 to 7
|
||||||
|
move 1 from 9 to 2
|
||||||
|
move 2 from 4 to 6
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 2 from 7 to 5
|
||||||
|
move 2 from 6 to 7
|
||||||
|
move 2 from 1 to 6
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 1 from 1 to 4
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 4 from 2 to 1
|
||||||
|
move 20 from 7 to 8
|
||||||
|
move 24 from 7 to 3
|
||||||
|
move 3 from 6 to 4
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 2 from 1 to 2
|
||||||
|
move 2 from 4 to 1
|
||||||
|
move 2 from 2 to 1
|
||||||
|
move 14 from 3 to 6
|
||||||
|
move 6 from 1 to 6
|
||||||
|
move 10 from 3 to 2
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 6 from 6 to 5
|
||||||
|
move 2 from 3 to 4
|
||||||
|
move 13 from 8 to 4
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 10 from 4 to 2
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 2 from 8 to 7
|
||||||
|
move 1 from 7 to 2
|
||||||
|
move 11 from 6 to 8
|
||||||
|
move 2 from 6 to 1
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 3 from 8 to 2
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 2 from 6 to 4
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 11 from 2 to 9
|
||||||
|
move 2 from 4 to 6
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 1 from 1 to 5
|
||||||
|
move 11 from 2 to 7
|
||||||
|
move 12 from 7 to 5
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 10 from 8 to 7
|
||||||
|
move 6 from 5 to 3
|
||||||
|
move 4 from 5 to 4
|
||||||
|
move 11 from 9 to 7
|
||||||
|
move 7 from 4 to 9
|
||||||
|
move 4 from 9 to 6
|
||||||
|
move 12 from 7 to 3
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 3 from 4 to 1
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 8 from 7 to 2
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 8 from 2 to 3
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 2 from 7 to 2
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 8 from 5 to 1
|
||||||
|
move 3 from 9 to 6
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 2 from 9 to 3
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 7 from 1 to 5
|
||||||
|
move 11 from 3 to 7
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 4 from 2 to 1
|
||||||
|
move 5 from 1 to 3
|
||||||
|
move 1 from 5 to 9
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 6 from 2 to 1
|
||||||
|
move 5 from 7 to 3
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 1 from 8 to 4
|
||||||
|
move 6 from 7 to 9
|
||||||
|
move 4 from 9 to 8
|
||||||
|
move 2 from 8 to 9
|
||||||
|
move 2 from 5 to 8
|
||||||
|
move 13 from 3 to 7
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 2 from 1 to 9
|
||||||
|
move 3 from 1 to 5
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 6 from 5 to 9
|
||||||
|
move 8 from 9 to 8
|
||||||
|
move 2 from 7 to 3
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 5 from 9 to 8
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 7 from 1 to 2
|
||||||
|
move 4 from 7 to 5
|
||||||
|
move 6 from 2 to 3
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 10 from 8 to 9
|
||||||
|
move 3 from 8 to 9
|
||||||
|
move 4 from 5 to 1
|
||||||
|
move 2 from 8 to 6
|
||||||
|
move 9 from 9 to 8
|
||||||
|
move 1 from 9 to 6
|
||||||
|
move 8 from 8 to 4
|
||||||
|
move 12 from 3 to 5
|
||||||
|
move 1 from 4 to 2
|
||||||
|
move 3 from 8 to 1
|
||||||
|
move 3 from 9 to 7
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 8 from 3 to 8
|
||||||
|
move 6 from 4 to 5
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 6 from 8 to 7
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 7 from 1 to 5
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 4 from 6 to 5
|
||||||
|
move 13 from 7 to 5
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 2 from 9 to 3
|
||||||
|
move 4 from 7 to 2
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 3 to 4
|
||||||
|
move 4 from 1 to 2
|
||||||
|
move 1 from 5 to 7
|
||||||
|
move 23 from 5 to 6
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 5 from 2 to 6
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 12 from 6 to 1
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 20 from 5 to 2
|
||||||
|
move 14 from 2 to 4
|
||||||
|
move 11 from 2 to 6
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 13 from 1 to 8
|
||||||
|
move 9 from 8 to 4
|
||||||
|
move 3 from 8 to 6
|
||||||
|
move 10 from 6 to 8
|
||||||
|
move 6 from 6 to 4
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 26 from 4 to 2
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 5 from 8 to 1
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 27 from 2 to 7
|
||||||
|
move 2 from 8 to 1
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 6 from 6 to 2
|
||||||
|
move 4 from 6 to 1
|
||||||
|
move 4 from 6 to 4
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 4 from 2 to 1
|
||||||
|
move 3 from 1 to 8
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 8 from 4 to 3
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 5 from 8 to 6
|
||||||
|
move 1 from 4 to 2
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 6 from 3 to 1
|
||||||
|
move 13 from 7 to 1
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 14 from 7 to 1
|
||||||
|
move 5 from 6 to 3
|
||||||
|
move 2 from 3 to 1
|
||||||
|
move 3 from 3 to 2
|
||||||
|
move 3 from 7 to 4
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 2 from 3 to 6
|
||||||
|
move 5 from 2 to 7
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 5 from 7 to 6
|
||||||
|
move 2 from 6 to 7
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 4 from 6 to 9
|
||||||
|
move 35 from 1 to 8
|
||||||
|
move 3 from 7 to 2
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 24 from 8 to 3
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 13 from 3 to 6
|
||||||
|
move 2 from 2 to 6
|
||||||
|
move 6 from 6 to 4
|
||||||
|
move 11 from 1 to 6
|
||||||
|
move 12 from 6 to 1
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 5 from 4 to 1
|
||||||
|
move 1 from 6 to 4
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 13 from 3 to 9
|
||||||
|
move 3 from 8 to 2
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 3 from 7 to 8
|
||||||
|
move 14 from 1 to 3
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 6 from 3 to 8
|
||||||
|
move 17 from 8 to 6
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 26 from 6 to 7
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 3 from 4 to 1
|
||||||
|
move 2 from 3 to 8
|
||||||
|
move 1 from 8 to 4
|
||||||
|
move 14 from 9 to 7
|
||||||
|
move 12 from 7 to 3
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 4 from 9 to 8
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 2 from 4 to 2
|
||||||
|
move 24 from 7 to 6
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 1 from 7 to 2
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 3 from 2 to 9
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 5 from 8 to 2
|
||||||
|
move 5 from 3 to 4
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 3 from 9 to 8
|
||||||
|
move 2 from 4 to 9
|
||||||
|
move 16 from 6 to 3
|
||||||
|
move 14 from 3 to 8
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 8 from 6 to 9
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 8 from 8 to 3
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 1 from 2 to 4
|
||||||
|
move 4 from 8 to 7
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 12 from 9 to 5
|
||||||
|
move 15 from 5 to 8
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 2 from 2 to 6
|
||||||
|
move 3 from 4 to 2
|
||||||
|
move 4 from 2 to 7
|
||||||
|
move 8 from 7 to 3
|
||||||
|
move 1 from 1 to 4
|
||||||
|
move 3 from 6 to 9
|
||||||
|
move 16 from 8 to 3
|
||||||
|
move 3 from 9 to 4
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 24 from 3 to 8
|
||||||
|
move 19 from 8 to 7
|
||||||
|
move 2 from 8 to 7
|
||||||
|
move 7 from 4 to 5
|
||||||
|
move 13 from 7 to 5
|
||||||
|
move 4 from 7 to 8
|
||||||
|
move 7 from 8 to 1
|
||||||
|
move 3 from 5 to 3
|
||||||
|
move 3 from 7 to 2
|
||||||
|
move 1 from 1 to 4
|
||||||
|
move 1 from 7 to 2
|
||||||
|
move 3 from 2 to 4
|
||||||
|
move 8 from 3 to 1
|
||||||
|
move 11 from 1 to 3
|
||||||
|
move 12 from 3 to 4
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 18 from 3 to 8
|
||||||
|
move 3 from 1 to 9
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 15 from 5 to 4
|
||||||
|
move 4 from 5 to 1
|
||||||
|
move 23 from 4 to 6
|
||||||
|
move 3 from 1 to 6
|
||||||
|
move 13 from 8 to 3
|
||||||
|
move 25 from 6 to 2
|
||||||
|
move 1 from 9 to 5
|
||||||
|
move 5 from 3 to 8
|
||||||
|
move 17 from 2 to 8
|
||||||
|
move 4 from 4 to 1
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 5 from 2 to 6
|
||||||
|
move 2 from 2 to 4
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 6 from 3 to 9
|
||||||
|
move 16 from 8 to 3
|
||||||
|
move 2 from 1 to 8
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 5 from 4 to 7
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 2 from 7 to 1
|
||||||
|
move 9 from 8 to 4
|
||||||
|
move 3 from 7 to 2
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 10 from 4 to 1
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 5 from 3 to 7
|
||||||
|
move 2 from 8 to 9
|
||||||
|
move 2 from 9 to 8
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 3 from 9 to 6
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 4 from 7 to 3
|
||||||
|
move 4 from 8 to 6
|
||||||
|
move 1 from 7 to 1
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 4 from 3 to 4
|
||||||
|
move 4 from 4 to 2
|
||||||
|
move 6 from 1 to 2
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 5 from 3 to 8
|
||||||
|
move 6 from 3 to 8
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 3 from 2 to 9
|
||||||
|
move 8 from 1 to 6
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 2 from 7 to 2
|
||||||
|
move 13 from 6 to 5
|
||||||
|
move 7 from 5 to 9
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 5 from 3 to 4
|
||||||
|
move 2 from 2 to 1
|
||||||
|
move 9 from 8 to 7
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 6 from 5 to 2
|
||||||
|
move 4 from 2 to 8
|
||||||
|
move 4 from 7 to 1
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 5 from 1 to 6
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 13 from 6 to 5
|
||||||
|
move 2 from 7 to 2
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 4 from 4 to 7
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 4 from 8 to 4
|
||||||
|
move 6 from 5 to 9
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 11 from 9 to 5
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 6 from 4 to 8
|
||||||
|
move 1 from 8 to 4
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 6 from 9 to 7
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 3 from 2 to 1
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 20 from 5 to 6
|
||||||
|
move 3 from 1 to 6
|
||||||
|
move 2 from 2 to 9
|
||||||
|
move 3 from 8 to 3
|
||||||
|
move 5 from 3 to 8
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 2 from 8 to 9
|
||||||
|
move 7 from 9 to 5
|
||||||
|
move 3 from 5 to 4
|
||||||
|
move 3 from 8 to 3
|
||||||
|
move 9 from 7 to 9
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 7 from 7 to 9
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 9 from 9 to 2
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 2 from 5 to 9
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 18 from 6 to 7
|
||||||
|
move 7 from 9 to 1
|
||||||
|
move 7 from 6 to 8
|
||||||
|
move 4 from 4 to 9
|
||||||
|
move 4 from 8 to 3
|
||||||
|
move 2 from 8 to 2
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 2 from 9 to 3
|
||||||
|
move 12 from 2 to 5
|
||||||
|
move 6 from 5 to 6
|
||||||
|
move 5 from 7 to 2
|
||||||
|
move 3 from 6 to 4
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 2 from 5 to 8
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 2 from 9 to 7
|
||||||
|
move 8 from 1 to 8
|
||||||
|
move 11 from 7 to 1
|
||||||
|
move 5 from 8 to 2
|
||||||
|
move 7 from 7 to 5
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 7 from 5 to 7
|
||||||
|
move 2 from 6 to 1
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 12 from 1 to 7
|
||||||
|
move 2 from 1 to 2
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 3 from 5 to 2
|
||||||
|
move 8 from 7 to 3
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 3 from 6 to 4
|
||||||
|
move 4 from 5 to 6
|
||||||
|
move 14 from 2 to 9
|
||||||
|
move 3 from 6 to 9
|
||||||
|
move 3 from 4 to 2
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 1 from 7 to 1
|
||||||
|
move 3 from 3 to 5
|
||||||
|
move 8 from 7 to 4
|
||||||
|
move 1 from 5 to 9
|
||||||
|
move 3 from 2 to 4
|
||||||
|
move 1 from 3 to 4
|
||||||
|
move 4 from 2 to 6
|
||||||
|
move 2 from 6 to 7
|
||||||
|
move 3 from 5 to 4
|
||||||
|
move 16 from 4 to 1
|
||||||
|
move 7 from 9 to 8
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 3 from 7 to 9
|
||||||
|
move 3 from 9 to 4
|
||||||
|
move 7 from 1 to 7
|
||||||
|
move 6 from 7 to 1
|
||||||
|
move 5 from 3 to 1
|
||||||
|
move 11 from 9 to 2
|
||||||
|
move 3 from 4 to 6
|
||||||
|
move 9 from 2 to 8
|
||||||
|
move 6 from 3 to 5
|
||||||
|
move 2 from 8 to 6
|
||||||
|
move 5 from 5 to 3
|
||||||
|
move 2 from 7 to 1
|
||||||
|
move 3 from 3 to 9
|
||||||
|
move 1 from 2 to 4
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 13 from 1 to 2
|
||||||
|
move 5 from 8 to 6
|
||||||
|
move 2 from 3 to 9
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 5 from 6 to 9
|
||||||
|
move 7 from 9 to 1
|
||||||
|
move 3 from 7 to 2
|
||||||
|
move 6 from 8 to 6
|
||||||
|
move 5 from 6 to 2
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 6 from 2 to 5
|
||||||
|
move 1 from 3 to 7
|
@ -0,0 +1,115 @@
|
|||||||
|
module Day5Lib
|
||||||
|
( Crate (..),
|
||||||
|
Command (..),
|
||||||
|
crate,
|
||||||
|
crateOrNothing,
|
||||||
|
crateRow,
|
||||||
|
crateNumbers,
|
||||||
|
command,
|
||||||
|
transposeRows,
|
||||||
|
--
|
||||||
|
processInput1,
|
||||||
|
processInput2,
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
-- import Text.ParserCombinators.Parsec
|
||||||
|
import Debug.Trace
|
||||||
|
import Text.Parsec
|
||||||
|
|
||||||
|
newtype Crate = Crate Char deriving (Show, Eq)
|
||||||
|
|
||||||
|
data Command = Command
|
||||||
|
{ cnt :: Int,
|
||||||
|
from :: Int,
|
||||||
|
to :: Int
|
||||||
|
}
|
||||||
|
deriving (Show, Eq)
|
||||||
|
|
||||||
|
crate :: Parsec String () Crate
|
||||||
|
crate = do
|
||||||
|
char '['
|
||||||
|
crateLabel <- oneOf ['A' .. 'Z']
|
||||||
|
char ']'
|
||||||
|
return $ Crate crateLabel
|
||||||
|
|
||||||
|
nothing = do
|
||||||
|
string " "
|
||||||
|
return Nothing
|
||||||
|
|
||||||
|
crateOrNothing :: Parsec String () (Maybe Crate)
|
||||||
|
crateOrNothing = nothing <|> (crate >>= return . return)
|
||||||
|
|
||||||
|
crateRow :: Parsec String () [Maybe Crate]
|
||||||
|
crateRow = do
|
||||||
|
c <- crateOrNothing `sepBy1` (char ' ')
|
||||||
|
char '\n'
|
||||||
|
return c
|
||||||
|
|
||||||
|
crateNumbers :: Parsec String () ()
|
||||||
|
crateNumbers = do
|
||||||
|
char ' '
|
||||||
|
oneOf ['1' .. '9'] `sepBy1` try (string " ")
|
||||||
|
char ' '
|
||||||
|
char '\n'
|
||||||
|
return ()
|
||||||
|
|
||||||
|
command :: Parsec String () Command
|
||||||
|
command = do
|
||||||
|
string "move "
|
||||||
|
countS <- many $ oneOf ['0' .. '9']
|
||||||
|
char ' '
|
||||||
|
string "from "
|
||||||
|
from <- many $ oneOf ['0' .. '9']
|
||||||
|
char ' '
|
||||||
|
string "to "
|
||||||
|
to <- many $ oneOf ['0' .. '9']
|
||||||
|
-- char '\n'
|
||||||
|
return Command {cnt = read countS, from = read from - 1, to = read to - 1}
|
||||||
|
|
||||||
|
taskFile = do
|
||||||
|
crateRows <- many (try crateRow)
|
||||||
|
crateNumbers
|
||||||
|
char '\n'
|
||||||
|
commands <- sepBy command (char '\n')
|
||||||
|
eof
|
||||||
|
return (transposeRows crateRows, commands)
|
||||||
|
|
||||||
|
transposeRows :: [[Maybe Crate]] -> [[Crate]]
|
||||||
|
transposeRows = foldr applyRow (repeat [])
|
||||||
|
|
||||||
|
applyRow :: [Maybe Crate] -> [[Crate]] -> [[Crate]]
|
||||||
|
applyRow (Nothing : ow) (s : tacks) = s : (applyRow ow tacks)
|
||||||
|
applyRow ((Just c) : ow) (s : tacks) = (c : s) : (applyRow ow tacks)
|
||||||
|
applyRow [] stacks = []
|
||||||
|
applyRow _ [] = error "stacks error"
|
||||||
|
|
||||||
|
applyCommand1 :: [[Crate]] -> Command -> [[Crate]]
|
||||||
|
applyCommand1 crates cmd = last . take (cnt cmd + 1) . iterate applyThisMove $ crates
|
||||||
|
where
|
||||||
|
applyThisMove = applyMove 1 (from cmd) (to cmd)
|
||||||
|
|
||||||
|
applyCommand :: [[Crate]] -> Command -> [[Crate]]
|
||||||
|
applyCommand crates cmd = applyMove (cnt cmd) (from cmd) (to cmd) crates
|
||||||
|
|
||||||
|
applyMove :: Int -> Int -> Int -> [[Crate]] -> [[Crate]]
|
||||||
|
applyMove cnt from to crates =
|
||||||
|
let (lf, f : rf) = splitAt from crates
|
||||||
|
(lt, t : rt) = splitAt to (lf ++ (drop cnt f) : rf)
|
||||||
|
in lt ++ ((take cnt f) ++ t) : rt
|
||||||
|
|
||||||
|
-- ####################
|
||||||
|
|
||||||
|
processInput1 :: String -> String
|
||||||
|
processInput1 input =
|
||||||
|
let (crates, commands) = case parse taskFile "" input of
|
||||||
|
Left e -> error (show e)
|
||||||
|
Right p -> p
|
||||||
|
in map ((\(Crate a) -> a) . head) $ foldl applyCommand1 crates commands
|
||||||
|
|
||||||
|
processInput2 :: String -> String
|
||||||
|
processInput2 input =
|
||||||
|
let (crates, commands) = case parse taskFile "" input of
|
||||||
|
Left e -> error (show e)
|
||||||
|
Right p -> p
|
||||||
|
in map ((\(Crate a) -> a) . head) $ foldl applyCommand crates commands
|
@ -0,0 +1,41 @@
|
|||||||
|
import Day5Lib (processInput1, processInput2)
|
||||||
|
import System.IO
|
||||||
|
import Test.HUnit
|
||||||
|
|
||||||
|
testCases1 =
|
||||||
|
[ ("data/input050.txt", "CMZ"),
|
||||||
|
("data/input051.txt", "MQSHJMWNH")
|
||||||
|
]
|
||||||
|
|
||||||
|
testCase1 (file, result) = do
|
||||||
|
withFile
|
||||||
|
file
|
||||||
|
ReadMode
|
||||||
|
( \handle -> do
|
||||||
|
contents <- hGetContents handle
|
||||||
|
assertEqual "input test" result $ processInput1 contents
|
||||||
|
)
|
||||||
|
|
||||||
|
testCases2 =
|
||||||
|
[ ("data/input050.txt", "MCD"),
|
||||||
|
("data/input051.txt", "LLWJRBHVZ")
|
||||||
|
]
|
||||||
|
|
||||||
|
testCase2 (file, result) = do
|
||||||
|
withFile
|
||||||
|
file
|
||||||
|
ReadMode
|
||||||
|
( \handle -> do
|
||||||
|
contents <- hGetContents handle
|
||||||
|
assertEqual "input test" result $ processInput2 contents
|
||||||
|
)
|
||||||
|
|
||||||
|
tests =
|
||||||
|
TestList $
|
||||||
|
[TestCase (testCase1 c) | c <- testCases1]
|
||||||
|
++ [TestCase (testCase2 c) | c <- testCases2]
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
runTestTT tests
|
||||||
|
return ()
|
@ -0,0 +1,89 @@
|
|||||||
|
import Day5Lib
|
||||||
|
import Test.HUnit
|
||||||
|
import Text.Parsec
|
||||||
|
|
||||||
|
-- trange = TestCase (assertEqual "1-2" (Range (1,2)) $ parseRange "1-2")
|
||||||
|
-- trangel = TestCase (assertEqual "131231-215562" (Range (131231,215562)) $ parseRange "1-2")
|
||||||
|
|
||||||
|
-- trow = TestCase (assertEqual "1-2,3-4" [Range (1,2), Range(3,4)] $ parseRow "1-2,3-4")
|
||||||
|
-- trowl = TestCase (assertEqual "1-2,3-4" [Range (1,2), Range(34524,62345)] $ parseRow "1-2,34524-62345")
|
||||||
|
|
||||||
|
tParseCrate = TestCase $ assertEqual "parse crate" (Right (Crate 'A')) (parse crate "" "[A]")
|
||||||
|
|
||||||
|
tParseCrateOrNothing1 =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"parse crate or nothing: crate"
|
||||||
|
(Right (Just (Crate 'A')))
|
||||||
|
(parse crateOrNothing "" "[A]")
|
||||||
|
|
||||||
|
tParseCrateOrNothing2 =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"parse crate or nothing: nothing"
|
||||||
|
(Right Nothing)
|
||||||
|
(parse crateOrNothing "" " ")
|
||||||
|
|
||||||
|
tCrateRow =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"parse row"
|
||||||
|
(Right [Nothing, Just (Crate 'D'), Nothing])
|
||||||
|
(parse crateRow "" " [D] \n")
|
||||||
|
|
||||||
|
tNumberRow =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"number row"
|
||||||
|
(Right ())
|
||||||
|
(parse crateNumbers " " " 1 2 3 \n")
|
||||||
|
|
||||||
|
tCommand1 =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"command"
|
||||||
|
(Right Command {cnt = 1, from = 0, to = 1})
|
||||||
|
(parse command " " "move 1 from 1 to 2\n")
|
||||||
|
|
||||||
|
tCommand2 =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"command"
|
||||||
|
(Right Command {cnt = 1, from = 0, to = 1})
|
||||||
|
(parse command " " "move 1 from 1 to 2")
|
||||||
|
|
||||||
|
tStackBuild1 =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"stack build"
|
||||||
|
[[], [Crate 'D'], []]
|
||||||
|
(transposeRows [[Nothing, Just (Crate 'D'), Nothing]])
|
||||||
|
|
||||||
|
tStackBuild2 =
|
||||||
|
TestCase $
|
||||||
|
assertEqual
|
||||||
|
"stack build"
|
||||||
|
[[Crate 'A'], [Crate 'D', Crate 'B'], [Crate 'C']]
|
||||||
|
( transposeRows
|
||||||
|
[ [Nothing, Just (Crate 'D'), Nothing],
|
||||||
|
[Just (Crate 'A'), Just (Crate 'B'), Just (Crate 'C')]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
tests =
|
||||||
|
TestList $
|
||||||
|
[ tParseCrate,
|
||||||
|
tParseCrateOrNothing1,
|
||||||
|
tParseCrateOrNothing2,
|
||||||
|
tCrateRow,
|
||||||
|
tNumberRow,
|
||||||
|
tCommand1,
|
||||||
|
tCommand2,
|
||||||
|
tStackBuild1,
|
||||||
|
tStackBuild2
|
||||||
|
]
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
runTestTT tests
|
||||||
|
return ()
|
Loading…
Reference in New Issue