1+ def upsert (sorted_list : list , change : dict ):
2+ old_idx = None
3+ for ind , el in enumerate (sorted_list ):
4+ if el ['address' ] == change ['address' ]:
5+ old_idx = ind
6+ break
7+
8+ if old_idx == None :
9+ raise Exception ('' )
10+
11+ del sorted_list [old_idx ]
12+
13+ new_idx = None
14+ for ind , el in enumerate (sorted_list ):
15+ if el ['value' ] < change ['value' ]:
16+ new_idx = ind
17+ break
18+
19+ if new_idx == None :
20+ sorted_list .append (change )
21+ return len (sorted_list ) - 1
22+ else :
23+ sorted_list .insert (new_idx , change )
24+ return new_idx
25+
26+ def linked_list_change (sorted_list : list , change : dict ):
27+ idx = upsert (sorted_list , change )
28+ greater = '0x0000000000000000000000000000000000000000' if idx == 0 else sorted_list [idx - 1 ]['address' ]
29+ lesser = '0x0000000000000000000000000000000000000000' if idx == len (sorted_list ) - 1 else sorted_list [idx + 1 ]['address' ]
30+
31+ return {'lesser' : lesser , 'greater' : greater }
32+
33+ def linked_list_changes (sorted_list : list , change_list : list ):
34+ lessers = []
35+ greaters = []
36+
37+ for it in change_list :
38+ res = linked_list_change (sorted_list , it )
39+ lessers .append (res ['lesser' ])
40+ greaters .append (res ['greater' ])
41+
42+ return {'lessers' : lessers , 'greaters' : greaters , 'sorted_list' : sorted_list }
43+
44+ if __name__ == "__main__" :
45+ # lst = [
46+ # { 'address': 'address 1', 'value': 7 },
47+ # { 'address': 'address 2', 'value': 5 },
48+ # { 'address': 'address 3', 'value': 4 },
49+ # { 'address': 'address 4', 'value': 3 },
50+ # { 'address': 'address 5', 'value': 2 },
51+ # { 'address': 'address 6', 'value': 2 },
52+ # { 'address': 'address 7', 'value': 1 },
53+ # ]
54+ # changes = [{'address': 'address 3', 'value': 2}]
55+ # expected = {
56+ # greaters: ['address 6'],
57+ # lessers: ['address 7'],
58+ # }
59+
60+ lst = [
61+ { 'address' : 'address 1' , 'value' : 7 },
62+ { 'address' : 'address 2' , 'value' : 5 },
63+ { 'address' : 'address 3' , 'value' : 4 },
64+ { 'address' : 'address 4' , 'value' : 3 },
65+ { 'address' : 'address 5' , 'value' : 2 },
66+ { 'address' : 'address 6' , 'value' : 2 },
67+ { 'address' : 'address 7' , 'value' : 1 },
68+ ]
69+ changes = [{'address' : 'address 3' , 'value' : 2 }, {'address' : 'address 2' , 'value' : 0 }]
70+ #expected = {
71+ # greaters: ['address 6', 'address 7'],
72+ # lessers: ['address 7', NULL_ADDRESS],
73+ # }
74+
75+ print (linked_list_changes (lst , changes ))
0 commit comments