Как сгенерировать файлы .BLT для выборов OpenSTV с использованием C #? - PullRequest
16 голосов
/ 10 февраля 2010

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

Мой вопрос: как создать файл .BLT в C #?

Вот два способа узнать, как это сделала страница голосования:

  • Страница голосования добавила каждый голос в базу данных SQL, а затем каким-то образом эти голоса были экспортированы в файл .BLT после окончания голосования. Как хоть? Как я могу это сделать?
  • Или, страница голосования создала файл и добавляла его каждый раз, когда кто-то голосовал. Я уверен, что это НЕ так, как работала страница голосования, потому что она абсолютно не масштабируема, но как я могу это сделать в C #?

Мне интересно узнать, как работают обе возможности и как я могу это сделать в C #. Заранее спасибо. О, и я надеюсь, что Джефф увидит этот вопрос, потому что у него, вероятно, будет отличный ответ ...

1 Ответ

24 голосов
/ 10 февраля 2010

Лучшее объяснение формата файла 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

Все, что я сделал, было

  1. Выполните специальный запрос в SQL Management Studio, чтобы получить результаты голосования
  2. Копировать вставленные результаты в текстовый файл (по умолчанию вывод разделен табуляцией)
  3. Написал небольшое 50-строчное приложение на C # для преобразования запроса в формат BLT
...