Как я могу генерировать файлы .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.