Skip to content

Instantly share code, notes, and snippets.

@lifelike
Last active December 24, 2015 08:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lifelike/6770967 to your computer and use it in GitHub Desktop.
Save lifelike/6770967 to your computer and use it in GitHub Desktop.
Quick attempt to try to solve a probability problem of how many turns it takes to exhaust the deck in a certain (unnamed) card game.
#!/usr/bin/env python2
import sys
from itertools import repeat
from random import shuffle
max_nest_size = 3
def make_deck(cardtypes_nr):
deck = []
for cardtype,nr in cardtypes_nr.iteritems():
deck.extend(repeat(cardtype, nr))
return deck
def simulate_aerjendeck(nrplayers, times):
deck = make_deck({'imp' : 23,
'spider' : 16,
'snake' : 10,
'dragon' : 5})
playerturnsplayed = []
for t in range(times):
playerturnsplayed.append(simulate_one_game(deck[:], nrplayers))
print nrplayers, "players", playerturnsplayed
def simulate_one_game(deck, nrplayers):
playerturns = 0
original_deck_size = len(deck)
shuffle(deck)
while len(deck) > original_deck_size*2/3:
deck = deck[nrplayers+1:]
playerturns += 1
while len(deck) > 0:
for playerdraw in range(nrplayers+1):
nesttype = deck[0]
nestsize = 1
deck = deck[1:]
while nestsize < max_nest_size and len(deck) > 0:
card = deck[0]
deck = deck[1:]
if card == nesttype:
nestsize += 1
else:
deck.insert(0, card)
break
if len(deck) == 0:
break
playerturns += 1
return playerturns
if __name__ == '__main__':
nrplayers = int(sys.argv[1])
times = int(sys.argv[2])
simulate_aerjendeck(nrplayers, times)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment