Skip to content

Instantly share code, notes, and snippets.

@minism
Created February 22, 2013 23:09

Revisions

  1. minism created this gist Feb 22, 2013.
    50 changes: 50 additions & 0 deletions gistfile1.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    import random
    import pprint
    import sys


    # 7 Prisoners, 1 designated counter
    prisoners = [
    {"seen": False, "is_counter": False, "messaged": False},
    {"seen": False, "is_counter": False, "messaged": False},
    {"seen": False, "is_counter": False, "messaged": False},
    {"seen": False, "is_counter": False, "messaged": False},
    {"seen": False, "is_counter": False, "messaged": False},
    {"seen": False, "is_counter": False, "messaged": False},
    {"seen": False, "is_counter": True, "count": 0},
    ]

    # Control and message bits (two switches)
    control = random.choice(range(2))
    message = random.choice(range(2))
    init_control = control
    init_message = message

    tries = 0
    while True:
    tries += 1
    prisoner = random.choice(prisoners)


    if not prisoner['seen']:
    prisoner['seen'] = True
    control = 0

    else:
    if prisoner['is_counter']:
    if message:
    # Someone set this bit, store and clear it
    prisoner['count'] += 1
    if prisoner['count'] == 6:
    print "Found all!"
    print "Initial state: %s %s" % (init_control, init_message)
    print "Num tries: %s" % tries
    print "----------------"
    pprint.pprint(prisoners)
    sys.exit()
    control = 1
    message = 0
    elif not prisoner['messaged']:
    if control and not message:
    prisoner['messaged'] = True
    message = 1