ivan.popelyshev's blog

By ivan.popelyshev2 weeks ago, In Russian

27-ого апреля состоялся финал соревнования КРОК-2012. Я трагически прогулял 1-ый раунд, и я наверное единственный, кто не нервничал на ивэнте.

Московский офис компании КРОК пустил корни между метро Курская и Площадью Ильича.

После регистрации участников, Михаил Мирзаянов толкнул бодрящую вступительную речь, которую я, к сожалению, проспал :(

Состав участников получился очень молодым: почти все папки укатили на Challenge24 (что не повлияло на хавку: в середине дня был фуршет)

Сам финал должен был начаться в 5 вечера, а до этого участников развлекли Code Game Challenge-эм. Нужно было написать бота, который бы перемещался по полю, пил поушены маны и здоровья, швырял в противников всякие нехорошие заклинания или просто бил их посохом (что большинство времени и делал занявший 8-ое место MyasnoyRobot).

Бот vepifanov выиграл для Сергея Рогуленко (SergeyRogulenko) 11-дюймовый макбуку эйр. Бот Епифанова (vepifanov) SergeiRogulenko вылетел из 1/8. Трёхчасовой кодинг бота и послефуршетный просмотр боёв поставили в равные условия невыспавшихся красноглазиков и свеженьких участников финала.

Как раз перед началом турнира дружно крякнули вай-фай сети, но мужественное решение Миши экспроприировать ещё и гостевую сеть позволило стартовать вовремя.

И вот, турнир начался!

Участники открыли задачи, почесали репу (каждый свою, чужую чесать запрещено) и принялись кормить недружелюбный гостевой вайфай высокоинтеллектуальным траффиком.

В этот раз соревнование обошлось без травм головы о задачи, и без характерной боли в закостеневшей за 3 часов сидения тазовой части наборщика кода.

Условия были ясные, тесты корректные, а решения безшаманские. Авторы МОЛОДЦЫ.

Когда соревнование закончилось, все собрались в конференц-руме (в отличие от румов на CF он был один) и упёрлись взглядом в табло (а вот их было два).

Систесты сидели на цепи и угрожающе рычали.

Миша отзвонился Геральду (Gerald), тот спустил собак и они принялись грызть решения на прочность.

На награждении побидетелям дали призы: 100.000 рублей, и два макбука эйр разного весу, зачем-то забрав при этом паспорта.

Победителями стали ( в скобках указаны ники на Codeforces.ru).

1.  Эмиль Лернер, Россия, Москва  (neex.emil)

2.  Дмитрий Егоров, Россия, Санкт-Петербург (Dmitry_Egorov)

3.   Владислав Епифанов, Россия, Нижний Новгород (vepifanov)

Немного самокритики от Романа Андреева (romanandreev) — победителя facebook Hacker Cup 2012!

Остальные видео с контеста смотрите в  моем канале youtube.

Итоговые результаты.

И еще фотографии:

Контест по спортивному программированию. КРОК 2012.

Контест по программированию КРОК 2012.

Контест по программированию. КРОК 2012 - финал.

Read more »

 
 
 
 
  • Vote: I like it  
  • +58
  • Vote: I do not like it  

By ivan.popelyshev4 weeks ago, In Russian

 Первый тест

http://www.youtube.com/watch?v=NnX1sin1XqE

Вход тут: http://188.127.224.127/ http://bombermine.ru/

Для проверки игрового движка на Java/HTML5 использую простую игру, написанную на нём за одну неделю.

Интересно, сколько человек выдержит мой игровой сервер. Извините за периодические падения, стектрейсы я коллекционирую :)

Для игры нужен Google Chrome, Firefox 11 или Опера (opera:config, и в user prefs должно быть enable websockets.).

UPD. Текущий рекорд — 50 человек.

UPD2. Некоторые браузеры не поддерживающие WebSockets теперь могут быть использованы для игры. Но Internet Explorer 9 показывает какую-то хрень.

Идеи сюда: http://bombermine.reformal.ru/

