Как я могу генерировать файлы .BLT для выборов OpenSTV с использованием С#?
Я только что загрузил OpenSTV после просмотра последнего сообщения в блоге SO, касающегося результатов выборов модератора. Джефф написал, что он использовал OpenSTV для проведения выборов и предоставил вместе с ним файл бюллетеня (.blt), который содержит данные голосования.
Мой вопрос: как вы создаете .BLT файл в С#?
Вот два способа, которыми я могу думать, что страница для голосования сделала это:
- Страница голосования добавила каждый голос в базу данных SQL, а затем каким-то образом эти голоса были экспортированы в файл .BLT после того, как голосование закончилось. Как же? Как я могу это сделать?
- Или страница голосования создала файл, а затем добавлялась к нему каждый раз, когда кто-то голосовал. Я уверен, что это НЕ, как работала страница голосования, потому что она полностью нескромна, но как я могу сделать это на С#?
Мне интересно узнать, как работают обе возможности и как я могу это сделать на С#. Заранее спасибо. О, и я надеюсь, что Джефф увидит этот вопрос, потому что у него, вероятно, будет отличный ответ...
Ответы
Ответ 1
Лучшее объяснение формата файла BLT можно найти здесь:
4 2 # four candidates are competing for two seats
-2 # Bob has withdrawn (optional)
1 4 1 3 2 0 # first ballot
1 2 4 1 3 0
1 1 4 2 3 0 # The first number is the ballot weight (>= 1).
1 1 2 4 3 0 # The last 0 is an end of ballot marker.
1 1 4 3 0 # Numbers in between correspond to the candidates
1 3 2 4 1 0 # on the ballot.
1 3 4 1 2 0
1 3 4 1 2 0 # Chuck, Diane, Amy, Bob
1 4 3 2 0
1 2 3 4 1 0 # last ballot
0 # end of ballots marker
"Amy" # candidate 1
"Bob" # candidate 2
"Chuck" # candidate 3
"Diane" # candidate 4
"Gardening Club Election" # title
Все, что я сделал, было
- Выполните специальный запрос в SQL Management Studio, чтобы получить результаты голосования.
- Скопировать вложенные результаты в текстовый файл (вывод по умолчанию разделен табуляцией)
- Написал небольшое 50-строчное приложение С# для преобразования из запроса в формат BLT.