import gothpick # example 01 # scatty's chest in his house numOfBlocks = 5 numOfPins = 7 initialPositions = { 0:6, 1:3, 2:2, 3:1, 4:7 } edges = { 0:[(1,0),(1,3)], 1:[(1,1),(1,4)], 2:[(1,2),(-1,4)], 3:[(1,3),(-1,4),(-1,2),(1,1)], 4:[(1,4)] } gothpick.PrintInput(initialPositions,edges) solvedpath = gothpick.lockpick(numOfBlocks,numOfPins,initialPositions,edges) gothpick.TranslateResults(solvedpath,False,edges, initialPositions) ''' 01/31: 2 -> RIGHT [0, -1, 0, 0, -1] [6, 2, 2, 1, 6] 02/31: 3 -> LEFT [0, 0, 1, 0, -1] [6, 2, 3, 1, 5] 03/31: 3 -> LEFT [0, 0, 1, 0, -1] [6, 2, 4, 1, 4] 04/31: 3 -> LEFT [0, 0, 1, 0, -1] [6, 2, 5, 1, 3] 05/31: 4 -> LEFT [0, 1, -1, 1, -1] [6, 3, 4, 2, 2] 06/31: 5 -> LEFT [0, 0, 0, 0, 1] [6, 3, 4, 2, 3] 07/31: 5 -> LEFT [0, 0, 0, 0, 1] [6, 3, 4, 2, 4] 08/31: 4 -> LEFT [0, 1, -1, 1, -1] [6, 4, 3, 3, 3] 09/31: 5 -> LEFT [0, 0, 0, 0, 1] [6, 4, 3, 3, 4] 10/31: 3 -> LEFT [0, 0, 1, 0, -1] [6, 4, 4, 3, 3] 11/31: 5 -> LEFT [0, 0, 0, 0, 1] [6, 4, 4, 3, 4] 12/31: 5 -> LEFT [0, 0, 0, 0, 1] [6, 4, 4, 3, 5] 13/31: 2 -> RIGHT [0, -1, 0, 0, -1] [6, 3, 4, 3, 4] 14/31: 4 -> LEFT [0, 1, -1, 1, -1] [6, 4, 3, 4, 3] 15/31: 5 -> LEFT [0, 0, 0, 0, 1] [6, 4, 3, 4, 4] 16/31: 1 -> RIGHT [-1, 0, 0, -1, 0] [5, 4, 3, 3, 4] 17/31: 3 -> LEFT [0, 0, 1, 0, -1] [5, 4, 4, 3, 3] 18/31: 5 -> LEFT [0, 0, 0, 0, 1] [5, 4, 4, 3, 4] 19/31: 5 -> LEFT [0, 0, 0, 0, 1] [5, 4, 4, 3, 5] 20/31: 2 -> RIGHT [0, -1, 0, 0, -1] [5, 3, 4, 3, 4] 21/31: 4 -> LEFT [0, 1, -1, 1, -1] [5, 4, 3, 4, 3] 22/31: 5 -> LEFT [0, 0, 0, 0, 1] [5, 4, 3, 4, 4] 23/31: 1 -> RIGHT [-1, 0, 0, -1, 0] [4, 4, 3, 3, 4] 24/31: 3 -> LEFT [0, 0, 1, 0, -1] [4, 4, 4, 3, 3] 25/31: 5 -> LEFT [0, 0, 0, 0, 1] [4, 4, 4, 3, 4] 26/31: 5 -> LEFT [0, 0, 0, 0, 1] [4, 4, 4, 3, 5] 27/31: 2 -> RIGHT [0, -1, 0, 0, -1] [4, 3, 4, 3, 4] 28/31: 4 -> LEFT [0, 1, -1, 1, -1] [4, 4, 3, 4, 3] 29/31: 5 -> LEFT [0, 0, 0, 0, 1] [4, 4, 3, 4, 4] 30/31: 3 -> LEFT [0, 0, 1, 0, -1] [4, 4, 4, 4, 3] 31/31: 5 -> LEFT [0, 0, 0, 0, 1] [4, 4, 4, 4, 4] ''' ######################################################################## # example 02 # guard post above torrez numOfBlocks = 5 numOfPins = 7 initialPositions = { 0:1, 1:6, 2:1, 3:1, 4:6 } edges = { 0:[(1,0),(-1,2),(1,3)], 1:[(1,1),(1,2)], 2:[(1,2),(1,1),(-1,0)], 3:[(1,3),(-1,1),(-1,0)], 4:[(1,4),(1,3),(-1,1)] } gothpick.PrintInput(initialPositions,edges) solvedpath = gothpick.lockpick(numOfBlocks,numOfPins,initialPositions,edges) gothpick.TranslateResults(solvedpath,False,edges, initialPositions) ''' expected output: 01/31: 2 -> LEFT [0, 1, 1, 0, 0] [1, 7, 2, 1, 6] 02/31: 3 -> RIGHT [1, -1, -1, 0, 0] [2, 6, 1, 1, 6] 03/31: 2 -> LEFT [0, 1, 1, 0, 0] [2, 7, 2, 1, 6] 04/31: 3 -> RIGHT [1, -1, -1, 0, 0] [3, 6, 1, 1, 6] 05/31: 2 -> LEFT [0, 1, 1, 0, 0] [3, 7, 2, 1, 6] 06/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 6, 1, 1, 6] 07/31: 2 -> LEFT [0, 1, 1, 0, 0] [4, 7, 2, 1, 6] 08/31: 4 -> LEFT [-1, -1, 0, 1, 0] [3, 6, 2, 2, 6] 09/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 5, 1, 2, 6] 10/31: 4 -> LEFT [-1, -1, 0, 1, 0] [3, 4, 1, 3, 6] 11/31: 2 -> LEFT [0, 1, 1, 0, 0] [3, 5, 2, 3, 6] 12/31: 4 -> LEFT [-1, -1, 0, 1, 0] [2, 4, 2, 4, 6] 13/31: 2 -> LEFT [0, 1, 1, 0, 0] [2, 5, 3, 4, 6] 14/31: 3 -> RIGHT [1, -1, -1, 0, 0] [3, 4, 2, 4, 6] 15/31: 2 -> LEFT [0, 1, 1, 0, 0] [3, 5, 3, 4, 6] 16/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 4, 2, 4, 6] 17/31: 5 -> RIGHT [0, 1, 0, -1, -1] [4, 5, 2, 3, 5] 18/31: 4 -> LEFT [-1, -1, 0, 1, 0] [3, 4, 2, 4, 5] 19/31: 2 -> LEFT [0, 1, 1, 0, 0] [3, 5, 3, 4, 5] 20/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 4, 2, 4, 5] 21/31: 5 -> RIGHT [0, 1, 0, -1, -1] [4, 5, 2, 3, 4] 22/31: 4 -> LEFT [-1, -1, 0, 1, 0] [3, 4, 2, 4, 4] 23/31: 2 -> LEFT [0, 1, 1, 0, 0] [3, 5, 3, 4, 4] 24/31: 2 -> LEFT [0, 1, 1, 0, 0] [3, 6, 4, 4, 4] 25/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 5, 3, 4, 4] 26/31: 1 -> RIGHT [-1, 0, 1, -1, 0] [3, 5, 4, 3, 4] 27/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 4, 3, 3, 4] 28/31: 2 -> LEFT [0, 1, 1, 0, 0] [4, 5, 4, 3, 4] 29/31: 4 -> LEFT [-1, -1, 0, 1, 0] [3, 4, 4, 4, 4] 30/31: 3 -> RIGHT [1, -1, -1, 0, 0] [4, 3, 3, 4, 4] 31/31: 2 -> LEFT [0, 1, 1, 0, 0] [4, 4, 4, 4, 4] ''' numOfBlocks = 5 numOfPins = 7 initialPositions = { 0:1, 1:4, 2:6, 3:2, 4:1 } edges = { 0:[(1,0),(1,3)], 1:[(1,1),(-1,0)], 2:[(1,2)], 3:[(1,3),(1,4),(1,2),(-1,1)], 4:[(1,4),(1,3),(-1,2)] } gothpick.PrintInput(initialPositions,edges) solvedpath = gothpick.lockpick(numOfBlocks,numOfPins,initialPositions,edges) gothpick.TranslateResults(solvedpath,False,edges, initialPositions) ''' expected output: 01/25: 2 -> RIGHT [1, -1, 0, 0, 0] [2, 3, 6, 2, 1] 02/25: 5 -> LEFT [0, 0, -1, 1, 1] [2, 3, 5, 3, 2] 03/25: 5 -> LEFT [0, 0, -1, 1, 1] [2, 3, 4, 4, 3] 04/25: 3 -> LEFT [0, 0, 1, 0, 0] [2, 3, 5, 4, 3] 05/25: 5 -> LEFT [0, 0, -1, 1, 1] [2, 3, 4, 5, 4] 06/25: 3 -> LEFT [0, 0, 1, 0, 0] [2, 3, 5, 5, 4] 07/25: 4 -> RIGHT [0, 1, -1, -1, -1] [2, 4, 4, 4, 3] 08/25: 5 -> LEFT [0, 0, -1, 1, 1] [2, 4, 3, 5, 4] 09/25: 3 -> LEFT [0, 0, 1, 0, 0] [2, 4, 4, 5, 4] 10/25: 2 -> RIGHT [1, -1, 0, 0, 0] [3, 3, 4, 5, 4] 11/25: 4 -> RIGHT [0, 1, -1, -1, -1] [3, 4, 3, 4, 3] 12/25: 3 -> LEFT [0, 0, 1, 0, 0] [3, 4, 4, 4, 3] 13/25: 5 -> LEFT [0, 0, -1, 1, 1] [3, 4, 3, 5, 4] 14/25: 3 -> LEFT [0, 0, 1, 0, 0] [3, 4, 4, 5, 4] 15/25: 2 -> RIGHT [1, -1, 0, 0, 0] [4, 3, 4, 5, 4] 16/25: 4 -> RIGHT [0, 1, -1, -1, -1] [4, 4, 3, 4, 3] 17/25: 3 -> LEFT [0, 0, 1, 0, 0] [4, 4, 4, 4, 3] 18/25: 3 -> LEFT [0, 0, 1, 0, 0] [4, 4, 5, 4, 3] 19/25: 5 -> LEFT [0, 0, -1, 1, 1] [4, 4, 4, 5, 4] 20/25: 3 -> LEFT [0, 0, 1, 0, 0] [4, 4, 5, 5, 4] 21/25: 1 -> RIGHT [-1, 0, 0, -1, 0] [3, 4, 5, 4, 4] 22/25: 2 -> RIGHT [1, -1, 0, 0, 0] [4, 3, 5, 4, 4] 23/25: 4 -> RIGHT [0, 1, -1, -1, -1] [4, 4, 4, 3, 3] 24/25: 5 -> LEFT [0, 0, -1, 1, 1] [4, 4, 3, 4, 4] 25/25: 3 -> LEFT [0, 0, 1, 0, 0] [4, 4, 4, 4, 4] '''