UPD3. Понифицировали.

Read more »

 
 
 
 
  • Vote: I like it  
  • +148
  • Vote: I do not like it  

By ivan.popelyshev7 weeks ago, In Russian

Накопилось много идей, решил сделать движок для браузерных РТС (свой, с покером и шахматистиками). Работа уже идёт, описание оставил на gamedev: http://www.gamedev.ru/projects/forum/?id=160559

Стек технологий: Java, GWT, HTML5. Если тут кто фанатеет серией Dune и C&C, могу принять в команду. Задача — быстро разработать игру, которая займёт свою нишу, аналогично Minecraft.

UPD. Мне уже писал сценарист. В результате обсуждения его бреда, я его послал и сам всё придумал. По этому вопросу можете больше не писать.

Read more »

 
 
 
 
  • Vote: I like it  
  • +21
  • Vote: I do not like it  

By ivan.popelyshev3 months ago, translation, In English

Let my contribution to increase.

Competition will held at 9 february 16:00 GMT (20:00 Saratov).

May the Force be with you!

Read more »

 
 
 
 
  • Vote: I like it  
  • +59
  • Vote: I do not like it  

By ivan.popelyshev4 months ago, In Russian

Условие задачи

Есть N ≤ 1018 пар (Pi, Wi) сгенерированных по следующему алгоритму:
  • Pi = ((A*Pi-1 + B) mod M) + 1
  • Wi = ((C*Wi-1 + D) mod K) + 1
  • Где  M, K ≤ 107, P1, W1, A, B, C, D заданы.
  • Требуется найти:
  1. Количество пар  (Pi, Wi)  таких что не существует пары (Pj, Wj) такой что Pj ≤ Pi и  Wj < Wi либо  Pj < Pi и  Wj ≤ Wi
  2. Количество пар  (Pi, Wi)  таких что не существует пары (Pj, Wj) такой что Pj ≥ Pi и  Wj > Wi либо  Pj > Pi и  Wj ≥ Wi 
Разберемся с первой частью, вторая делается аналогично.
Заметим, что если все Pi одинаковы, то ответ это количество минимумов.
Переходим к двумерной задаче: для каждого P < M будем хранить текущий минимум minp и количество найденных пар вида (P, minp)
Если посчитать эти величины, то ответ ищется просто: для каждого p надо проверить что нет такого p0 < p что minp0 ≤ minp , и в этом случае прибавить к ответу количество  пар вида (P, minp). Это делается за один проход.

Как же искать этот minp ?

Понятно, что через max(M, K) элементов обе последовательности зациклятся. Обработаем этот кусок, выкинем его и рассмотрим циклы, осталось обработать N1 = N - max(M, K) пар.
Получившиеся циклы:
p0, p1, p2, p3,  ... pA - 1
w0, w1, w2, w3, ... wB - 1
Для фиксированного pi важно знать минимум и количеством минимумов тех  w, что попадают в пару вместе с фиксированным pi:
Для p0 они имеют индексы 0, A%B, (2 * A)%B, ...
Для p1 это 1, (A + 1)%B, (2 * A + 1)%B, ...
Для p2 это 2,  (A + 2)%B,  (2 * A + 2)%B,  ... 
Для p(A - 1) это (A - 1)%B,  (2 * A - 1)%B, ... 
Все индексы меньше N1

Вот тут можно поступить по-разному
  • Разбить цикл из w на орбиты элементов которые идут через A и на каждой использовать RMQ. Это  O(max(M, K) * logN) по времени. Можно улучшить до O( max(M, K) ) используя RMQ за O(1) два раза, ведь последовательности могут иметь длины N1 / A и  N1 / A.
  • Cчитать минимум и количество минимумов среди элементов w проиндексированных (i + j * A)%B , 0 ≤ j < 2k для каждого k, и использовать на этом двоичный подъём, "перемножая" массив как при быстром возведении в степень. Это  O(max(M, K) * logN) по времени
В обоих случаях получается и и O(max(M, K)) по памяти. 

