From 85e8be1bfabbc48a9f12dfbde9466eb52950e8e9 Mon Sep 17 00:00:00 2001 From: Stephen McQuay Date: Tue, 30 Oct 2012 23:23:24 -0700 Subject: [PATCH] stuck somewhere in recurionland --- maze/__init__.py | 46 ++++++++++++++++++++++++++++++++++++-------- maze/test_parsing.py | 12 ++++++------ samples/small.txt | 5 +++++ 3 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 samples/small.txt diff --git a/maze/__init__.py b/maze/__init__.py index fd15d9c..fbafcdf 100644 --- a/maze/__init__.py +++ b/maze/__init__.py @@ -3,15 +3,45 @@ from random import randint class CS235Maze(object): - def __init__(self, data, size=8): - self.data = data - self.size = size + def __init__(self, data): + self._data = data + self._size = len(data) + + def _solve(self, x, y, z, visited): + print x, y, z + if all(i == self._size - 1 for i in (x, y, z)): + return True + + if x - 1 >= 0 and (x - 1, y, z) not in visited: + _v = copy.deepcopy(visited) + _v.add((x - 1, y, z)) + return self._solve(x - 1, y, z, _v) + if x + 1 < self._size and self._data[x + 1][y][z] and (x + 1, y, z) not in visited: + _v = copy.deepcopy(visited) + _v.add((x + 1, y, z)) + return self._solve(x + 1, y, z, _v) + + if y - 1 >= 0 and (x, y - 1, z) not in visited: + _v = copy.deepcopy(visited) + _v.add((x, y - 1, z)) + self._solve(x, y - 1, z, _v) + if y + 1 < self._size and self._data[x][y + 1][z] and (x, y + 1, z) not in visited: + _v = copy.deepcopy(visited) + _v.add((x, y + 1, z)) + return self._solve(x, y + 1, z, _v) + + if z - 1 >= 0 and (x, y, z - 1) not in visited: + _v = copy.deepcopy(visited) + _v.add((x, y, z - 1)) + return self._solve(x, y, z - 1, _v) + if z + 1 < self._size and self._data[x][y][z + 1] and (x, y, z + 1) not in visited: + _v = copy.deepcopy(visited) + _v.add((x, y, z + 1)) + return self._solve(x, y, z + 1, _v) - def _solve(self, x, y, z): - return False, set() def solve(self): - return self._solve(0, 0, 0) + return self._solve(0, 0, 0, set()) def __str__(self): r = derp_transpose(self.data) @@ -32,7 +62,7 @@ def make_maze(size=8): for j in xrange(size): r[i].append([randint(0, 1) for k in xrange(size)]) r[0][0][0] = 1 - r[7][7][7] = 1 + r[size - 1][size - 1][size - 1] = 1 return CS235Maze(r, size) @@ -40,7 +70,7 @@ def parse_maze(maze): soilded = [[[int(i) for i in j.split()] for j in k.split('\n')] for k in maze.split('\n\n') if k] - cleaned = derp_transpose(soilded) + cleaned = derp_transpose(soilded, size=len(soilded)) return CS235Maze(cleaned) diff --git a/maze/test_parsing.py b/maze/test_parsing.py index a1dd286..6d48376 100644 --- a/maze/test_parsing.py +++ b/maze/test_parsing.py @@ -83,9 +83,9 @@ class MazeTests(unittest.TestCase): def test_at_indices(self): - assert self.m[7][0][0] == 0 - assert self.m[7][3][0] == 1 - assert self.m[7][0][1] == 0 - assert self.m[3][3][3] == 1 - assert self.m[5][2][6] == 1 - assert self.m[7][5][4] == 0 + assert self.m._data[7][0][0] == 0 + assert self.m._data[7][3][0] == 1 + assert self.m._data[7][0][1] == 0 + assert self.m._data[3][3][3] == 1 + assert self.m._data[5][2][6] == 1 + assert self.m._data[7][5][4] == 0 diff --git a/samples/small.txt b/samples/small.txt new file mode 100644 index 0000000..a2f5f18 --- /dev/null +++ b/samples/small.txt @@ -0,0 +1,5 @@ +1 0 +0 0 + +1 0 +1 1