Pirates Revisited

A slightly different version of the original pirates problem (read that one first to get all the rules). 6 pirates, only one gold coin. as before, the pirates are super-smart, and they value, in this order: (i) their lives, (ii) getting money, (iii) seeing other pirates die. so if given the choice between two outcomes, in which they get the same amount of money, they’d choose the outcome where they get to see more of the other pirates die. how can pirate 6 save his skin?

thanks to my super smart professor brother

Solution

1 pirate case is obvious. 2 pirate case is obvious, pirate 2 keeps the coin.

3 pirate case: pirate 3 has to give the coin to pirate 1, because if he gives it pirate 2 pirate 2 will say “screw that i wanna see you die and i’m going to get the coin anyway.” so in 3 pirate case, we have pirate 1 gets 1 coin, pirates 2 and 3 get 0.

4 pirate case: pirate 4 can’t give the coin to pirate 1, because pirate 1 would rather see him die since he’s going to get 1 coin anyway. But pirate 4 could give the coin to either pirate 2 or pirate 3.

5 pirate case: pirate 5 just dies, and it goes to the 4 pirate case. there is no way for him to convince two people to vote for him.

6 pirate case: pirate 6 can count on his own vote, plus pirate 5’s vote, because 5 won’t want to die. now who should he give the coin to? he could give it to pirate 1 or to pirate 4, since in the 4 pirate case they are guaranteed to get nothing. it’s unclear whether he could give it to pirate 2 or 3. neither pirate 2 nor pirate 3 is guaranteed to get a coin in the 4 pirate case. so the question is, how do they value (i) definitely getting a coin from pirate 6 vs. (ii) definitely seeing pirates 6 and 5 die, with the chance of getting a coin from pirate 4. since we don’t have enough information to answer that, to be safe, i would just say pirate 6 should offer the coin to pirate 1 or pirate 4.

2026 Update: Extended Game Theory and Mechanism Design

Pirates Revisited — typically an extension of the standard pirate gold division puzzle with additional constraints (pirates have preferences beyond gold, or can form coalitions) — tests advanced game theory reasoning. These extensions appear in mechanism design interviews at tech companies and quant firms.

The standard pirate game extended: What if pirates value power (prefer fewer pirates alive) over gold? What if they can make side payments? What if the vote requires 2/3 majority? Each modification changes the equilibrium solution, requiring fresh backward induction from the minimal case.

The mechanism design connection: Designing fair distribution mechanisms — auctions, voting systems, resource allocation protocols — is a core problem in platform engineering. Amazon’s advertising auction, Google’s ad auction, and Airbnb’s pricing algorithm are all mechanism design problems at scale. The pirate game teaches backward induction, which is the foundational technique.

General backward induction framework:

def pirate_game(n_pirates, n_gold, requires_majority=True):
    """
    Solve pirate gold distribution via backward induction.
    n_pirates: total number of pirates (proposer is most senior)
    n_gold: total gold coins to distribute
    Returns optimal proposal for the most senior pirate.
    """
    # Base case: 1 pirate takes everything
    if n_pirates == 1:
        return [n_gold]

    # Base case: 2 pirates - proposer needs own vote (1/2 majority)
    if n_pirates == 2:
        return [n_gold, 0]  # Senior pirate takes all (has 50%, which suffices)

    # Get what each pirate would receive if this proposal fails
    # (i.e., what they get in the n_pirates-1 game)
    if_rejected = [0] + pirate_game(n_pirates - 1, n_gold)

    votes_needed = n_pirates // 2 + 1 if requires_majority else n_pirates // 2

    # Bribe pirates with minimum gold needed for their vote
    # Give 0 to most expensive pirates, give (their_rejected_value + 1) to cheapest
    proposal = [0] * n_pirates
    proposal[0] = n_gold  # Start: senior pirate takes all

    votes = 1  # Own vote
    # Sort pirates by their "rejection value" - cheapest to bribe first
    bribeable = sorted(range(1, n_pirates), key=lambda i: if_rejected[i])

    for p in bribeable:
        if votes >= votes_needed:
            break
        bribe = if_rejected[p] + 1
        if bribe = votes_needed else None
Scroll to Top