Целта на конкурса е да повиши общественото разбиране, доверие и прозрачност относно принципите, по които се изчисляват резултатите от изборите в България. Успешно реализираните алгоритми ще бъдат използвани за верификация и паралелно изчисление на обявените от ЦИК резултати, което ще представлява външна, независима проверка на официалното разпределение на мандатите.
Задание
Предложеното софтуерно решение трябва да изпълнява стриктно стъпките, описани в Методиката за определяне на резултатите от гласуването, достъпна на адрес https://www.cik.bg/f/105 . Входните данни за конкретния тест, както и резултатите от изчислението се четат и съответно записват в текстови файлове с определен формат.
Обща информация и изисквания
- Всички изпратени материали са публични и публикувани под отворен лиценз;
- Допуска се самостоятелно или отборно участие;
- Един участник/отбор може да предложи само едно решение;
- За изпитанията ще бъдат подготвени базово инсталирани виртуални машини със следните операционни системи:
- Ubuntu 13.04 (Raring Ringtail) 64 bit
- FreeBSD 9.1 64 bit
- Windows 7 evaluation 64 bit
- Решенията ще бъдат изпитвани на виртуални машини с параметри 1 vCPU и 2048 MB RAM;
- На виртуалните машини ще бъдат инсталирани компилатори и интерпретатори от хранилищата на операционните системи за следните програмни езици и платформи:
- C/C++
- PHP
- Python
- Ruby
- C#.NET/VB.NET – чрез Visual Studio Express 2012
- Mono
- FreePascal
- Java
Ако има участник, който желае да използва друга среда, то тя ще бъде добавена ако компилаторът/интерпретаторът е свободен и достъпен за някоя от описаните по-горе операционни системи.
- В конкурса не могат да участват лица, които имат служебни правоотношения с Централната избирателна комисия или с изпълнител по договор с ЦИК, както и организаторите и журито на конкурса;
- Решения или допълнения, изпратени след приключване на конкурса няма да бъдат взимани под внимание при крайното класиране.
Условия за участие
Дейностите по организиране на конкурса се извършват чрез разпределената система за управление на версиите git. Всеки участник трябва да бъде регистриран в GitHub (https://github.com). За участие е необходимо да се извърши fork на кодовото хранилище https://github.com/elections-contest/pe2013 и да добави решението си в своя branch. Участникът създава под-директория в \Solutions именована като потребителя му в GitHub и със структура, съответна на шаблонната в \Solutions\elections-contest. Участникът има право да създава и модифицира файлове единствено в тази директория на хранилището. След като е готов, участникът създава pull request. Ако има проблеми с вмъкването на кода, екипът на конкурса ще отбележи това в pull request-а и ще извърши merge само след отстраняването им. Входните данни за алгоритъма се четат от описаните по-долу файлове, които ще бъдат разположени в текущата директория на приложението. Резултатите се записват също в текущата директория. Структурата на кодовото хранилище, заедно с описанието са дадени по-долу:
Елементи Описание
. Branch 'master'
|--README.md Описание на конкурса
|--\Solutions Директория с решенията на участниците
| `--\elections-contest Примерна структура на решение
| |--\src Изходен код на решението
| |--README Общо описание
| |--AUTHORS Автор(и) на решението
| |--COMPILE Инструкции за компилиране и целева ОС
| `--LICENSE Лиценз – необходимо е да бъде одобрен от OSI
`--\Tests Примерни тестове
`--\1 Директория на Тест 1
|--MIRs.txt Описание на районите и брой мандати
|--Parties.txt Описание на партиите и коалициите
|--Candidates.txt Описание на кандидатите
|--Votes.txt Действителни гласове по кандидати и райони
|--Lot.txt Резултати от тегления жребий, незадължителен
`--Result.txt Резултати от изчислението
... Други тестове
Тестовите файлове имат CSV структура, текстовите полета са заградени с кавички(“), а разделителят е точка и запетая (;):
Файл Описание
MIRs.txt Описание на многомандатните избирателни райони
Номер на МИР – integer, уникален номер на МИР
Име на МИР – string, име на МИР
Брой мандати в МИР – integer. Когато Брой
мандати в МИР=0 се приема, че това е
служебният район, обединяващ гласовете,
подадени в чужбина.
Пример:
1;“МИР 1“;10
2;“МИР 2“;5
3;“Чужбина“;0
Parties.txt Описание на партиите/коалициите от партии
Номер – integer, уникален номер на партия,
коалиция от партии.
Име – string, име на партия, коалиция от партии
Пример:
1;“Партия 1“
2;“Коалиция 1“
Candidates.txt Описание на кандидатите по партии/коалиции по
МИР и независимите кандидати
Номер на МИР – integer, от MIRS.txt
Номер на партия/коалиция/инициативен комитет
– integer. Ако няма запис с такъв номер
в Parties.txt, то се счита, че това е
независим кандидат, издигнат от
инициативен комитет.
Пореден номер на кандидата в кандидатската листа
– integer, за независимите кандидати винаги 1.
Име на кандидата – string
Пример:
1;1;1;“Кандидат 1 в МИР 1 – Партия 1“
1;1;2;“Кандидат 2 в МИР 1 – Партия 1“
1;3;1;“Независим кандидат 1 в МИР 1“
2;3;1;“Независим кандидат 1 в МИР 2“
Votes.txt Описание на действителните гласове по
партии/колаиции от партиии и независими кандидати
Номер на МИР – integer, от MIRS.txt
Номер на партия/коалиция от файлът Parties.txt или
номер на независим кандидат от Candidates.txt
– integer
Получени действителни гласове – integer
Пример:
1;1;1000
1;2;500
1;1000;600
Lot.txt Описание на изтегления жребий
Когато в определени случаи се достигне до жребий,
в този файл ще бъдат отбелязани номерата на
изтеглените партии/коалиции от партии
Номер на партия/коалиция – integer, от Parties.txt
Пример
2
3
Result.txt Описание на вида на резултатите, в който трябва да
бъдат генерирани
Номер на МИР – integer, от MIRS.txt
Номер на партия/коалиция от файлът Parties.txt или
номер на независим кандидат от Candidates.txt
– integer
Получени мандати – integer
Във файла трябва да има записи за всеки МИР и за
всяка партия/коалиция от партии и независими
кандидати, които получават мандати. Броят на
разпределените мандати трябва да е равен на
сумата на броя на мандатите от MIRs.txt
При достигане на граничен случай, при който се
прилага § 2 от Преходните и заключителните
разпоредби на Методиката или се достига до жребий,
програмата записва на първият ред „0“, а на
следващия свободно текстово описание на стъпката
и причината, поради която алгоритъмът
не може да продължи.
Пример:
1;1;2
1;3;1
или
0
Достигнат жребий
Критерии за допустимост и оценка
- Коректно изпълнение на стъпките на Методиката на ЦИК;
- Спазване на изискванията за формат на входните и изходните данни;
- Спазване на изискванията за разположение на софтуера в кодовото хранилище;
- Оптималност на решението и качество на кода – използвани програмни структури, типове променливи, цикли и др.
- Пълнота на алгоритъма – обхващане на всички хипотези, описани в Методиката;
- Документиране на алгоритъма – прилагане на коментари в изходния код, допълнителна документация, визуална презентация на решението;
- Времето за изпълнение на алгоритъма върху входните данни не трябва да надвишава 10 секунди;
- Програмни алгоритми, които извършват каквито и да било действия, извън описаните в този документ, ще бъдат дисквалифицирани;
- Окуражава се разписването на стандартният изход на междинните състояния на променливи и структури от данни, демонстриращо прогресът на алгоритъма;
- Един тестов пример ще включва до 256 МИР-а, до 256 партии/коалиции и до 256 независими кандидата. Мандатите за разпределяне ще бъдат до 1024, а общият брой на действителните гласове няма да надвишава 4294967295;
- Предложените алгоритми ще бъдат тествани с тестовите примери от официалното кодово хранилище, с допълнителни, дефинирани от журито, и с официалните резултати от Парламентарни избори 2013.
Срокове
Валидни Pull requests се приемат до 00:00 часа българско време на 11 Май 2013 г. Класирането ще бъде обявено на страницата на конкурса в GitHub в срок от една седмица, след публикуването на официалните резултати от изборите от ЦИК.
Резултати от конкурса
Всеки член на журито ще попълни оценителска карта, която ще бъде публикувана. Първото място ще бъде определено на база на попълнените карти. Победителят в конкурса ще получи предметна награда и грамота. Специална награда ще бъде връчена на участникът, който направи най-добро визуално представяне на реализирания алгоритъм – чрез онлайн презентация и представяне на стъпките на алгоритъма web базирано в Интернет.
Жури и партньори
Конкурсът се организира в партньорство със следните организации:
- Технически университет – София - http://www.tu-sofia.bg
- Университет по архитектура, строителство и геодезия - http://www.uacg.bg
- Линукс за Българи – http://www.linux-bg.org
- InitLab - http://initlab.org
- Българска асоциация на разработчиците на софтуер - http://www.devbg.org
Жури:
- Александър Станев
- Анатолий Атанасов
- Весела Пашева
- Владимир Витков
- Димитър Димитров
- Михаил Константинов
- Моско Аладжем
- Константин Заимов
- Светлин Наков
Контакти
- Страница на конкурса: https://electionscontest.wordpress.com
- Задание: http://elections-contest.github.io/pe2013
- E-mail: elections.contest@gmail.com
Всички въпроси, свързани с реализацията на софтуерните решения трябва да бъдат регистрирани в публичният tracker на проекта на адрес: https://github.com/elections-contest/pe2013/issues