Как стать автором
Обновить

Комментарии 70

Добрый день, у меня проблема с запуском. В чем дело?

image
Какая версия node.js?
Точно, я забыл, что версия последняя нужна
Вижу, что я забыл включить проверку версии. Добавил её. Теперь, если скрипт запускают на версии Node.js, отличной от 8.1.3, он выдаёт ошибку (можно обойти проверку параметром --force).
«Эх, поучаствовать бы, но жаваскрипт не знаю»… тред стартует здесь! Кто как я — в комментарии.
Заинтересовавшиеся — отвечайте вопрошающим :)



Присоединюсь в команду в качестве предлагателя неожиданных решений и падавана по Js.
Возможно, смогу по удалёнке, но лучше бы, наверное, вживую (Москва).

Имеющиеся навыки: С# (Unity3D: 2 мини-игры, 1 AR через недокументированные возможности), PHP (работающий сайт на своём фреймворке на одной функции, без ООП, NoSQL, пре-рендер HTML). Js знаю на уровне «ctrl-ins», «shift-ins».
Состояние игры обновляется раз в 100 мс. Если функция play будет генерировать команды быстрее, то персонаж будет двигаться 10 раз в секунду. После каждой команды генератор будет блокироваться на инструкции yield до конца рануда длиной в 100 мс.

Совсем не понятно сколько это реально вычислительной мощности дает "типа c3.large на Amazon AWS " — это сильная машина, или слабая? Как вообще такое оценить?

Это вполне конкретная аппаратура, смотрите спецификацию по ссылке. Собственно, Вы можете арендовать у Amazon такой сервер на час, чтобы потестировать своё решение.
Это вполне конкретная аппаратура
Да я понимаю — но я совсем не знаком с тем насколько виртуализация жрет производительность.
Вариант с арендой походе единственное решение
Новый пользователь AWS может получить некоторое количество вычислительных ресурсов бесплатно. Для тестирования решения этой задачи хватит.
https://aws.amazon.com/ru/free/
Пишут:
CPU — Intel Xeon E5-2680 v2, на vds доступно 2 ядра по 2,8 Ггц
RAM — 3,75 Гб
HDD — SSD 2x16 Гб, но винт тут вроде не пригодится в решении задачи
На самом деле вашему процессу доступно одно ядро (но их два, так что контролирующий процесс будет, скорее всего, на другом), 2 ГБ кучи (настройки Node.js по умолчанию) и никакого доступа к диску. Это всё следует из опубликованных условий тестирования.
Спасибо за уточнения насчёт оперативки, и про одноядерность обработки скрипта тоже может быть полезным для остальных читателей комментарий.

Важный вопрос, есть ли оценки сколько миллисекунд из умолчальных 100 мс на фрейм будет доступно скрипту для «подумать»? Было б очень неприятно, если контролирующий процесс, он же сам движок игры с обёртками, тут бы как-то заметно мешал.
Все скрипты на Node.js — одноядерные. Задействовать более одного ядра можно было бы только с использованием системных модулей, которые условия конкурса включать запрещают.

Я таких измерений не делал. Кто-то говорил, что на первом ходу доступно 70 мс, а на последующих — больше.
Ещё такой вопрос, допускает ли генератор уровней ситуацию, когда игрок ставится в изначально опасное положение, с которого он если не уйдёт немедленно, то погибнет? Посмотрел полсотни уровней, подобного не встретил.
См. исходный текст функции is_playable в файле game/generate.js. Если случайно сгненерированная карта не удовлетворяет этому предикату, она отбраковывается, и генерируется новая.

А не планируете запустить онлайн сервер с таблицой лидеров? (А чтоб избежать нагрузки скажем запускать новое отправленное решение не раньше чем через 20 минут)


Сразу двух зайцев (и девы поймут производительность своего кода, и можно будет увидеть насколько далеко к лидерам)

Такая возможность обсуждалась, но на этот раз решили не делать, так как это увеличивает трудоёмкость организации конкурса, причём во многом из-за сложности безопасного запуска кода, которому мы не доверяем, на наших серверах в автоматическом режиме.
Простите за вмешательство в тред, но на самом деле это важная тема — соревновательный аспект. Сейчас по сути предлагается соревноваться с самим собой, и лишь через месяц можно будет узнать своё место в результатах.
Мотивация в случае понимания достижений остальных участников явно повышается
Может быть, стоит принимать решения в публичном пространстве, в виде github-repo? Приоритет тут бесспорен, то есть проблем с кражей решения нет. Зато появляется плюс в виде соревнования.

Решается публикацией в комментариях результатов для какого-то одного фиксированного рандом сида.

Сразу предлагаю идеальный набор рандом сидов: 42, 31415926, 2719281929

Для сида 31415926 у меня пока как-то так
Недурно. Даже подозреваю, что знаю, как работает :)))
У меня в некоторых местах используется рандом, поэтому результаты нестабильны, но при небольшом везении получается так (406 очков; кажется, теоретически можно и чуть больше).
Гифка 2.4 Мб


В общем, есть ощущение, что решения победителей будут соревноваться не на уровне «кто больше алмазов соберёт», а «у кого хитрее комбо получается делать».
Профессиональный убийца бабочек =)
НЛО прилетело и опубликовало эту надпись здесь
В том числе.
НЛО прилетело и опубликовало эту надпись здесь
У нас тут с коллегами на перекуре возникла идея поместить на одно поле двух ботов, и чтобы каждому из них другой виделся как бабочка. При соприкосновении оба взрываются. Можно попытаться убить другого камнем.

