Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I generate .BLT files for OpenSTV elections using C#?

I just downloaded OpenSTV after seeing the most recent SO blog post, regarding the results of the moderator election. Jeff wrote that he used OpenSTV to conduct the election, and supplied a ballot file (.blt) along with it that contains the voting data.

My question is: how do you create a .BLT file in C#?

Here are two ways that I can think of that the voting page did it:

  • The voting page added each vote into a SQL database, and then somehow, these votes were exported into a .BLT file after voting had ended. How though? How can I do this?
  • Or, the voting page created the file and then added to it each time someone voted. I'm sure that this is NOT how the voting page worked, because it's completely unscalable, but how could I do this in C#?

I'm interested in finding out how both possibilities work and how I can do that in C#. Thanks in advance. Oh, and I hope Jeff sees this question, because he'd probably have a great answer...

like image 964
Maxim Zaslavsky Avatar asked Feb 10 '10 00:02

Maxim Zaslavsky


1 Answers

The best explanation of the BLT file format is here:

    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

All I did was

  1. Perform an ad-hoc query in SQL Management Studio to get the voting results
  2. Copy-pasted results into a text file (output is tab-delimited by default)
  3. Wrote a small 50 line C# app to convert from the query to BLT format
like image 116
Jeff Atwood Avatar answered Oct 06 '22 14:10

Jeff Atwood