<H1>The BackPacker</h1> Determinates a player that has won the most, yet and chooses his last vote. <!-- language: lang-java --> package Humans; public class BackPacker extends Human { // toggles weather the BackPacker thinks majority is better vs. minority is better private static final boolean goWithMajority = false; @Override public final String takeSides(String history) { if (history == null || history.equals("")) return "evil"; String[] roundVotes = history.split(","); int players = roundVotes[0].length(); int[] winningPlayers = new int[players]; for (String nextRound : roundVotes) { boolean didGoodWin = didGoodWin(nextRound, players); for (int player = 0; player < nextRound.length(); player++) { boolean playerVotedGood = nextRound.charAt(player) == '1'; winningPlayers[player] += didPlayerWin(didGoodWin, playerVotedGood); } } int bestScore = -1; for (int nextPlayer : winningPlayers) if (bestScore < nextPlayer) bestScore = nextPlayer; int bestPlayer = 0; for (int ii = 0; ii < players; ii++) { if (winningPlayers[ii] == bestScore) { bestPlayer = ii; break; } } if (roundVotes[roundVotes.length - 1].charAt(bestPlayer) == '1') return "good"; return "evil"; } private int didPlayerWin(boolean didGoodWin, boolean playerVotedGood) { if(goWithMajority) { return ((didGoodWin && good) || (!didGoodWin && !good)) ? 1 : 0; } else { return ((!didGoodWin && good) || (didGoodWin && !good)) ? 1 : 0; } } private boolean didGoodWin(String round, int players) { int good = 0; for (char next : round.toCharArray()) good += next == '1' ? 1 : 0; return (good * 2) > players; } }