Лично я выбрал второе, макстест на Java работал за 17 секунд, но на их 20 тестах программа уложилась в 2 минуты. К тому же можно было запускать это сразу на нескольких компах/ядрах.


Если вы считаете что можете объяснить это лучше и проще, пожалуйста, оставьте свои объяснения в комментариях.

Read more »

 
 
 
 
  • Vote: I like it  
  • +70
  • Vote: I do not like it  

By ivan.popelyshev6 months ago, In Russian
//import java.util.*;

public class Main {
public static void main(String[] args)
{
double a = 2.3;
double b = 0.2;
System.out.println( a % b );
}
}

И ведь работает!
А если поставить a=2.4, то она вернет число близкое к 0.2 , это нормально для вещественной арифметики.

Read more »

 
 
 
 
  • Vote: I like it  
  • +23
  • Vote: I do not like it  

By ivan.popelyshev7 months ago, In Russian

Бывает же такое...


Read more »

 
 
 
 
  • Vote: I like it  
  • +8
  • Vote: I do not like it  

By ivan.popelyshev8 months ago, translation, In English

It's time to restore my contrib points.

One person from Russian Code Cup finalists said that he code slow in early morning. We have a chance, don't miss it!

Competition will held at 18:00 EDT (5:00 Moscow) 

May the Force be with you!

Read more »

 
 
 
 
  • Vote: I like it  
  • +17
  • Vote: I do not like it  

By ivan.popelyshev8 months ago, In Russian
У меня фоток нет, напишу коротко. Все поселились в славном swissotel krasnie holmi (прям хилтон какой-то), познакомились с организаторами, очень хорошо пообщались, каждый участник получил по ipad2 в рюкзачке, посмотрели интересные слайды, провели ядреные дискуссии на тему компьютерного образования в школах и вузах. Финал 18 числа в 11 утра, болейте за нас.

Общее впечатление: финал acm только личный. Mail.ru молодцы.

Read more »

 
 
 
 
  • Vote: I like it  
  • +73
  • Vote: I do not like it  

By ivan.popelyshev8 months ago, In Russian
 
 
 
 

By ivan.popelyshev9 months ago, In English

Coding begins in 12:00 PM EDT (20:00 Moscow time)

May the Force be with you!

P.S. Discuss it here and increase my contrib.



Read more »

 
 
 
 

By ivan.popelyshev10 months ago, In Russian

Кросспост (нажмите сюда чтобы перейти на оригинал)

В рамках проекта SnarkNews стартовала летняя серия индивидуальных соревнований по программированию SnarkNews Summer Series - 2011. Серия состоит из 5 раундов. При этом каждый раунд проходит по правилам TCM/Time. Участвовать в серии могут те, кто или уже зарегистрирован на сервере личных соревнований SnarkNews (список зарегистрированных доступен по ссылке "Пользователи" в верхнем меню), или подал заявку на участие в SNSS-2011 согласно правилам серии по адресу sn_register(собака)snarknews(точка)info.
Участвовать в SNSS-2011 можно, начиная с любого раунда.

01.08.2011 (пн) 15:00. Стартовал первый раунд SnarkNews summer series-2011. Окончание первого раунда - 10.08.2011 15:00.


Отсебятина: Просим на время каждого из раундов не обсуждать задачи.

Read more »

 
 
 
 
  • Vote: I like it  
  • +15
  • Vote: I do not like it  

By ivan.popelyshev10 months ago, translation, In English

Congratulations to Petr Mitrichev impressive victory!

We need to assign some number from 0 to 6 to each of the 14 squares. Note that if you take the solution and apply some permutation of digits to the field, you obtain another correct solution. So, the solution is characterized by division of 14 squares to pairs. If we have such a partition, then it is possible to generate a 7! corresponding solutions. Count of possible partitions is 13!! = 13·11·9·7·5·3 = 135135 . It is easily to verify the correctness for each of the 100k options.

With up to rotations, count of all field configurations that have solutions is about 6000. The largest number of solutions - 22·7!.


