From b648f66a1ecbd45c4587b200093f5dff2d77830c Mon Sep 17 00:00:00 2001 From: Vladimir Khodakov Date: Fri, 12 May 2017 06:59:53 +0400 Subject: [PATCH] 2017 Rebirth: blitz! --- 2017/1-rebirth/randomize.py | 32 ++++++++++++++++++++++++++++++++ 2017/1-rebirth/regulations.md | 24 +++++++++++------------- 2017/1-rebirth/roundrobin.py | 33 +++++++++++++++++++++++++++++++++ 2017/1-rebirth/table.txt | 12 ++++++++++++ 2017/1-rebirth/tours.txt | 30 ++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 13 deletions(-) create mode 100755 2017/1-rebirth/randomize.py create mode 100755 2017/1-rebirth/roundrobin.py create mode 100644 2017/1-rebirth/table.txt create mode 100644 2017/1-rebirth/tours.txt diff --git a/2017/1-rebirth/randomize.py b/2017/1-rebirth/randomize.py new file mode 100755 index 0000000..89da7f7 --- /dev/null +++ b/2017/1-rebirth/randomize.py @@ -0,0 +1,32 @@ +#!/usr/local/bin/python2 +# -*- coding: utf-8 -*- + +import random, time + +def write_user(username, table_size): + repeater = False + random_seed = random.choice(range(1, table_size)) + tfile = open('table.txt', 'r+a') + tabledata = tfile.readlines() + for line in tabledata: + if line.split(' | ')[0] == str(random_seed): + # repeat from begin + repeater = True + write_user(username, table_size) + # if we haven't matching number, write das line + if repeater == False: + tfile.write("%i | %s\n" % (random_seed, username)) + +def check_file(username, table_size): + try: + tablefile = open('table.txt', 'r') + write_user(username, table_size) + except IOError: + tablefile = open('table.txt', 'w') + tablefile.write("Жеребьевка участников LORChess.\nРазмер таблицы участников: %s.\nДанный файл является неизменяемым и создаваемым один раз.\nUNIX timestamp: %i\n========\n\n" % (table_size - 1, int(time.time()))) + tablefile.close() + write_user(username, table_size) + + +nickname = raw_input("Введите имя игрока: ") +check_file(nickname, 7) diff --git a/2017/1-rebirth/regulations.md b/2017/1-rebirth/regulations.md index 2e1799a..7cda465 100644 --- a/2017/1-rebirth/regulations.md +++ b/2017/1-rebirth/regulations.md @@ -4,27 +4,25 @@ ### Регламент турнира -1. Количество участников — по результатам регистрации. +1. Количество участников — 6. 2. К регистрации допускается любой зарегистрированный пользователь linux.org.ru, кроме тех, кто указан в [«чёрном списке»](https://github.com/fat0troll/lorchess/blob/master/black_list.md). Решение о помещении или исключении игрока из «чёрного списка» принимают организаторы турнира. -3. Участники распределяются в изначальной таблице случайным образом в день начала турнира. -4. Турнир проводится по круговой системе в два круга (количество туров будет определено после регистрации): - * За одну неделю играются два тура (с разными противниками). - * Участники, проживающие в часовом поясе, отличном от московского, могут в течение недели сыграть два тура с одним и тем же участником (любым из двух, выпавших на неделю), по договоренности. - * За одну неделю может быть сыграно не более двух партий каждым участником. - * Каждый тур начинается в 22 часа четверга, в который объявляются пары на данный тур. Каждый тур заканчивается в 22 часа четверга, следующего после объявления начала тура. Таким образом, тур играется одну неделю. -5. Для обеспечения адекватной активности участников турнира, и ограничения задержек, используется "таймер vonavi": +3. Для действующих участников «чёрного списка» на время данного турнира действует амнистия: они допускаются к турниру с условием, указанным в пункте 6. Участник «чёрного списка», успешно завершивший данный турнир, из него исключается. +4. Участники распределяются в изначальной таблице случайным образом в день начала турнира. +5. Турнир проводится в пять туров. За две недели играются все пять туров. Порядок отыгрыша туров определяется участниками по договорённости. +6. Для обеспечения адекватной активности участников турнира, и ограничения задержек, используется "таймер vonavi": * Каждому игроку в начале турнира даётся 14 дней "турнирного времени". Значение счётчика не может превышать эту цифру в течение турнира. * Если игрок не проявляет игровой активности в течение недели (двух туров), включается обратный отсчёт: каждый последующий день без игровой активности отнимает от счётчика 1 день. * Если игрок во время работы обратного отсчёта проявляет игровую активность, ему добавляется по 3.5 дня за каждый сыгранный тур (из расчёта 2 тура = 1 неделя). * Если счётчик игрока принимает отрицательное значение, он покидает турнир. -5. Регламент тура: + * Для участников, ранее состоявших в «чёрном списке» изначальный таймер составляет 7 дней. +7. Регламент тура: * Для игр используется сервер http://lichess.org. Игроки заранее договариваются о времени игры. * За 15 минут до начала игры на ЛОРе в соответствующей теме объявляется номер тура, соперники и ссылка на матч. Крайне желательно, чтобы сообщение было ответом на сообщение с объявлением тура (таким образом, владельцы плагинов типа LorTreeStyle смогут в дереве увидеть все объявления партий заданного тура в одной ветке). * За 5 минут до начала игры в Jabber-конференцию chess@conference.lorchess.ru участники скидывают ссылку на партию для того, чтобы зрители могли живьём наблюдать её и обсуждать. Данный пункт может быть дополнен Telegram-конференцией, если будут желающие её использовать. - * Контроль времени — часы Фишера: 10 минут на игру, +5 секунд на ход. Игра на рейтинг. Белыми играет игрок, указанный в объявлении тура первым. + * Контроль времени — часы Фишера: 10 минут на игру, +5 секунд на ход. Игра на рейтинг. Играются две партии, со сменой цветов. Белыми играет в первой партии участник, указанный первым. * Если в этот день уже игрались партии LORChess, и после завершения последней партии прошло менее получаса, новую партию можно начинать сразу после объявления на ЛОРе и в конференции (не ожидая 15 минут). * Запрещается использование во время партии компьютерных программ, печатных и электронных справочников (в том числе, информации сайта lorchess.ru), подсказок со стороны других участников турнира и прочих методов нечестной игры. В случае, если зафиксировано данное нарушение, партия должна выноситься на обзор участников турнира с принятием решения о публичной переигровке, засчитывании поражения провинившемуся или (в случае рецидивов) исключению из турнира без права возвращения в шахматные турниры LOR в дальнейшем. -6. Призовой фонд: +8. Призовой фонд: * Призовой фонд турнира составляет 30 долларов США. * Каждый пользователь linux.org.ru может пожертвовать деньги на пополнение призового фонда. Реквизиты пополнения — в профиле пользователя DoctorSinus. * Призы: @@ -33,9 +31,9 @@ * 3-е место: 20% призового фонда (на данный момент — 6 долларов США). * Призы выплачиваются из призового фонда (который, таким образом, опустошается). Выплата призов производится пользователем DoctorSinus по договорённости с участником турнира любым удобным обеим сторонам способом. * Курс доллара по данным ЦБ РФ на момент написания регламента составляет 57 рублей 09 копеек. Если на момент окончания турнира рубль укрепится по отношению к доллару США, выигрыш будет выплачен исходя из этого курса. В противном случае выигрыш будет выплачен исходя из курса на дату последней сыгранной партии турнира. -7. Порядок распределения мест: +9. Порядок распределения мест: * Выигрывает игрок, набравший максимальное количество очков. * Если у каких-либо игроков по окончанию турнира сумма очков равна, то для распределения мест смотрят следующие показатели: * коэффициент Бергера; * результат личных встреч; -8. Ответственные за исполнение регламента, организаторы турнира: iVS, DoctorSinus. +10. Ответственные за исполнение регламента, организаторы турнира: iVS, DoctorSinus. diff --git a/2017/1-rebirth/roundrobin.py b/2017/1-rebirth/roundrobin.py new file mode 100755 index 0000000..f74f1a1 --- /dev/null +++ b/2017/1-rebirth/roundrobin.py @@ -0,0 +1,33 @@ +#!/usr/local/bin/python2 +# -*- coding: utf-8 -*- +def roundRobin(units, sets=None): + """ Generates a schedule of "fair" pairings from a list of units """ + if len(units) % 2: + units.append(None) + count = len(units) + sets = sets or (count - 1) + half = count / 2 + schedule = [] + for turn in range(sets): + pairings = [] + for i in range(half): + pairings.append((units[i], units[count-i-1])) + units.insert(1, units.pop()) + schedule.append(pairings) + return schedule + +# LOR sheduler + +players = ["aptyp", "J", "DoctorSinus", "redgremlin", "LongLiveUbuntu", "cetjs2"] +tour_count = 0 + +# Generate LORCODE for pairings. +# Also generate "reversal" for autumm season. +for pairings in roundRobin(players): + tours = (len(players) - 1) * 2 + tour_count = tour_count + 1 + print "[b]Тур №" + str(tour_count) + "[/b]" + print "[list]" + for pair in pairings: + print "[*][user]" + pair[0] + "[/user] играет против [user]" + pair[1] + "[/user]" + print "[/list]" diff --git a/2017/1-rebirth/table.txt b/2017/1-rebirth/table.txt new file mode 100644 index 0000000..0317976 --- /dev/null +++ b/2017/1-rebirth/table.txt @@ -0,0 +1,12 @@ +Жеребьевка участников LORChess. +Размер таблицы участников: 6. +Данный файл является неизменяемым и создаваемым один раз. +UNIX timestamp: 1494557094 +======== + +3 | aptyp +2 | J +1 | DoctorSinus +4 | redgremlin +5 | LongLiveUbuntu +6 | cetjs2 diff --git a/2017/1-rebirth/tours.txt b/2017/1-rebirth/tours.txt new file mode 100644 index 0000000..76996ad --- /dev/null +++ b/2017/1-rebirth/tours.txt @@ -0,0 +1,30 @@ +[b]Тур №1[/b] +[list] +[*][user]aptyp[/user] играет против [user]cetjs2[/user] +[*][user]J[/user] играет против [user]LongLiveUbuntu[/user] +[*][user]DoctorSinus[/user] играет против [user]redgremlin[/user] +[/list] +[b]Тур №2[/b] +[list] +[*][user]aptyp[/user] играет против [user]LongLiveUbuntu[/user] +[*][user]cetjs2[/user] играет против [user]redgremlin[/user] +[*][user]J[/user] играет против [user]DoctorSinus[/user] +[/list] +[b]Тур №3[/b] +[list] +[*][user]aptyp[/user] играет против [user]redgremlin[/user] +[*][user]LongLiveUbuntu[/user] играет против [user]DoctorSinus[/user] +[*][user]cetjs2[/user] играет против [user]J[/user] +[/list] +[b]Тур №4[/b] +[list] +[*][user]aptyp[/user] играет против [user]DoctorSinus[/user] +[*][user]redgremlin[/user] играет против [user]J[/user] +[*][user]LongLiveUbuntu[/user] играет против [user]cetjs2[/user] +[/list] +[b]Тур №5[/b] +[list] +[*][user]aptyp[/user] играет против [user]J[/user] +[*][user]DoctorSinus[/user] играет против [user]cetjs2[/user] +[*][user]redgremlin[/user] играет против [user]LongLiveUbuntu[/user] +[/list]