You are the Weakest Link, Goodbye This king-of-the-hill challenge is based off of the game show, Weakest Link.  For those unfamiliar with the show, the crux of this challenge deals with who you vote off:

If the other players are smarter than you, then you have less of a chance of getting the pot.
If the other players are dumber than you, then you have less of a pot to get.

At the start of each round, the Pot starts out with $0.  A group of 9 players is formed, and each player is given a unique Smartness from 1 to 9.
At the start of each turn, Pot += Smartness for each player still in the round.  Then, players vote on the player they wish to remove.  The player with the most votes is removed.  In case of a tie, the smarter player is kept.
When there are only 2 players are left in the round, they face off in a battle of wits.  The chance of the player winning is Smartness/(Smartness+OpponentSmartness).  The winning player then receives the entire pot.
The player who has received the most money at the end of the game wins.
Input / Output
Each turn, you will receive the current list of opponents.  You will have access to your smartness and all players' entire voting history for the round via functions in the Player class.
As output, you must return a single integer, representing the player you wish to vote for (representing their smartness).  Voting for yourself is allowed (but not recommended).
Rounds of 9 will repeat until all players have played at least 100010000 rounds, and all players have played in the same number of rounds.
You can find the controller here: https://github.com/nathanmerrill/WeakestLink
To create a player, you need to extend the Player class, and add your player to the PlayerFactory class.  Your class must follow the following rules:

Communication or interference with any other player (include your other players of the same type) is strictly prohibited.

Reflection and static variables (except for constants) are not allowed.

If you want to use randomness, I have provided a getRandom() function in the Player class.  Use it, so simulations can be deterministic.


I have provided many functions in the Player class for easy access to data.  You can find them online on Github.  Your player will be instantiated each new round.  &quot;Dumb/suicidal&quot; players are allowed (but not players with the same strategy).
Scores
377195  WeakestLink.Players.PrudentSniper
362413  WeakestLink.Players.Sniper
353082  WeakestLink.Players.VengefulSniper
347574  WeakestLink.Players.AntiExtremist
298006  WeakestLink.Players.BobPlayer
273867  WeakestLink.Players.MedianPlayer
247881  WeakestLink.Players.TheCult
240425  WeakestLink.Players.Leech
235480  WeakestLink.Players.SniperAide
223128  WeakestLink.Players.Guard
220760  WeakestLink.Players.Anarchist
216839  WeakestLink.Players.RevengePlayer
215099  WeakestLink.Players.IndependentVoter
213883  WeakestLink.Players.SniperKiller
210653  WeakestLink.Players.MaxPlayer
210262  WeakestLink.Players.Bandwagon
209956  WeakestLink.Players.MeanPlayer
208799  WeakestLink.Players.Coward
207686  WeakestLink.Players.Spy
204335  WeakestLink.Players.Hero
203957  WeakestLink.Players.MiddleMan
198535  WeakestLink.Players.MinPlayer
197589  WeakestLink.Players.FixatedPlayer
197478  WeakestLink.Players.HighOrLowNotSelf
181484  WeakestLink.Players.RandomPlayer
165160  WeakestLink.Players.BridgeBurner
Sniper

The general idea is to keep around one of the stupid players (i.e. ones we are more likely to beat in the face-off) to snipe for the points. After that we try to remove the other low-value players to raise the pot. But when we get to the intelligent players we opt to remove for the most dangerous ones in case our stupid player gets removed. That way if we don't have someone to snipe we should get someone we at least stand a chance against. Also, since we always vote with either a min or max player, I expect we are fairly effective in getting our way.

package WeakestLink.Players;
import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
public class Sniper extends Player {
    @Override
    public int vote(Set&lt;Integer&gt; currentOpponents) {
        int smrt = getSmartness();

        //count number of players smarter/stupider than me
        Iterator&lt;Integer&gt; opps = currentOpponents.iterator();
        int cnt_smrt=0, cnt_stpd=0, opp_smrt, min_stpd=10, max_smrt=0;

        while(opps.hasNext()){
            opp_smrt = opps.next().intValue();
            if(opp_smrt &gt; smrt){
                cnt_smrt++;
                if(opp_smrt &gt; max_smrt) max_smrt = opp_smrt;
            }
            else if(opp_smrt &lt; smrt){
                cnt_stpd++;
                if(opp_smrt &lt; min_stpd) min_stpd = opp_smrt;
            }
        }

        //remove low-value, then dangerous players
        if(cnt_stpd&gt;1)
            return min_stpd;
        else
            return max_smrt;
    }
}