Question 5: A Python solution 

# main loop ...

filenames = sorted(glob.glob("contestants/contestant*"))
players = [ RpsContestant(f) for f in filenames ]

round = 1
while len(players) > 1:
    print("\nRound {}".format(round))
    winners = []
    while len(players) > 0:
        player1 = players.pop(0)
        player2 = players.pop(0)
        winners.append(player1.engage(player2))
    round += 1
    players = winners

print("\nToken: {}".format(players[0].token))