Last active
December 24, 2015 08:29
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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