среда, 11 марта 2015 г.

CodenJoy. 2048


В предыдущем посте я написал о посещении frameworksdays, на котором нас познакомили с проектом codenjoy. Очередные головоломки для разработчиков. В перечне задачек была предложена игра 2048 - суть задания написать алгоритм (бота), позволяющий набрать максимальное количество баллов из всех зарегистрированных участников.

Взаимодействие с сервером осуществляется посредством websoсket'ов. Значит нет привязки к языку программирования - что не может не радовать. 

Установил себе модуль https://pypi.python.org/pypi/websocket-client для работы с вебсокетами через python и начеркал примитивный алгоритм, который может прийти в голову - постоянно жмем кнопку вниз, когда строка (двумерный массив разложенный в строку) не изменилась от предыдущего действия, то нажимаем влево. В результате имеем следующий код:


import websocket

def on_message(ws, message):
    ws.send("LEFT" if message == ws.last_message else "DOWN")
    ws.last_message = message

if __name__ == "__main__":
    ws = websocket.WebSocketApp( "ws://tetrisj.jvmhost.net:12270/codenjoy-contest/ws?user=[user]"
                               , on_message = on_message)
    ws.last_message = ""
    ws.run_forever()


Такой бот смог набрать 7938 и занять 3е место в рейтинге, к заметке - второе место имеет такое же количество баллов.

Для сброса текущего счета (перерегистрация) клиента:
curl http://codenjoy.com/codenjoy-contest/register -d "name=[user]&password=[pass]&gameName=a2048"

Если будет возможность написать обновленного бота, который выйдет на первую строчку рейтинга, то обязательно выложу исходный код. И напоследок - советую всем попробовать свои силы в написании алгоритмов для подобных задачек.

1 комментарий:

  1. Этот комментарий был удален администратором блога.

    ОтветитьУдалить