Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как реализовать ход коня python решение?

  1. Как реализовать ход коня python решение?

    Привет, ребята! Столкнулся с задачей по написанию алгоритма шахматного хода коня на Python. Не могу совсем сообразить, как обработать все возможные движения и проверку границ доски. Поделитесь решением или дайте подсказки, как подступиться к этой задаче.



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет. Вот тебе базовый пример, как можно реализовать алгоритм шахматного хода коня на Python.
    Используй библиотеку numpy, это сильно упростит обработку доски.

    Программный код:
    import numpy as np

    def valid_moves
    (position):
        
    moves = [(-2, -1), (-1, -2), (1, -2), (2, -1), (21), (12), (-12), (-21)]
        
    board_size 8
        possible_moves 
    = []
        
        for 
    move in moves:
            
    new_position = (position[0] + move[0], position[1] + move[1])
            if 
    <= new_position[0] < board_size and <= new_position[1] < board_size:
                
    possible_moves.append(new_position)
        
        return 
    possible_moves

    current_position 
    = (33)
    print(
    valid_moves(current_position)) 
    Этот код проверяет допустимые ходы и вернёт список позиций, куда конь может пойти из текущей позиции. Надеюсь, это поможет.

  4. Цитата Сообщение от Люся
    Привет. Вот тебе базовый пример, как можно реализовать алгоритм шахматного хода коня на Python.
    Используй библиотеку numpy, это сильно упростит обработку доски.

    Программный код:
    import numpy as np

    def valid_moves
    (position):
        
    moves = [(-2, -1), (-1, -2), (1, -2), (2, -1), (21), (12), (-12), (-21)]
        
    board_size 8
        possible_moves 
    = []
        
        for 
    move in moves:
            
    new_position = (position[0] + move[0], position[1] + move[1])
            if 
    <= new_position[0] < board_size and <= new_position[1] < board_size:
                
    possible_moves.append(new_position)
        
        return 
    possible_moves

    current_position 
    = (33)
    print(
    valid_moves(current_position)) 
    Этот код проверяет допустимые ходы и вернёт список позиций, куда конь может пойти из текущей позиции. Надеюсь, это поможет.
    Неплохо, можно еще упростить проверку допустиомсти хода прямо в цикле через фильтрацию.

  5. Привет! Для задачи шахматного хода коня можно сперва создать массив всех возможных движений коня. Дальше просто фильтруешь допустимые ходы.

    Программный код:
    def knight_moves(pos):
        
    moves = [(-2, -1), (-1, -2), (1, -2), (2, -1), (21), (12), (-12), (-21)]
        
    res = []
        for 
    move in moves:
            
    new_pos = (pos[0] + move[0], pos[1] + move[1])
            if 
    new_pos[0] >= and new_pos[0] < and new_pos[1] >= and new_pos[1] < 8:
                
    res.append(new_pos)
        return 
    res

    print(knight_moves((44))) 
    Вот так просто 8)

  6. Цитата Сообщение от NinaKnight
    Привет! Для задачи шахматного хода коня можно сперва создать массив всех возможных движений коня. Дальше просто фильтруешь допустимые ходы.

    Программный код:
    def knight_moves(pos):
        
    moves = [(-2, -1), (-1, -2), (1, -2), (2, -1), (21), (12), (-12), (-21)]
        
    res = []
        for 
    move in moves:
            
    new_pos = (pos[0] + move[0], pos[1] + move[1])
            if 
    new_pos[0] >= and new_pos[0] < and new_pos[1] >= and new_pos[1] < 8:
                
    res.append(new_pos)
        return 
    res

    print(knight_moves((44))) 
    Вот так просто 8)
    Это рабочий пример, легко понять. но ты перемудрил с переменным именам. ?

  7. Четкий вопрос! Вот моё решение через списки:

    Программный код:
    def get_knight_moves(xy):
        
    moves = [(21), (12), (-12), (-21), (-2, -1), (-1, -2), (1, -2), (2, -1)]
        
    result = []
        for 
    mxmy in moves:
            
    nxny mxmy
            
    if <= nx and <= ny 8:
                
    result.append((nxny))
        return 
    result

    print(get_knight_moves(00)) 
    Как видишь, всего лишь убрал import numpy, экономим ресурсы.

  8. Цитата Сообщение от Чулпан
    Четкий вопрос! Вот моё решение через списки:

    Программный код:
    def get_knight_moves(xy):
        
    moves = [(21), (12), (-12), (-21), (-2, -1), (-1, -2), (1, -2), (2, -1)]
        
    result = []
        for 
    mxmy in moves:
            
    nxny mxmy
            
    if <= nx and <= ny 8:
                
    result.append((nxny))
        return 
    result

    print(get_knight_moves(00)) 
    Как видишь, всего лишь убрал import numpy, экономим ресурсы.
    Эт круто, но без numpy сложнее будет в больших проектах, хотя для задачи норм.

  9. Го делаем трики штуку с list comprehensions и lambda. Вот:

    Программный код:
    get_knight_moves lambda xy: \
        [(
    x+dxy+dy) for dxdy in \
        [(
    21), (12), (-12), (-21), (-2, -1), (-1, -2), (1, -2), (2, -1)] \
        if 
    <= x+dx and <= y+dy 8]
       
    print(
    get_knight_moves(22)) 
    Просто, эффективно и всегда смотрибельно.

  10. Цитата Сообщение от Valentin
    Го делаем трики штуку с list comprehensions и lambda. Вот:

    Программный код:
    get_knight_moves lambda xy: \
        [(
    x+dxy+dy) for dxdy in \
        [(
    21), (12), (-12), (-21), (-2, -1), (-1, -2), (1, -2), (2, -1)] \
        if 
    <= x+dx and <= y+dy 8]
       
    print(
    get_knight_moves(22)) 
    Просто, эффективно и всегда смотрибельно.
    Ламбда и list comprehensions — топчик. Но для новичков может быть не совсем ясно. ?

Страница 1 из 2 12 ПоследняяПоследняя