Но это надо было бы менять условия конкурса. Просто забавная мысль.
Присылайте своё решение, даже если собираетесь его ещё улучшать. Проведём предварительное тестирование.
Присылайте своё решение, даже если собираетесь его ещё улучшать. Проведём предварительное тестирование. Не live leaderbord, но компромисс.
НЛО прилетело и опубликовало эту надпись здесь
Когда будет что тестировать. Пока только два решения прислали. Можно было бы сделать два раунда — 10 и 20 числа. В общем, зависит от активности участников.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
А вот, до кучи, с сидом 2719281929
Здесь н етак шоколадно :)
НЛО прилетело и опубликовало эту надпись здесь
Как по мне куда более ефективней будет охотиться за бабочками с самого начала. Потом можна нагенерить кучу hot steak'ow.
НЛО прилетело и опубликовало эту надпись здесь
В этот раз мы сняли запрет на публикацию своих решений до конца конкурса. Поэтому участники теперь могут самоорганизовываться для тестирования.
Может, сделать промежуточный lightning-round? Т.е. однократно опубликовать результаты присланные на момент, например, 15 июля, а потом уже последние
Подумаем.
Да, сделаем. Присылайте решения, даже если ещё будете их улучшать.

"Решения принимаются до 31 июля 2017, 23:59:59 UTC."
Тут "до" это ")" или "]"?

const deadline = new Date('2017-08-01 UTC');
let now = new Date();
if (now>=deadline)
    // reject submission


Тут ещё можно спросить, по началу или концу аплоада смотрим. По концу.
Воркеры это хорошо, конечно, но из-за них отлаживать код даже с опцией --unsafe как-то очень мучительно.

Я сделал версию, которая запускает решение «совсем небезопасным» образом (например, ограничения по времени не проверяются — если решение зависнет, то зависнет всё вместе). Зато дебажить стало гораздо проще.

Возможно, участникам конкурса пригодится: https://github.com/deNULL/challenge_jsdash.
Запускать с опцией --no-workers (или -w).
НЛО прилетело и опубликовало эту надпись здесь
Спасибо! В несколько изменённом виде добавил такую возможность (флаг --in-process).
Для тех кто впервые ставит node на win (как я) для решения вот таких вот проблем:
Error: Cannot find module 'ANY_NAME'

в cmd
npm install ANY_NAME
Собственно, совет для всех ОС: установить требуемые скрипту модули согласно файлу `package.json` позволяет команда `npm install` без имён пакетов.

Ну и как, работает под Windows? Мне интересно. Ввод-вывод, вообще, рассчитан на xterm.
Неплохо, кстати.
Работает. Хотя немного прыгает
Прекрасно работает и под Win7 x64. Там у ноды вполне себе нормальная консоль, видимо поддерживающая xterm. Не прыгает, всё плавно отрисовывается.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
При запуске ваших решений мы будем использовать настройки по умолчанию
НЛО прилетело и опубликовало эту надпись здесь
Механика скатывания скопирована с исторического оригинала Boulder Dash. Смотрите код класса LooseThing. Объекты предпочитают падать, нежели скатываться, и скатываться влево, нежели вправо.
НЛО прилетело и опубликовало эту надпись здесь
Если вас интересуют подробности игровой механики, читайте исходный код модуля game.js.
vlreshet ^. Сори, давно не пользовался хабром :)
По поводу реф. ссылок. А если я не пользуюсь почтой чтобы делиться таким (только мессенджерами по сути), ничего в зачет не пойдет? (просто интересно, потому что сомневаюсь что много людей используют почту для таких целей)
Вы можете сообщить человеку и почтой, и другим способом. Нам нужно документальное подтверждение отправки ссылки как основание для выдачи реферальной премии.
При тестировании каждого решения будет использоваться один и тот же набор затравочных значений (seeds) для генератора псевдослучайных чисел, чтобы программы всех участников получали одни и те же уровни. При запуске ваших решений мы будем использовать настройки по умолчанию

feldgendler, приветствую, и такой вопрос. При тестировании сколько раз прогоняется один и тот же сид? Ведь игрок появляется в разных местах рандомно, а значит идеально достижимый счёт в каждом из запусков будет разным. Если 1 раз или «мало» раз, то при тестировании каждому из игроков могут попасться одному стартовые позиции лучше, а другому позиции хуже, и результат замера будет недостаточно стабилен и пригоден для сравнения возможностей алгоритмов.

Может быть, стоит ещё добавить дополнительную опцию сида для постановки игрока? Чтобы условия были равные просто-таки абсолютно.

При конкурсных замерах для каждой из тестируемых карт можно брать несколько таких «player-start-seed». Или же брать один конкретный и публиковать его в таблице результатов — например, это может помочь тем участникам, у которых происходит крэш, ведь его сложно ловить с рандомом.
НЛО прилетело и опубликовало эту надпись здесь
Место появления игрока — часть уровня. Для одного и того же значения seed оно всякий раз будет одинаковым.
Блин, тогда сорри, видимо меня поглючило.

Тем не менее вопрос про количество прогонов одного уровня интересен по прежнему, ведь у некоторых участников может использоваться рандом при движении.

И ещё, Алексей, подскажите будет ли второй промежуточный прогон решений и когда? Выше в комментариях было предложение про 25.07, и «посмотрим по мере поступления» — есть ли какая-то определённость сейчас?
На каждом уровне каждое решение будет запускаться по одному разу. Использовать random мы не рекомендуем (и не видим в этом особого смысла).

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