Plurality   <---- My Project!

Perhaps the simplest way to hold an election, though, is via a method commonly known as the ā€œplurality voteā€ (also known as ā€œfirst-past-the-postā€ or ā€œwinner take allā€). In the plurality vote, every voter gets to vote for one candidate. At the end of the election, whichever candidate has the greatest number of votes is declared the winner of the election.

Example

Implement a program that runs a plurality election, per the below.

$ ./plurality Alice Bob Charlie
    Number of voters: 4
    Vote: Alice
    Vote: Bob
    Vote: Charlie
    Vote: Alice
    Alice
    

Tideman   <---- My Project!

You already know about plurality elections, which follow a very simple algorithm for determining the winner of an election: every voter gets one vote, and the candidate with the most votes wins.

But the plurality vote does have some disadvantages. What happens, for instance, in an election with three candidates, and the ballots below are cast?

Five ballots, tie betweeen Alice and Bob

A plurality vote would here declare a tie between Alice and Bob, since each has two votes. But is that the right outcome?

Thereā€™s another kind of voting system known as a ranked-choice voting system. In a ranked-choice system, voters can vote for more than one candidate. Instead of just voting for their top choice, they can rank the candidates in order of preference. The resulting ballots might therefore look like the below.

Three ballots, with ranked preferences

Example

Implement a program that runs a Tideman election, per the below.

./tideman Alice Bob Charlie
    Number of voters: 5
    Rank 1: Alice
    Rank 2: Charlie
    Rank 3: Bob

    Rank 1: Alice
    Rank 2: Charlie
    Rank 3: Bob

    Rank 1: Bob
    Rank 2: Charlie
    Rank 3: Alice

    Rank 1: Bob
    Rank 2: Charlie
    Rank 3: Alice

    Rank 1: Charlie
    Rank 2: Alice
    Rank 3: Bob

    Charlie