Вчера принял участие в очередном конкурсе по программированию от Яндекса. Написал решения для пяти задач из шести, причем писал легко и быстро, а не как прошлый раз, с кучей ошибок при отладке, но результаты все равно удручающие: ни одну из них не смог «дожать» до 100%-ного прохождения тестов. Две уперлись в лимит по времени при попытке решать в лоб. Видимо, нужно было применить какие-то математические трюки. Причем для одной я решение переделал, совершенно поменяв метод, но помогло только частично: стал застревать не на 8 тесте, а на 11-ом.
В двух других сказался главный недостаток конкурсов Яндекса: нехватка открытых тестов. В качестве них приводится обычно 2-3 самых тривиальных случая, которые проходятся элементарно. А потом отправленная задача выдает Wrong Answer где-нибудь на 8—10 тесте. И нет никакой возможности получить хоть какую-то информацию, что там не так! В этом плане CodinGame гораздо лучше сделан: там есть парные открытые и закрытые тесты, которые проверяют аналогичные ситуации. Соответственно, посмотрев входные данные провалившегося открытого теста, можно понять, что недоучтено в алгоритме. А в случае с Яндексом остается только сидеть и гадать. В такие моменты хочется либо биться головой об клавиатуру, либо с матами вышвырнуть ноутбук в окно!
Еще одну задачу, последнюю по номеру и самую сложную, я вроде бы решил, но получил presentation error, с которым непонятно что делать, так как ввод/вывод тоже посмотреть нет возможности. В общем, ключевой навык для конкурсов Яндекса — это умение отлаживать вслепую.
Вечером, после окончания конкурса, хотел было поиграть в Battle for Wesnoth, но так и не собрался. Зато досмотрел одну любопытную видеолекцию про «Божественную комедию» Данте и поиски себя. И еще нашел сайт, где можно прямо онлайн играть в DOS-овские игры (каким-то образом DOSbox поместили в Web), в том числе и в Heroes II of Might and Magic. Правда, слегка подтормаживает. А еще нашел бесплатную онлайн-версию «Колонизаторов».

- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proЛог жизни
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
Конкурс на Яндексе

CodinGame: прорыв в серебряную лигу

Пара дней активного кодинга и отладки, и вот результат: я прорвался в серебряную лигу в Legends of Code and Magic!
Причем получилось весьма своеобразно: сначала я обнаружил в программе один баг: неправильно считалась оставшаяся мана. Исправил его, и внезапно получил существенное ухудшение результатов игры, хотя с точки зрения логики и здравого смысла результат должен быть обратный: в неправильном варианте просчитывается куча лишних вариантов, которые на самом деле сыграть не могут, и поэтому шансов найти хороший вариант игры существенно ниже.
Стал разбираться, в чем дело, и понял, что у меня слишком неэффективная функция оценки игрового состояния. Переделал ее, и даже с исправленной версией программы стал подниматься в бронзовой лиге до примерно 200-ого места. Поэкспериментировал с еще парой мелочей, и удалось в отдельные моменты подняться до сотых позиций, а вот дальше — никак.
И тут вдруг я обнаружил, что мой алгоритм на этапе выбора карт всегда берет нулевую карту, и никогда никакую другую. Оказалось, что когда я в последний раз переписывал алгоритм, я не учел одной особенности этапа раздачи карт: на нем идентификаторы всегда карт равны -1. В результате в функцию выбора карты передавалось их не три штуки, как должно было быть, а только одна, самая первая.
Как только я это исправил, сразу же легко поднялся в серебряную лигу. В отличие от прошлого конкурса, Code of Ctulu, когда прорыв состоялся в последние часы конкурса, когда я уже ни на что не наделся, на этот раз таких зашкаливающих эмоций, когда я был готов орать на весь поселок от радости, не было. А была просто удовлетворенность от достигнутого результата. Кстати, в серебряной лиге старт тоже оказался неплохим: сразу же поднялся на 350 место из 500, после того, как чуть поправил функцию оценки — до 310.
А впереди еще 7 дней конкурса, так что игра продолжается!