Skip to content

Instantly share code, notes, and snippets.

@zekoz
Created August 22, 2018 20:27
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 zekoz/9f07e89ada24990c89fd40a73a14ea87 to your computer and use it in GitHub Desktop.
Save zekoz/9f07e89ada24990c89fd40a73a14ea87 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# Usage:
# interleave.py full-list draft1 draft2 ...
#
# Prints interleaved drafts to stdout.
# Draft order goes by order passed as arguments.
#
# Input files should be simple text files with one string per line.
import random
import sys
def Draft(pool, preferences):
"""Interleave draft picks."""
draft = {}
# In case we are running in python3, int()
rounds = int((len(pool) + len(preferences) - 1) / len(preferences))
for i in range(rounds):
order = range(len(preferences))
if i % 2:
order = reversed(order)
for p in order:
for pick in preferences[p]:
if pick not in draft:
draft[pick] = p
break
# No more picks ranked, if available, assign at random.
else:
remainder = [pi for pi in pool if pi not in draft]
if not remainder:
continue
pick = random.choice(remainder)
draft[pick] = p
return draft
def main():
if len(sys.argv) < 4:
sys.stderr.write('Usage: interleave full-list draft1 draft2 ...\n')
sys.exit(1)
pool = []
f = open(sys.argv[1])
for line in f:
pool.append(line.strip())
f.close()
preferences = []
for path in sys.argv[2:]:
draft = []
f = open(path)
for line in f:
line = line.strip()
if line not in pool:
sys.stderr.write("Invalid draft choice in %s: %s\n" % (path, line))
sys.exit(1)
draft.append(line.strip())
f.close()
preferences.append(draft)
draft = Draft(pool, preferences)
for p in pool:
sys.stdout.write('%s,%d\n' % (p, draft[p]))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment