comparison python/example/possibilities.py @ 777:ef6731a4ad86

close enough
author Jeff Hammel <k0scist@gmail.com>
date Sun, 03 Jul 2016 18:48:38 -0700
parents 67fa26b40dc6
children
comparison
equal deleted inserted replaced
776:67fa26b40dc6 777:ef6731a4ad86
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2
3 """
4 """
2 5
3 # imports 6 # imports
4 import argparse 7 import argparse
5 import sys 8 import sys
6 import time 9 import time
9 costs = {1:1, 12 costs = {1:1,
10 7:3, 13 7:3,
11 30:25} 14 30:25}
12 15
13 A = [1, 2, 4, 5, 7, 29, 30] 16 A = [1, 2, 4, 5, 7, 29, 30]
14
15 #A = [3, 7, 10]
16
17 #A=[1,2,3]
18 17
19 def possibilities(A): 18 def possibilities(A):
20 possibilities = [[(1, date) for date in A]] 19 possibilities = [[(1, date) for date in A]]
21 for_consideration = [0] 20 for_consideration = [0]
22 while True: 21 while True:
44 except IndexError: 43 except IndexError:
45 pass 44 pass
46 45
47 return possibilities 46 return possibilities
48 47
48
49 def fill_space(A, spans): 49 def fill_space(A, spans):
50 """ 50 """
51 A -- the space to be filled 51 A -- the space to be filled
52 spans -- the discrete length of each space 52 spans -- the discrete length of each space
53 """ 53 """
68 last_date = A[index] 68 last_date = A[index]
69 e = None 69 e = None
70 index += 1 70 index += 1
71 try: 71 try:
72 while last_date + last_span > A[index]: 72 while last_date + last_span > A[index]:
73 print ('index: {}'.format(index)) 73 # print ('index: {}'.format(index))
74 index += 1 74 index += 1
75 except IndexError as e: 75 except IndexError as e:
76 possibilities.append(item) 76 possibilities.append(item)
77 continue 77 continue
78 78
87 retval = [[(A[index], span) for span, index in possibility] 87 retval = [[(A[index], span) for span, index in possibility]
88 for possibility in possibilities] 88 for possibility in possibilities]
89 return retval 89 return retval
90 90
91 91
92 def cost(A, spans=(30,)): 92 def sorted_costs(A, costs=tuple(costs.items())):
93
94 costs = dict(costs)
93 95
94 # determine possibility spaces 96 # determine possibility spaces
95 spaces = fill_space(A, spans=spans) 97 spaces = fill_space(A, spans=costs.keys())
96 98
97 # determine costs 99 # determine costs
100 retval = []
101 for space in spaces:
102 cost = sum([costs[value] for date, value in space])
103 retval.append((cost, space))
104
105 # sort by cost
106 retval.sort(key=lambda x: x[0])
107
108 return retval
98 109
99 if __name__ == '__main__': 110 if __name__ == '__main__':
100 111
101 parser = argparse 112 parser = argparse.ArgumentParser(description=__doc__)
102 spans = costs.keys() 113 options = parser.parse_args()
103 114
104 pprint (fill_space(A, spans)) 115 dates = sorted(A)
116
117 print "Dates: {}".format(', '.join([str(i) for i in dates]))
118 for cost, value in sorted_costs(A, costs):
119 print ("{} : {}".format(cost, value))