comparison python/example/possibilities.py @ 776:67fa26b40dc6

add example program for time-spacing
author Jeff Hammel <k0scist@gmail.com>
date Sun, 03 Jul 2016 18:33:09 -0700
parents
children ef6731a4ad86
comparison
equal deleted inserted replaced
775:13dd0ce4fa9f 776:67fa26b40dc6
1 #!/usr/bin/env python
2
3 # imports
4 import argparse
5 import sys
6 import time
7 from pprint import pprint
8
9 costs = {1:1,
10 7:3,
11 30:25}
12
13 A = [1, 2, 4, 5, 7, 29, 30]
14
15 #A = [3, 7, 10]
16
17 #A=[1,2,3]
18
19 def possibilities(A):
20 possibilities = [[(1, date) for date in A]]
21 for_consideration = [0]
22 while True:
23 if not for_consideration:
24 break
25 _for_consideration = []
26 for item in for_consideration:
27 basis = possibilities[item][:]
28 tickets = [i[0] for i in basis]
29 if set(tickets) == set([7]):
30 continue
31 index = 0
32 potential = []
33 while True:
34 try:
35 pos = tickets.find(1, index)
36 except ValueError:
37 break
38 potential = basis[:]
39 potential[pos] = (7, basis[pos][-1])
40
41 try:
42 while A[index] < date+6:
43 index += 1
44 except IndexError:
45 pass
46
47 return possibilities
48
49 def fill_space(A, spans):
50 """
51 A -- the space to be filled
52 spans -- the discrete length of each space
53 """
54 if not A:
55 return []
56
57 A = sorted(A)
58
59 possibilities = []
60
61 # [(ticket_value, index_into_A)]
62 working_set = [[(value, 0)] for value in spans]
63 # print "working set"
64 # pprint(working_set)
65 while working_set:
66 item = working_set.pop()
67 last_span, index = item[-1]
68 last_date = A[index]
69 e = None
70 index += 1
71 try:
72 while last_date + last_span > A[index]:
73 print ('index: {}'.format(index))
74 index += 1
75 except IndexError as e:
76 possibilities.append(item)
77 continue
78
79 # print "item:"
80 # pprint(item)
81 extension = [item[:] + [(span, index)]
82 for span in spans]
83
84 working_set.extend(extension)
85
86 # fill possibility indices with dates
87 retval = [[(A[index], span) for span, index in possibility]
88 for possibility in possibilities]
89 return retval
90
91
92 def cost(A, spans=(30,)):
93
94 # determine possibility spaces
95 spaces = fill_space(A, spans=spans)
96
97 # determine costs
98
99 if __name__ == '__main__':
100
101 parser = argparse
102 spans = costs.keys()
103
104 pprint (fill_space(A, spans))