Skip to content

Instantly share code, notes, and snippets.

@acidjunk
Last active July 19, 2016 08:12
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 acidjunk/fbae2bfd2f32d5347f5d828674397f95 to your computer and use it in GitHub Desktop.
Save acidjunk/fbae2bfd2f32d5347f5d828674397f95 to your computer and use it in GitHub Desktop.
"""Kien card generator. This script tries to spread the 90 numbers over the available players in the most honest way"""
import random
SHUFFLE = 1
grid_size = 15
numbers = range(1, 91)
if SHUFFLE:
random.shuffle(numbers)
num_cards = 20
cards = []
for i in range(0, num_cards):
cards.append([])
def find_shortest_grid(cards):
l = len(cards[0])
index = 0
for i in range(0, len(cards)):
if len(cards[i]) < l:
l = len(cards[i])
return l
def select_random_cards(length, player_dist):
base = []
for i in range(0, len(cards)):
if len(cards[i]) == length:
base.append(i)
if len(base) < player_dist:
for i in range(0, len(cards)):
if len(cards[i]) == length+1:
base.append(i)
if len(base)<player_dist:
return base
return random.sample(base, player_dist)
# calculate how many cards will receive this number
player_dist=num_cards/(len(numbers)/grid_size)
longest_grid=0
for number in numbers:
length = find_shortest_grid(cards)
selection = select_random_cards(length, player_dist)
for item in selection:
cards[item].append(number)
print "Stats::\nnumber of players with same numbers={}\nnumber of players={}\n---------".format(player_dist, len(cards))
for card in range(0, len(cards)):
print "Player {0}: {1}".format(card+1, cards[card])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment