Найти - Пользователи
Полная версия: Прошу помочь с непростым для меня заданием.
Начало » Центр помощи » Прошу помочь с непростым для меня заданием.
1 2
terabayt
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()
точно код работает? вы на всех примерах проверили? там же ограниченое количество попыток
P.S. я точно не знаю, так как помог только аписать функцию, а что и как там вставлется я не знаю
outstrip
Ну да, я убирал примеры, ошибка не поменялась. Я высылаю Вам программу которая работает в cmd. Меня смущает то, что сам лабиринт дублируется циклом. Как по мне лабиринт должен быть один, а перемещаться в нем должна только единичка…
outstrip

Как то так должно быть))
ПС у меня еще 14 попыток.
outstrip
Согласно заданию я должен вставить. Потому ошибка тут, и проблема состоит в том что цикл не прекращается…

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()

Потому что:
1. Написать функцию maze_controller (mr), единственным аргументом которой является уже инициализирован (проверяющий) объект класса MazeRunner. Функция ничего не возвращает, но в результате ее выполнения работ должен быть переведен в поле лабиринта, где находится артефакт - то есть после вызова функции maze_controller (maze_runner), метод объекта maze_runner.found () должен возвращать True.
2. Прямой доступ к изображению лабиринта запрещен.
3. Ваш решение должен содержать только функцию maze_controller и ничего кроме нее. Ни ввода или вывода данных кроме взаимодействия с переданным объектом быть не должно. Объект управления роботом создается и инициализируется автоматическим проверяющим вне вашей функции.
terabayt
outstrip
и проблема состоит в том что цикл не прекращается
ну значит робот не может найти артефакт!
пробуйте другой алгоритм
давайте еще один день и завтра, если не получится, яночью скину готовое решение
outstrip
ок, попробую.
outstrip
Доброй ночи. Я использовал вот этот алгоритм,
https://www.youtube.com/watch?v=br5nBcy5MAo&list=PL3RsBg2mRlf3Oajhzk9HSFdQwi9SPMOaP&index=6
Вроде я его повторил, чего он не находит этот камень, я не знаю, наверное камень фрактальный)))
Вечер снова потрачен, а результата 0
terabayt
нужно не видео смотреть а книги и статьи читать!
ну как-то так
простой и эффективный ,в даном случае, алгоритм
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'
outstrip
Огромное Вам спасибо. Мир не без добрых людей!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB