diff --git a/OUTPUT.txt b/OUTPUT.txt new file mode 100644 index 0000000000000000000000000000000000000000..da9f9dd1675c809bcaf3a23be8252321447677a4 --- /dev/null +++ b/OUTPUT.txt @@ -0,0 +1,1015 @@ +Expanding: (3, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (1, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (3, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 28) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (11, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 20) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (3, 24) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (4, 24) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (3, 23) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (4, 24) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (11, 20) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 19) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 19) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 20) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (10, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 21) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 22) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (6, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (5, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 21) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 22) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (7, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (8, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 21) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 22) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 22) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 24) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 14) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (9, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 23) | Remaining rewards: frozenset({(10, 1)}) +Moving to (7, 23) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 23) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 22) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 24) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 23) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 25) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 22) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 22) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 21) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 23) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 22) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 23) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 23) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 23) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 21) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 20) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 22) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 22) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 22) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 20) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 19) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 21) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 21) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 21) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 19) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 20) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 18) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 19) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 19) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 14) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 14) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 13) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 14) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 13) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 13) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 12) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 14) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 14) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 12) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 11) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 13) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (11, 13) | Remaining rewards: frozenset({(10, 1)}) +Moving to (10, 13) | New rewards left: frozenset({(10, 1)}) +Moving to (11, 12) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 11) | Remaining rewards: frozenset({(10, 1)}) +Moving to (7, 11) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 10) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 12) | New rewards left: frozenset({(10, 1)}) +Expanding: (10, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (10, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (11, 12) | Remaining rewards: frozenset({(10, 1)}) +Moving to (10, 12) | New rewards left: frozenset({(10, 1)}) +Moving to (11, 13) | New rewards left: frozenset({(10, 1)}) +Expanding: (11, 12) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 10) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 9) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 11) | New rewards left: frozenset({(10, 1)}) +Expanding: (10, 12) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 9) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 10) | New rewards left: frozenset({(10, 1)}) +Expanding: (1, 9) | Remaining rewards: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (3, 26) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (3, 26) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (3, 23) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (2, 23) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (4, 23) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (3, 24) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (4, 23) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (3, 23) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (2, 23) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 22) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 24) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 23) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (3, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 19) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 18) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 19) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 19) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 21) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (5, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (4, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (6, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (5, 24) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (8, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 14) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (9, 14) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 14) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 21) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 22) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (8, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 21) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 21) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (8, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (10, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (9, 14) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (9, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (11, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (10, 12) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 12) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (11, 12) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (10, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (11, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (10, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (11, 12) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 6) | Remaining rewards: frozenset({(10, 1), (3, 28), (1, 14), (5, 28), (11, 28)}) +Expanding: (1, 8) | Remaining rewards: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Moving to (1, 7) | New rewards left: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Moving to (1, 9) | New rewards left: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Expanding: (1, 9) | Remaining rewards: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Expanding: (1, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (1, 20) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (1, 22) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (3, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 18) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (1, 23) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 24) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 25) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (4, 18) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (3, 18) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (4, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 23) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 24) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 25) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 18) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (11, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (3, 24) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 23) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 24) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 23) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 25) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (5, 24) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (4, 24) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (5, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (5, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (6, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (7, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (9, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 12) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (9, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 20) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 14) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (11, 12) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (10, 12) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (11, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (11, 12) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (7, 23) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 23) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 23) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 25) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 25) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 24) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 26) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 23) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 23) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 24) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 22) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 21) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 18) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 14) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (7, 11) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 11) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 11) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 12) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (11, 13) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 11) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 11) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (8, 10) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (6, 6) | Remaining rewards: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Moving to (6, 5) | New rewards left: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Moving to (6, 7) | New rewards left: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Expanding: (6, 7) | Remaining rewards: frozenset({(11, 28), (10, 1), (5, 28), (3, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (1, 28) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (1, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (1, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (1, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 20) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 22) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 23) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 25) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 24) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (4, 19) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 18) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 14) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (5, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (5, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (5, 24) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (5, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 25) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (6, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 12) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (8, 11) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 13) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 14) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 14) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 18) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 19) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 20) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (10, 12) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (11, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 3) | Remaining rewards: frozenset({(10, 1), (3, 28), (1, 14), (5, 28), (11, 28)}) +Expanding: (1, 5) | Remaining rewards: frozenset({(10, 1), (3, 28), (1, 14), (5, 28), (11, 28)}) +Expanding: (1, 20) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (1, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (1, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (1, 20) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (1, 22) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (4, 19) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (3, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (2, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (4, 19) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (3, 18) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 14) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (4, 19) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (3, 19) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (4, 18) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 20) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 22) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (2, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (3, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (3, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (4, 19) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (4, 21) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 14) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (9, 15) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (8, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (8, 15) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (8, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(3, 28), (10, 1), (11, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (1, 25) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (9, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (9, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (10, 15) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (10, 17) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 16) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Moving to (11, 18) | New rewards left: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (11, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (2, 23) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (1, 23) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (3, 23) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (3, 23) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (4, 19) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (3, 19) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (4, 18) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (5, 28), (11, 28)}) +Expanding: (4, 20) | Remaining rewards: frozenset({(10, 1), (5, 28), (3, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (1, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (1, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (1, 20) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 19) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 21) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 22) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 24) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (1, 26) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 25) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 26) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (3, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 26) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (3, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (3, 28) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (2, 27) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (1, 27) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (2, 28) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 26) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (3, 28) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +🆠Collected reward at (3, 28)! +Moving to (2, 28) | New rewards left: frozenset({(10, 1)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1)}) +Expanding: (4, 19) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (3, 19) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (4, 18) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (4, 20) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (4, 21) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (4, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (3, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (5, 23) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (4, 24) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (5, 23) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 14) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Moving to (8, 14) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 13) | New rewards left: frozenset({(10, 1), (3, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(10, 1), (3, 28)}) +Expanding: (11, 16) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 16) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (11, 18) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (3, 27) | Remaining rewards: frozenset({(10, 1)}) +Moving to (2, 27) | New rewards left: frozenset({(10, 1)}) +Moving to (3, 26) | New rewards left: frozenset({(10, 1)}) +Moving to (3, 28) | New rewards left: frozenset({(10, 1)}) +Expanding: (3, 26) | Remaining rewards: frozenset({(10, 1)}) +Moving to (2, 26) | New rewards left: frozenset({(10, 1)}) +Moving to (3, 27) | New rewards left: frozenset({(10, 1)}) +Expanding: (5, 24) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (5, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (5, 25) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (5, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (6, 27) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (5, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (6, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 26) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (7, 28) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (6, 28) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (7, 27) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 11) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Moving to (7, 11) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 10) | New rewards left: frozenset({(10, 1), (11, 28)}) +Moving to (8, 12) | New rewards left: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 13) | Remaining rewards: frozenset({(10, 1), (11, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (8, 18) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (8, 19) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (8, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (9, 17) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (9, 16) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 15) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Moving to (9, 15) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (11, 15) | New rewards left: frozenset({(10, 1), (5, 28)}) +Moving to (10, 16) | New rewards left: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (10, 17) | Remaining rewards: frozenset({(10, 1), (5, 28)}) +Expanding: (6, 23) | Remaining rewards: frozenset({(10, 1)}) +Moving to (5, 23) | New rewards left: frozenset({(10, 1)}) +Moving to (7, 23) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 25) | Remaining rewards: frozenset({(10, 1)}) +Moving to (7, 25) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 25) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 26) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 25) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 27) | New rewards left: frozenset({(10, 1)}) +Expanding: (7, 23) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 25) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (9, 25) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (6, 11) | Remaining rewards: frozenset({(10, 1)}) +Moving to (7, 11) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 10) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 12) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 10) | Remaining rewards: frozenset({(10, 1)}) +Moving to (5, 10) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 9) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 11) | New rewards left: frozenset({(10, 1)}) +Expanding: (7, 11) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (6, 9) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 8) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 10) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 8) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 7) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 9) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 7) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 6) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 8) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 6) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 5) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 7) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 5) | Remaining rewards: frozenset({(10, 1)}) +Moving to (5, 5) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 4) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 6) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 4) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 3) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 5) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 3) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 2) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 4) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 2) | Remaining rewards: frozenset({(10, 1)}) +Moving to (7, 2) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 1) | New rewards left: frozenset({(10, 1)}) +Moving to (6, 3) | New rewards left: frozenset({(10, 1)}) +Expanding: (6, 1) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 2) | New rewards left: frozenset({(10, 1)}) +Expanding: (7, 2) | Remaining rewards: frozenset({(10, 1)}) +Moving to (6, 2) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 2) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 2) | Remaining rewards: frozenset({(10, 1)}) +Moving to (7, 2) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 2) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 1) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 3) | New rewards left: frozenset({(10, 1)}) +Expanding: (8, 1) | Remaining rewards: frozenset({(10, 1)}) +Moving to (9, 1) | New rewards left: frozenset({(10, 1)}) +Moving to (8, 2) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 2) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 2) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 1) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 3) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 1) | Remaining rewards: frozenset({(10, 1)}) +Moving to (8, 1) | New rewards left: frozenset({(10, 1)}) +Moving to (10, 1) | New rewards left: frozenset({(10, 1)}) +Moving to (9, 2) | New rewards left: frozenset({(10, 1)}) +Expanding: (9, 1) | Remaining rewards: frozenset({(10, 1)}) +Expanding: (10, 1) | Remaining rewards: frozenset({(10, 1)}) +🆠Collected reward at (10, 1)! +✅ Goal reached! All rewards collected! + +Solution: +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ###########.%######.##.# % +% #%%%%%#%%%%%%#%# % %#%%# % +% #%. % ####% #%# % %# %##.% +%.#### % #.###%. %# %%%%% +%%%%%#%%%% %%% #%%%%%%%#####.% +%.########## ##. %#%%% #% +%%#%%%%%%%%#%%%%%%%%%%%#%####% +%## % #############%#%%%% +%# %%%%%# # %. ### % +%.% %%% % #% ##%% %%#%%%%%% +% % .% ###########.% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Path cost: 207 +Nodes expanded: 6324 \ No newline at end of file diff --git a/State Space Representation and Implementation Choices - Nour A..pdf b/State Space Representation and Implementation Choices - Nour A..pdf new file mode 100644 index 0000000000000000000000000000000000000000..c5c353c7236a47d22ad5082896cd8ea3e02fa586 Binary files /dev/null and b/State Space Representation and Implementation Choices - Nour A..pdf differ diff --git a/State.py b/State.py index 7850d7fffb1db1b418a7bac0c32f554239589b85..4bfec39df6bd83bffef8284bbf80f9d11c74ddad 100644 --- a/State.py +++ b/State.py @@ -1,22 +1,30 @@ +#Nour A. - Lab A from collections import deque import heapq class State: def __init__(self, position, remaining_rewards): self.position = position # (x, y) - self.remaining_rewards = frozenset(remaining_rewards) # {(x1, y1), (x2, y2), ...} - + self.remaining_rewards = frozenset(remaining_rewards) + def __lt__(self, other): - return self.position < other.position + return self.position < other.position #comparisons needed def get_neighbors(state, maze): x, y = state.position + rows, cols = len(maze), len(maze[0]) possible_moves = [(x-1, y), (x+1, y), (x, y-1), (x, y+1)] - valid_moves = [pos for pos in possible_moves if maze[pos[0]][pos[1]] != '%'] + valid_moves = [ + (nx, ny) for nx, ny in possible_moves + if 0 <= nx < rows and 0 <= ny < cols and maze[nx][ny] != '%' + ] return valid_moves def is_goal(state): - return len(state.remaining_rewards) == 0 + if len(state.remaining_rewards) == 0: + print("Goal reached: The mouse is happy.") + return True + return False def read_maze(file_path): with open(file_path, 'r') as file: @@ -34,34 +42,8 @@ def read_maze(file_path): return maze, State(start, rewards) -def single_dfs(file_path): - maze, initial_state = read_maze(file_path) - stack = [(initial_state, [])] # (current state, path taken) - visited = set() - - while stack: - state, path = stack.pop() - - if state.position in visited: - continue - visited.add(state.position) - - if is_goal(state): - print_maze_solution(maze, path) - print(f"Path cost: {len(path)}") - print(f"Nodes expanded: {len(visited)}") - return path - - for move in get_neighbors(state, maze): - new_rewards = state.remaining_rewards - {move} if move in state.remaining_rewards else state.remaining_rewards - new_state = State(move, new_rewards) - stack.append((new_state, path + [move])) - - print("No solution found.") - return None - def print_maze_solution(maze, path): - maze_copy = [row[:] for row in maze] # Make a copy of the maze + maze_copy = [row[:] for row in maze] # copy maze for x, y in path: if maze_copy[x][y] != '.': # Keep rewards visible maze_copy[x][y] = '#' @@ -69,66 +51,56 @@ def print_maze_solution(maze, path): print("\nSolution:") for row in maze_copy: print("".join(row)) -single_dfs('test_maze.txt') - -def single_bfs(file_path): - maze, initial_state = read_maze(file_path) - queue = deque([(initial_state, [])]) # (current state, path) - visited = set() - - while queue: - state, path = queue.popleft() - - if state.position in visited: - continue - visited.add(state.position) - - if is_goal(state): - print_maze_solution(maze, path) - print(f"Path cost: {len(path)}") - print(f"Nodes passed: {len(visited)}") - return path - - for move in get_neighbors(state, maze): - new_rewards = state.remaining_rewards - {move} if move in state.remaining_rewards else state.remaining_rewards - new_state = State(move, new_rewards) - queue.append((new_state, path + [move])) - - print("Sadly, the mouse is dead :(") - return None def manhattan_distance(pos1, pos2): return abs(pos1[0] - pos2[0]) + abs(pos1[1] - pos2[1]) -def single_gbfs(file_path): +def multi_astar(file_path): maze, initial_state = read_maze(file_path) - goal = next(iter(initial_state.remaining_rewards)) # 1prize,1goal - - priority_queue = [(manhattan_distance(initial_state.position, goal), initial_state, [])] - visited = set() + priority_queue = [(0, 0, initial_state, [])] # (f, g, state, path) + visited = {} # keys are (position, remaining_rewards) while priority_queue: - _, state, path = heapq.heappop(priority_queue) - - - if state.position in visited: + _, g, state, path = heapq.heappop(priority_queue) + print(f"Expanding: {state.position} | Remaining rewards: {state.remaining_rewards}") + + if (state.position, state.remaining_rewards) in visited and visited[(state.position, state.remaining_rewards)] <= g: continue - visited.add(state.position) + visited[(state.position, state.remaining_rewards)] = g - if is_goal(state): + # if the reward gets collected, remove it (so no loop) + new_rewards = set(state.remaining_rewards) + if state.position in new_rewards: + print(f"Collected reward at {state.position}!") + new_rewards.remove(state.position) + + if not new_rewards: # stop when all rewards are collected + print("Goal reached! The mouse is happy.") print_maze_solution(maze, path) print(f"Path cost: {len(path)}") - print(f"Nodes passed: {len(visited)}") + print(f"Nodes expanded: {len(visited)}") return path for move in get_neighbors(state, maze): - new_rewards = state.remaining_rewards - {move} if move in state.remaining_rewards else state.remaining_rewards - new_state = State(move, new_rewards) - heapq.heappush(priority_queue, (manhattan_distance(move, goal), new_state, path + [move])) - - - - print("Sadly, the mouse is dead :(") + updated_rewards = frozenset(new_rewards) # Convert back to frozenset + new_state = State(move, updated_rewards) + print(f"Moving to {move} | New rewards left: {updated_rewards}") + heuristic = sum(manhattan_distance(move, reward) for reward in updated_rewards) + new_g = g + 1 + f = new_g + heuristic + heapq.heappush(priority_queue, (f, new_g, new_state, path + [move])) + + print("The mouse is dead.") return None -single_gbfs('test_maze.txt') +if __name__ == "__main__": + while True: + file_name = input("Which maze do you want to throw the mouse at? Write the name: ") + if file_name.lower() == "q": + print("Quitting. The mouse escapes!") + break + try: + multi_astar(file_name) #so that I don't have a hardcoded file. + break + except FileNotFoundError: + print(f"Hmmmm..not sure that '{file_name}' is a correct maze name. Please try again or press 'q' to quit.") diff --git a/multiprize-small.txt b/multiprize-small.txt new file mode 100644 index 0000000000000000000000000000000000000000..4f675251e0704aedd728821ce6f5c93be3b17a80 --- /dev/null +++ b/multiprize-small.txt @@ -0,0 +1,13 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% P .% . . % +% %%%%% %%%%%% % % % %% % +% %. % % % % % % .% +%. % . %. % %%%%% +%%%%% %%%% %%% %%%%%%% .% +%. . % %%% % +%% %%%%%%%% %%%%%%%%%%% % % +% % % %%%% +% %%%%% %. % +%.% %%% % % %% %% %%%%%% +% % .% .% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%