如何使用C#为OpenSTV选举生成.BLT文件?

Max*_*sky 16 .net c# voting openstv

在看到最新的SO博客帖子后,我刚刚下载了OpenSTV,关于主持人选举的结果.杰夫写道,他使用OpenSTV进行选举,并提供了一张包含投票数据的投票文件(.blt).

我的问题是:你如何在C#中创建.BLT文件?

以下两种方式我可以想到投票页面是这样做的:

  • 投票页面将每个投票添加到SQL数据库中,然后以某种方式,这些投票在投票结束后被导出到.BLT文件中.怎么样?我怎样才能做到这一点?
  • 或者,投票页面创建了该文件,然后在每次投票时添加到该文件中.我确信这不是投票页面的工作方式,因为它完全不可扩展,但我怎么能在C#中做到这一点?

我有兴趣了解两种可能性如何工作以及如何在C#中实现这一点.提前致谢.哦,我希望杰夫看到这个问题,因为他可能会有一个很好的答案......

Jef*_*ood 24

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格式

  • 我对选票重量也有点困惑.如果我们以SO选举为例,在什么情况下每次投票的投票权重不一样? (3认同)
  • 有关文件格式的更详细说明,请参见本文第3页(http://www.dia.govt.nz/diawebsite.NSF/Files/meekm/$file/meekm.pdf). (2认同)
  • 为了解决@TimPost的问题,格式规定应该记录相同的选票,这个数字会成为重量.目前没有对Stack Exchange选举文件进行此操作,但OpenSTV至少可以灵活地允许统计或重复选票. (2认同)