среда, 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. Finally, we ensured each portal had a number of} deposit choices as an alternative of counting on the everyday credit card deposit methods. You can play free slots from your desktop at home or your cell gadgets whereas you’re on the go! Slotomania 토토사이트 is super-quick and handy to entry and play, anyplace, anytime.

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