View on GitHub

Конкурс по програмиране

Разработка на отворен софтуер за изчисление на резултатите от Изборите за народни представители на 12 Май 2013 по Методиката на ЦИК

download .ZIPdownload .TGZ

Целта на конкурса е да повиши общественото разбиране, доверие и прозрачност относно принципите, по които се изчисляват резултатите от изборите в България. Успешно реализираните алгоритми ще бъдат използвани за верификация и паралелно изчисление на обявените от ЦИК резултати, което ще представлява външна, независима проверка на официалното разпределение на мандатите.

Задание

Предложеното софтуерно решение трябва да изпълнява стриктно стъпките, описани в Методиката за определяне на резултатите от гласуването, достъпна на адрес https://www.cik.bg/f/105 . Входните данни за конкретния тест, както и резултатите от изчислението се четат и съответно записват в текстови файлове с определен формат.

Обща информация и изисквания

Ако има участник, който желае да използва друга среда, то тя ще бъде добавена ако компилаторът/интерпретаторът е свободен и достъпен за някоя от описаните по-горе операционни системи.

Условия за участие

Дейностите по организиране на конкурса се извършват чрез разпределената система за управление на версиите 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
                Достигнат жребий

Критерии за допустимост и оценка

Срокове

Валидни Pull requests се приемат до 00:00 часа българско време на 11 Май 2013 г. Класирането ще бъде обявено на страницата на конкурса в GitHub в срок от една седмица, след публикуването на официалните резултати от изборите от ЦИК.

Резултати от конкурса

Всеки член на журито ще попълни оценителска карта, която ще бъде публикувана. Първото място ще бъде определено на база на попълнените карти. Победителят в конкурса ще получи предметна награда и грамота. Специална награда ще бъде връчена на участникът, който направи най-добро визуално представяне на реализирания алгоритъм – чрез онлайн презентация и представяне на стъпките на алгоритъма web базирано в Интернет.

Жури и партньори

Конкурсът се организира в партньорство със следните организации:

Жури:

Контакти

Всички въпроси, свързани с реализацията на софтуерните решения трябва да бъдат регистрирани в публичният tracker на проекта на адрес: https://github.com/elections-contest/pe2013/issues