Skip to content

Commit 20ba960

Browse files
committed
Add utils to link list changes
1 parent f99f4d4 commit 20ba960

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

sdk/utils/utils.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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

Comments
 (0)