-
Notifications
You must be signed in to change notification settings - Fork 0
/
spbs.py
57 lines (40 loc) · 1.53 KB
/
spbs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
"""Command-line utility to identify a good roster from preferencial bids"""
from __future__ import print_function
from rostersearch import Bids, mountain_range_search
def importcsvbids(csvfilename, bids):
"""Import preferencial bids from a CSV file."""
from csv import DictReader
with open(csvfilename) as csvfile:
csvreader = DictReader(csvfile)
fieldnames = list(csvreader.fieldnames) # copy
for row in csvreader:
# Remove first field leaving just the bid numbers.
name = row[csvreader.fieldnames[0]]
row.pop(csvreader.fieldnames[0])
# Add this person's bids.
bids[name] = row
return fieldnames
# Main loop if called via command-line
if __name__ == "__main__":
from argparse import ArgumentParser
argparser = ArgumentParser(
description='Simple Preferential Bidding System',
epilog='https://github.com/axisofentropy/spbs/'
)
argparser.add_argument(
"bidcsv",
help='Filename of input bids in CSV format.'
)
args = argparser.parse_args()
bids = Bids()
fieldnames = importcsvbids(args.bidcsv, bids)
#print('These applicants will bid for shifts:', ', '.join(bids.keys()))
best_rosters = mountain_range_search(bids)
best_roster = best_rosters[0]
print('\n')
print("BEST")
for roster in best_rosters:
print(best_rosters.index(roster))
print(str(roster))
print('')
print("SCORE", best_roster.score(bids), "in", len(best_rosters), "rosters")