Подколки:
1) If you do not optimize the solution in 7! time, you can get a TL. As was shown in the comments it’s enough to optimize 7 times.
2) You would think that the squares are divided into two classes - 7 squares that have double dominoes, and 7, in which it is not present. If we talk in terms of graphs there are 7 vertices with degree 2, and 7 with degree of 4. Clearly, two vertices of degree 2 can not correspond to a single digit, otherwise we get two double dominoes. With this division is sufficient to iterate over 7! possible matches vertices of the second type to vertices of the first type.


Double domino 4-4 split between the two squares. There are 6 vertices of degree 2 and 8 vertices of degree. Challenge Succeeded.
Furthermore:

Here for two double dominoes lie between squares!

And bonus, one of the most beautiful configurations with several holes:

Disconnected configuration with solutions don’t exist :(

Read more »

 
 
 
 
  • Vote: I like it  
  • +31
  • Vote: I do not like it  

By ivan.popelyshev11 months ago, translation, In English

> The IPSC 2011 contest will be held from June 5, noon CEST to June 5, 5:00 pm CEST.

I inspired by team "Never Retired" and  Problem Q from practice,

Team list

Onine standings

Lets discuss it here, but not in the time of event.

Read more »

 
 
 
 
  • Vote: I like it  
  • +26
  • Vote: I do not like it  

By ivan.popelyshev13 months ago, In Russian
Очередной кросспост с http://sharpc.livejournal.com/68313.html#cutid1

Сегодня на Открытом Кубке мне впервые удалось успешно применить в спортивной практике метод графического дебага, и об этой success story дальше и пойдет повествование :)


Смотреть задачу O
В задаче требуется найти, с какой скоростью (от 0 до 300 м/с) должна выстрелить пушка, направленная под углом d (от 0 до 78°), чтобы из точки (xu,yu) попасть в (xo,yo), если на снаряд действует ускорение свободного падения g и ускорение силы ветра w, либо вернуть −1, если это невозможно.

Если просто записать уравнения по x и y, придется решать квадратное уравнение по t, и можно застрять в неприятных выкладках. К счастью, достаточно воспользоваться понятием равнодействующей и повернуть мир на соответствующий угол (косинус угла после этого все равно останется положительным, что благотворно влияет на его положение в знаменателе).



Руководствуясь этими несложными соображениями, я написал такой код с несколькими отсечениями:

double solve(double x, double y, double w, double d)
{
    double omega = atan(w / g);
    d -= omega;
    double xx = x * cos(omega) + y * sin(omega);
    double yy = x * -sin(omega) + y * cos(omega);
    double a = sqrt(g * g + w * w);
    if (xx < 0.0) return -1;
    if (xx * tan(d) <= y) return -1;
    double v2 = a * xx * xx / 2.0 / (xx * tan(d) - yy) / cos(d) / cos(d);
    if (v2 < 0.0) return -1;
    double v = sqrt(v2);
    if (v >= 0.0 && v <= 300.0) {
        return v;
    }
    return -1;
}

И получил WA2. Самые внимательные, конечно, уже заметили ошибку, но я в их число никогда не входил и принялся дебажить :) Однако придумать подходящий тест не получилось. «А хорошо бы посмотреть для большого количества пар (x,y), как летят снаряды» — подумал я. Но стандартные средства, используемые на контестах, типа силовой отладки или логов не особо удобны для обнаружения багов в подобных задачах. Несколько удобнее была бы псевдографика, но все же она недостаточно наглядна. Хорошо бы подошел BMP, но по памяти его написать не очень просто. И тут я вспомнил о самом простом графическом формате — portable pixmap format (PPM), обнаруженном в процессе игр с AGG. Его открывают, например, XnView, Lister@Total, Photoshop. Скопирую пример из википедии:

P3
# The P3 means colors are in ASCII, then 3 columns and 2 rows,
# then 255 for max color, then RGB triplets
3 2
255
255 0 0 0 255 0 0 0 255
255 255 0 255 255 255 0 0 0

За пару минут я написал визуализацию ответов программы на протабулированные координаты, подкрасил горизонталь, начало координат, обозначил скорость яркостью цвета, выделил среднюю скорость, и получил правдоподобно выглядящие картинки:



Немного поиграв с w и d, на одной из картинок я увидел странный артефакт — видимо, сработало какое-то отсечение, «испортившее» параболу:



Подкрасив разные отсечения разными цветами, я нашел ошибочную строку :)



if (xx * tan(d) <= y) return -1;

Исправил и получил AC :)

К слову, метод графического дебага, пожалуй, единственно возможный в написании рендеров. Кто видел геймдевелоперов-рендеристов за работой, тот под LSD скучает!

Read more »

 
 
 
 
  • Vote: I like it  
  • +66
  • Vote: I do not like it  

By ivan.popelyshev14 months ago, translation, In English
Member single round match 501 will start at 3.00 PM Moscow, 12:00 AM GMT.
Discuss it here.

Read more »

 
 
 
 
  • Vote: I like it  
  • +12
  • Vote: I do not like it  

By ivan.popelyshev14 months ago, In Russian
Шарпиц продолжает радовать нас замечательными постами в жж.
Предлагаю обсудить сей эпичный пост:
http://sharpc.livejournal.com/67583.html

Многие начинающие программисты, особенно обучающиеся в провинциальных вузах, часто не знают, в какую сторону им развиваться, и что они должны знать для того, чтобы эффективно работать по специальности. Удивительно, но каждый день используя продукты и технологии, созданные другими программистами на основании развитых областей знания, они даже не догадываются о том, как они устроены.

Read more »

 
 
 
 
  • Vote: I like it  
  • +30
  • Vote: I do not like it  

By ivan.popelyshev14 months ago, In English
We need the new thread specially for the final.

21:00 MSK (less than in a hour).

scoreboard

Read more »

 
 
 
 
  • Vote: I like it  
  • +35
  • Vote: I do not like it  

By ivan.popelyshev15 months ago, translation, In English
SRM 498 will be held at 26 february 17:00 GMT. Good luck, have fun!
And may The Force be with you.

Read more »

 
 
 
 
  • Vote: I like it  
  • +33
  • Vote: I do not like it  

By ivan.popelyshev15 months ago, In Russian
Одному хорошему человеку нужен инвайт на хабр :)
Добрые люди, пишите мне в личку.

UPD. Спасибо хорошим и добрым людям. Прошу больше не комментировать эту тему, чтобы не висела в топе.

UPD 2. У меня самого уже не первый год есть акк на хабре. Писать сам боюсь, вдруг засмеют :)

Read more »

 
 
 
 
  • Vote: I like it  
  • +6
  • Vote: I do not like it  

By ivan.popelyshev16 months ago, In Russian
SRM 495 will be held at 27 january 16:00 GMT. Good luck, have fun!
And may The Force be with you.

Read more »

 
 
 
 
  • Vote: I like it  
  • +5
  • Vote: I do not like it  

By ivan.popelyshev16 months ago, In Russian
В рамках проекта SnarkNews стартовала зимняя серия индивидуальных соревнований по программированию SnarkNews Winter Series - 2011. Серия состоит из 5 раундов. При этом каждый раунд проходит по правилам TCM/SE. Участвовать в серии могут те, кто или уже зарегистрирован на сервере личных соревнований SnarkNews (список зарегистрированных доступен по ссылке "Пользователи" в верхнем меню), или подал заявку на участие в SNWS-2011 согласно правилам серии по адресу sn_register(собака)snarknews(точка)info.
Участвовать в SNWS-2011 можно, начиная с любого раунда.

SN contests

NameTypeRegistration deadline
StartFinish
SNWS-11,R1 TCM/SE (1,1,4) -
01.01.2011 20:00 10.01.2011 14:30
SNWS-11,R2 TCM/SE (1,1,4) -
06.01.2011 14:00 12.01.2011 14:00
SNWS-11,R3 TCM/SE (1,1,4) -
12.01.2011 14:00 18.01.2011 14:00
SNWS-11,R4 TCM/SE (1,1,4) -
18.01.2011 14:00 24.01.2011 14:00
SNWS-11,R5 TCM/SE (1,1,4) -
24.01.2011 14:00 31.01.2011 18:00

Завершился первый раунд SnarkNews winter series-2011. Первое место занял Геннадий Короткевич (Беларусь, Гомель), второе - Пётр Митричев (Россия, Москва), третье - Дмитрий Джулгаков (Украина, НТУ "Харьковский ПИ").
При составлении первого тура были использованы задачи локальных контестов североамериканских университетов.

Прошу до конца раунда не обсуждать задачи в комментариях.

Read more »

 
 
 
 
  • Vote: I like it  
  • +8
  • Vote: I do not like it  

By ivan.popelyshev17 months ago, In Russian
новогодний контест от снарка.

"...сюда в двенадцать часов новогодней ночи, прорвавшись через пургу, пришли люди, которым было интереснее доводить до конца или начинать сызнова какое-нибудь полезное дело, чем глушить себя водкой, бессмысленно дрыгать ногами, играть в фанты и заниматься флиртом разных степеней легкости... Они были магами потому, что очень много знали, так много, что количество перешло у них наконец в качество, и они стали с миром в другие отношения, нежели обычные люди".

Традиционно Новогодний Контест состоит из двух номинаций: командной и личной. В каждой из номинаций подводится отдельный зачёт.

Командный контест

7-й Простой Новогодний Контест проводится с 5:00 31.12.2010 по 16:30 10.01.2010, время московское. Задачи данного контеста выбраны из числа тех, которые уже предлагались на командных соревнованиях по программированию в 2010 году, но так и не были решены. Идея "простого контеста" принадлежит А. Лопатину и Н. Дурову.
Участвовать в 7-м Простом Новогоднем Контесте могут команды, зарегистрированные для участия в VIII Открытом Кубке им. Е.В. Панкратьева по программированию (с теми же логином и паролем).

Личный контест

6-й Новогодний Экспресс-Контест проводится с 20:00 31.12.2010 по 8:00 1.1.2011. Контест будет состоять из 6-7 задач различной сложности. Штрафное время по каждой сданной задаче в Новогодних Экспресс-Контестах начисляется как расстояние от момента её сдачи до Нового Года (то есть задача, сданная в 21:00, получает штрафное время 180 - так же, как задача, сданная в 3-00).
Участвовать в Новогоднем Экспресс-Контесте могут пользователи, зарегистрированные на сервере личных соревнований SnarkNews.

Read more »

 
 
 
 
  • Vote: I like it  
  • +17
  • Vote: I do not like it  

By ivan.popelyshev17 months ago, translation, In English
Discuss SRM 490 there.

Read more »

 
 
 
 
  • Vote: I like it  
  • +7
  • Vote: I do not like it  

By ivan.popelyshev21 month(s) ago, In Russian
Начнём с конца.

Задача E. Multithreading

Придётся разобрать несколько случаев. Пусть S это сумма всех ni. Если W ≤ 0 или W > S то, очевидно, ответ IMPOSSIBLE. В случае N = 1 ответ существует только при W = S, это S итераций единственного потока.

Запишем вместо номеров потока скобки разных видов, расставить открывающие и закрывающие просто - соответствующие пары скобок одного типа должны идти последовательно, не пересекаяся. Если в программе есть подпоследовательность типа [(]) то можно заменить её на ([]), понятно, что результат будет тот же. Таким образом, достаточно помещать итерации разных потоков одну в другую, как скобки.

Получить W = 1 можно только поместив все пары скобок внутрь какой-то одной. Поскольку пара скобок не может содержать пару такого же типа, найти найти такой i, что ni = 1. Если же такого i нету, ответ IMPOSSIBLE.

Read more »

 
 
 
 
  • Vote: I like it  
  • +29
  • Vote: I do not like it