« Event 2: Skating on Thin Ice | Main | Event 4: Image is Everything »

Event 3: Instant (Runoff) Winner

Here is my submission for the Advanced Event 3 in the Microsoft Scripting Games 2008.

 

   1: '*********************************************************************

   2: ' Script Name: Event3.vbs

   3: '     Version: 1.0

   4: '      Author: Perry Harris (PHactotum)

   5: '     Updated: 9:49 PM Thursday, February 21, 2008

   6: '     Purpose: Solves the 2008 winter Scripting Games Advance Event 3: Instant (Runoff) Winner

   7: '              

   8: '       Usage: cscript Event3.vbs [phone number]

   9: '       Notes:

  10: '    Keywords: 

  11: '  versioning: 1.0    Original release

  12: '*********************************************************************

  13: Option Explicit

  14: Dim Politicians, Losers, Candidate

  15: Dim Done

  16: Dim objFS, objFile

  17: Dim strLine

  18: Dim aVote

  19: Dim i

  20: Dim LowestVote

  21: Dim LowestName

  22: Dim TotalVotes

  23:  

  24: Const ForReading = 1

  25: 'We'll be using two Dictionaries to keep track of our Politicians and our Losers.

  26: set Politicians=CreateObject("Scripting.Dictionary")

  27: set Losers=CreateObject("Scripting.Dictionary")

  28:  

  29: 'Open and read our Voting File

  30: Set objFS = CreateObject("Scripting.FileSystemObject")

  31: 'Just to be clear, We're not done yet

  32: Done = False

  33:  

  34: Do 

  35:     Politicians.RemoveAll

  36:     TotalVotes = 0

  37:     Set objFile = objFS.OpenTextFile("C:\Scripts\votes.txt", ForReading)

  38:     Do until objFile.AtEndOfStream

  39:         strLine = objFile.ReadLine

  40:         aVote = split(strLine,",")

  41:         i = 0

  42:         Do until not(Losers.Exists(aVote(i)))

  43:             i = i + 1

  44:         loop

  45:         

  46:         If Politicians.Exists(aVote(i)) then

  47:             Politicians.Item(aVote(i)) = Politicians.Item(aVote(i)) + 1

  48:         else

  49:             Politicians.Add aVote(i), 1

  50:         end if

  51:         TotalVotes = TotalVotes + 1

  52:     Loop

  53:     'Debugging statement

  54:     'WScript.StdOut.WriteLine "============================="

  55:     'We set LowestVote to 100%, or 1.00 so that as we find lower numbers we bubble down to the lowest result for possible extra passes.

  56:     LowestVote = 1

  57:     LowestName = "" 'Just to make sure it doesn't affect the outcome in future passes

  58:     For each Candidate in Politicians

  59:         'The following line was used for debugging purposes

  60:         'Wscript.StdOut.WriteLine Candidate & ": " & FormatPercent(Politicians.Item(Candidate)/TotalVotes,1)

  61:         If Politicians.Item(Candidate)/TotalVotes > 0.5 then

  62:             WScript.StdOut.WriteLine "The winner is " & Candidate & " with " & FormatPercent(Politicians.Item(Candidate)/TotalVotes,1) & " of the vote."

  63:             Done = True

  64:             Exit For

  65:         else if LowestVote > Politicians.Item(Candidate)/TotalVotes then

  66:             LowestName = Candidate

  67:             LowestVote = Politicians.Item(Candidate)/TotalVotes

  68:             end if

  69:         end if

  70:     next

  71:     Losers.Add LowestName,LowestVote 'Really don't need the vote but the Dictionary add method requires an item.

  72:     objFile.Close

  73: Loop Until Done


Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)

About

This page contains a single entry from the blog posted on February 22, 2008 9:43 AM.

The previous post in this blog was Event 2: Skating on Thin Ice.

The next post in this blog is Event 4: Image is Everything.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 4.1