Форум сайта python.su
outstripа вы вставляли так как на форум отправили? с
а все равно выдает ошибку- Прямой доступ к лабиринту запрещен.
maze_example1 = { 'm': [ [0,0,0,1,1,0,1,1,0,0,0], [0,1,0,0,0,0,0,0,0,1,0], [0,1,0,1,1,1,1,1,0,1,0], [0,0,0,1,0,0,0,1,0,0,0], [0,0,1,1,0,0,0,1,1,0,0], [0,0,1,0,0,0,0,0,1,0,0], [0,0,1,0,1,0,1,0,1,0,0], [0,0,1,0,0,0,0,0,1,0,0], [0,0,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,1,0,1,0,1,0,0], ], 's': (0,5), 'f': (4,5) }
maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f']) maze_controller(maze_runner) print maze_runner.found()
import time def print_maze(maze,x,y): for i in range(len(maze)): s = '' for j in range(len(maze)): if i == x and j == y: s += 'X' elif maze[i][j] == 1: s += '1' else: s += '.' print s print ' ' class MazeRunner(object): def __init__(self, maze, start, finish): self.__maze = maze self.__rotation = (1,0) self.__x = start[0] self.__y = start[1] self.__finish = finish def go(self): x = self.__x + self.__rotation[0] y = self.__y + self.__rotation[1] if x > len(self.__maze)-1 \ or y > len(self.__maze)-1 \ or x < 0 or y < 0 \ or self.__maze[x][y] == 1: return False self.__x = x self.__y = y print_maze(self.__maze, self.__x, self.__y) time.sleep(0.2) print(chr(27) + "[2J") return True def turn_left(self): left_rotation = { (0,1): (1,0), (1,0): (0,-1), (0,-1): (-1,0), (-1,0): (0,1), } self.__rotation = left_rotation[self.__rotation] return self def turn_right(self): right_rotation = { (1,0): (0,1), (0,-1): (1,0), (-1,0): (0,-1), (0,1): (-1,0), } self.__rotation = right_rotation[self.__rotation] return self def found(self): return self.__x == self.__finish[0] and self.__y == self.__finish[1] def maze_controller(mr): while not(mr.found()): if mr.go(): if mr.found()==False: mr.turn_right() if mr.go(): if mr.found()==False: mr.go() mr.go() else: mr.turn_left() mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() else: mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() mr.turn_right()
Офлайн
Ну да, я убирал примеры, ошибка не поменялась. Я высылаю Вам программу которая работает в cmd. Меня смущает то, что сам лабиринт дублируется циклом. Как по мне лабиринт должен быть один, а перемещаться в нем должна только единичка…
Офлайн
Как то так должно быть))
ПС у меня еще 14 попыток.
Отредактировано outstrip (Март 26, 2015 21:58:34)
Офлайн
Согласно заданию я должен вставить. Потому ошибка тут, и проблема состоит в том что цикл не прекращается…
def maze_controller(mr): while not(mr.found()): if mr.go(): if mr.found()==False: mr.turn_right() if mr.go(): if mr.found()==False: mr.go() mr.go() else: mr.turn_left() mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() else: mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() mr.turn_right()
Отредактировано outstrip (Март 26, 2015 22:14:37)
Офлайн
outstripну значит робот не может найти артефакт!
и проблема состоит в том что цикл не прекращается
Офлайн
ок, попробую.
Офлайн
Доброй ночи. Я использовал вот этот алгоритм,
https://www.youtube.com/watch?v=br5nBcy5MAo&list=PL3RsBg2mRlf3Oajhzk9HSFdQwi9SPMOaP&index=6
Вроде я его повторил, чего он не находит этот камень, я не знаю, наверное камень фрактальный)))
Вечер снова потрачен, а результата 0
Отредактировано outstrip (Март 27, 2015 23:37:17)
Офлайн
нужно не видео смотреть а книги и статьи читать!
ну как-то так
простой и эффективный ,в даном случае, алгоритм
def maze_controller(obj): x = y = 0 rotate_y, rotate_x = 1, 0 a = [[1]] while not obj.found(): if y + rotate_y <= 0: a = [[0] * len(a[-1])] + a y += 1 if len(a) - 1 <= y + rotate_y: a.append([0] * len(a[-1])) if x + rotate_x <= 0: map(lambda x: x.insert(0, 0), a) x += 1 if len(a[y]) - 1 <= x + rotate_x: map(lambda x: x.append(0), a) steps = min(a[y - 1][x], a[y][x - 1], a[y][x + 1], a[y + 1][x]) while a[y + rotate_y][x + rotate_x] != steps: obj.turn_right() rotate_x, rotate_y = 0 if rotate_x else (1 if rotate_y == 1 else -1),\ 0 if rotate_y else (-1 if rotate_x == 1 else 1) if obj.go(): y += rotate_y x += rotate_x a[y][x] += 1 else: a[y + rotate_y][x + rotate_x] = 'x'
Офлайн
Огромное Вам спасибо. Мир не без добрых людей!
Офлайн