Относительно долго, по-видимому, просчитать всю симуляцию от начального состояния игры по списку действий. Не зря автор пишет про тестирование:
пока полдюжины машин просчитывают симуляцию
А вот передать текущее состояние игры — это, по сути, передать файл сохраненки (который, рискну предположить, весит мегабайты, на край десятки мегабайт).
Это могло бы выглядеть так: у всех игроков картинка останавливается, на экран вываливается BSOD табличка вида «Опс! Вася выпал из игры. Подождем, пока Вася синхронизируется (две с половиной минуты) или ну его?». В зависимости от настроек, да хоть голосования принимается решение на синхронизацию, все идут пить чай и курить, а Вася тем временем получает десяток, да хоть сотню мегабайт текущей сцены. Посредством p2p сцену можно раскроить на части от разных игроков и заполнить Васе весь канал, тут даже докурить не успеешь.
То же самое и для подключения нового игрока.
В общем, не похоже, чтобы это было сложно реализовать, и такая функция была бы затребована многими. Уж лучше подождать, чем всю игру похерить.
Да никто их и не держит. О том и речь, что выбирать нужно в том числе и по вычислительной сложности.
Более того, если соискатель наизусть помнит O(N) для пузырьковой сортировки, а не рассчитывает ее на месте — так это ему минус, а не плюс. В том смысле, что нужно не помнить, а думать.
Полностью согласен, конкретные значения O(N) для алгоритмов мало интересуют и соискателя, и интервьюера. И если человек хороший, но не в курсе теории сложности вычислений, то и хрен с ней — научится.
А научиться придется — одно дело, когда программиста берут писать десктопную обертку вокруг базы данных, какую-нибудь систему заказа билетов в кинотеатре, и другое дело — когда берут на хайлоад, на решения, которые будут (и должны) масштабироваться на сотни-тысячи серверов. Тут уже человек должен со старта ответить, почему считать ряд Фибоначчи через рекурсию нехорошо.
Насчет HashMap — я часто задаю на собеседованиях вопрос, как устроен (или как соискатель написал бы) ассоциативный массив. И когда человек в своих рассуждениях доходит до коллизий, то вопрос сложности получения значения решается сам собой.
Сильно надеюсь, что этот затык уже решили. Надо будет протестировать последние версии.
На скорую руку хотел закинуть бенчмарк в браузер, но тут облом: в ECMAScript принудительно установили, что \d всегда есть [0-9]. Так же, как \w всегда [0-9a-ZA-Z_]. Что, вообще говоря, для юникода неправильно.
Э, в чем проблема? В чем повод для иронии? Конечно, я лучше знаю, в чем моя задача, но описать ее в комментариях займет много времени. Может, я отдельный топик потом напишу, это интересная штука. И она действительно более касается расстояния Левенштейна, чем collaborative filtering.
Или вы в телепатии упражняетесь? С такими талантами люди в саппорте нужны.
Моя аватарка какбе намекает, что про скорость регулярных выражений я знаю достаточно %)
И кстати, это узкое место в очень многих задачах, только не все замечают.
Например: /[0-9]/ для utf-8 строки может быть медленнее, чем /\d/ в 60 (!) раз. Кроме шуток.
Вчера — когда подбирал регулярки для рерайтов в нжиникс.
Три дня назад — когда думал над алгоритмом поиска и хранения подобных элементов (нечто вроде расстояния Левенштейна, или, проще говоря, нечто вроде списка похожих товаров на сайте магазина).
Поскольку множество допустимых (легитимных) действий априори намного больше множества действий недопустимых, было бы очень сложно (и так же неприменимо в реальной жизни) составлять законы «в разрешительном смысле».
Так что, думаю, наличие только формулировок «делать нельзя» имеет простой практический смысл.
А вот почему этих «делать нельзя» столько и они так запутаны, что становится «делать нельзя ничего» — в обозначенной области и за приемлемое время — это уже отдельный вопрос.
А с защитой невиновных и непричастных вполне справляется процессуальный кодекс. Вот только нет их, невиновных. Даже если удалиться в пустыню и по примеру древних святых на столбе сидеть и ничего не делать, выяснится, что столб у тебя в БТИ не зарегистрирован и медяки в миску ты принимать не можешь, потому что не благотворительная организация %)
Относительно долго, по-видимому, просчитать всю симуляцию от начального состояния игры по списку действий. Не зря автор пишет про тестирование:
А вот передать текущее состояние игры — это, по сути, передать файл сохраненки (который, рискну предположить, весит мегабайты, на край десятки мегабайт).
Это могло бы выглядеть так: у всех игроков картинка останавливается, на экран вываливается
BSODтабличка вида «Опс! Вася выпал из игры. Подождем, пока Вася синхронизируется (две с половиной минуты) или ну его?». В зависимости от настроек, да хоть голосования принимается решение на синхронизацию, все идут пить чай и курить, а Вася тем временем получает десяток, да хоть сотню мегабайт текущей сцены. Посредством p2p сцену можно раскроить на части от разных игроков и заполнить Васе весь канал, тут даже докурить не успеешь.То же самое и для подключения нового игрока.
В общем, не похоже, чтобы это было сложно реализовать, и такая функция была бы затребована многими. Уж лучше подождать, чем всю игру похерить.
Более того, если соискатель наизусть помнит O(N) для пузырьковой сортировки, а не рассчитывает ее на месте — так это ему минус, а не плюс. В том смысле, что нужно не помнить, а думать.
А научиться придется — одно дело, когда программиста берут писать десктопную обертку вокруг базы данных, какую-нибудь систему заказа билетов в кинотеатре, и другое дело — когда берут на хайлоад, на решения, которые будут (и должны) масштабироваться на сотни-тысячи серверов. Тут уже человек должен со старта ответить, почему считать ряд Фибоначчи через рекурсию нехорошо.
Насчет HashMap — я часто задаю на собеседованиях вопрос, как устроен (или как соискатель написал бы) ассоциативный массив. И когда человек в своих рассуждениях доходит до коллизий, то вопрос сложности получения значения решается сам собой.
Беда в том, что до коллизий не все доходят.
Сильно надеюсь, что этот затык уже решили. Надо будет протестировать последние версии.
На скорую руку хотел закинуть бенчмарк в браузер, но тут облом: в ECMAScript принудительно установили, что \d всегда есть [0-9]. Так же, как \w всегда [0-9a-ZA-Z_]. Что, вообще говоря, для юникода неправильно.
Правда, зависит от сборки. Как раз поведение \d в последние годы меняют от версии к версии. Обсуждается еще.
Очень хочется выбрать пару дней и подробно расписать про тонкости TRIEC-EXACT, ANYOF и символьных классов в pcre. Но это ж надо найти время… %)
Или вы в телепатии упражняетесь? С такими талантами люди в саппорте нужны.
И кстати, это узкое место в очень многих задачах, только не все замечают.
Например: /[0-9]/ для utf-8 строки может быть медленнее, чем /\d/ в 60 (!) раз. Кроме шуток.
Вчера — когда подбирал регулярки для рерайтов в нжиникс.
Три дня назад — когда думал над алгоритмом поиска и хранения подобных элементов (нечто вроде расстояния Левенштейна, или, проще говоря, нечто вроде списка похожих товаров на сайте магазина).
Если соискатель готов скорее сдохнуть в муках, чем ответит просто «я не знаю» — то пусть уж действительно сдохнет в муках %)
Искренность — наиболее ценимое мною качество в сотрудниках.
Так что, думаю, наличие только формулировок «делать нельзя» имеет простой практический смысл.
А вот почему этих «делать нельзя» столько и они так запутаны, что становится «делать нельзя ничего» — в обозначенной области и за приемлемое время — это уже отдельный вопрос.
А с защитой невиновных и непричастных вполне справляется процессуальный кодекс. Вот только нет их, невиновных. Даже если удалиться в пустыню и по примеру древних святых на столбе сидеть и ничего не делать, выяснится, что столб у тебя в БТИ не зарегистрирован и медяки в миску ты принимать не можешь, потому что не благотворительная организация %)
Сдается мне, желающих купить хватило бы %)
Сюда еще загляните %)