Преамбула
Меня зовут Руслан и я алкоголик программист. Со «спортивным программированием» я не сталкивался давненько. Последний раз оно мне помогло поступить в университет, который я так и не закончил. Я занимаюсь разработкой игр почти 9 лет подряд. Сначала работать было интересно. Сервер частенько падал и преподносил сюрпризы, а теперь мы научились не деплоить по пятницам мы научились деплоить по пятницам, чтобы ничего не ломалось не падает и почти не преподносит сюрпризов. В общем, когда-то, чтобы не скучать, я занимался маленькими своими проектиками, потом чуть-чуть фрилансил, а в начале этого года меня угораздило вспомнить про олимпиады про программированию и спортивное программирование.
А ещё заголовок не совсем соответствует тексту статьи, но мне он очень понравился. Если кто-то решит почитать статью, чтобы увидеть меня без футболки — не надо этого делать! :-)
О CodinGame
Кодингейм — это онлайн платформа по проведению конкурсов по программированию. Там есть онлайн редактор, автоматизированное тестирование программы, и даже кое-какие призы. Перед началом конкурса (проводится раз в месяц), предлагается отметить галочками интересных работодателей (они в основном французские), вдруг кто из них захочет взять меня к себе на работу. Я работу не ищу, но по итогам несколько компаний просили прислать резюме. Хотя итоги — более чем скромные. Сегодня обнаружил пункт, «участвую For fun». В следующий раз воспользуюсь.
Кроме того, победителям дарят подарки. Например, на следующем конкурсе (через месяц) в подарках будут: айфон, робот и автомат с напитками. 10 футболок для 10 лучших решений, и по футболке для лидера на каждом языке программирования (а их поддерживается около 20).
Кратко о своих успехах неудачах
Первый блин у меня совсем получился комом: наверное, что ни начинаю писать, всё равно онлайн-игра получается. В общем, слишком сложно писал :).
Второй раз было веселее. Во-первых, я взял в качестве языка Groovy вместо Java. Программировать стало удобнее и побыстрее. К тому же, оказалось что лучшему программисту на каждом языке программирования положена футболка. И за пару недель, футболка прилетела ко мне на крыльях Почты России. Конкуренция среди выбравших Groovy не такая жёсткая, как среди Java или C++-юзеров.
Третий раз был сегодня. Я сдал задание на 4 секунды позднее соперника с тем же результатом. Сегодня мне достались только впечатления, которые я и решил выплеснуть на Хабр.
О сегодняшнем конкурсе
Кратко опишу сегодняшний конкурс. Входные данные: поле, на нём цели и «стены», даётся несколько бомб и несколько ходов для того, чтобы их заложить. Надо уничтожить все цели.
Вообще, решение задач по программированию для меня сводится к тому, чтобы решить задачу у себя в голове. Я подумал и решил, что чтобы уничтожить все цели, надо найти клетку, бомба из которой уничтожит максимальное количество целей. Повторить до тех пор, пока не кончатся цели или бомбы. На третьем раунде — ошибка. Отлаживаю код, оказалась мелкая техническая помарка, перепутал Math.min и Math.max. Запускаю дальше, сорвано задание «предвидеть будущее».
Нужно заложить бомбу на месте взорванной цели. Подумал и дописал, что если есть запас времени — надо просто ждать, а не закладывать бомбу. В результате не выполнялось только одно задание. В нём нужно закладывать бомбу не в ту клетку, из которой взрывается наибольшее количество целей:
Хотел написать отдельную проверку, возможно ли в данный момент времени поставить все имеющиеся на руках бомбы таким образом, чтобы взорвать все мишени, но времени оставалось мало, и я этого делать не стал. Хотя стоило бы :) Причина — самая неспортивная, хотел быть первым, кто сдаст код на Groovy.
У CodinGame доступны задачки для тренировок, скорее всего вскорости (вроде бы через пару-тройку недель) там появится и сегодняшнее задание.
Что бы я посоветовал другим участникам
- Думаю, Codingame — неплохой способ попробовать какой-то другой язык. Например, кое-кто решал эти задания на Bash! Я в следующий раз хочу попробовать на Go.
- Если кто не пробовал себя в «спортивном программировании», — может быть, стоит попробовать.
- Отладку удобно писать в stderr.
- Первый блин у меня бы удался лучше, если бы я сначала потренировался на тестовых задачах.
- Для любителей «взломать систему» и «неспортивного поведения». Поскольку тестирование автоматическое, возможно, самым быстрым решением будет захардкодить ответы. Я не пробовал и не буду, но должно получиться.
- Лучше спросите совета у кого-то, кто на этом собаку съел, а не у меня.
И жалкий лепет оправданья...
Пока думал, как лучше написать, что я очень спешил сегодня, — в голову пришли эти слова Лермонтова. Так получилось, что у меня было на задание чуть больше часа (вообще было отведено 3 часа, но я опоздал к началу). Суббота, вечер, и вероятно, последний тёплый выходной денёк в этом году. Так мне и надо! 87 место.
P.S. А футболка, которую я получил за второй конкурс, выглядит вот так:
P.P.S. А для тех, кому CodinGame не приглянулся, ещё есть TopCoder.
Автор: BaRoN