Files
2023-11-07 01:27:43 +02:00

53 lines
1.5 KiB
Python

class QuickList:
def __init__(self, t):
self.list = t
self.index_of_first = 0
# print(self.list)
def move(self, current_index):
list_len = len(self.list)
# print("listlen:", list_len)
if current_index // list_len != 0:
current_index -= list_len * current_index // list_len
self.index_of_first += current_index
# print("current index:", current_index, "+=", self.index_of_first)
# print("index of first > listlen:", self.index_of_first > list_len)
if self.index_of_first > list_len:
self.index_of_first -= list_len
# print("updated index:", self.index_of_first)
# print(f"moved {current_index} to index_of_first: {self.index_of_first}")
def get(self, i):
# print("get of index:", i)
list_len = len(self.list)
# print(f"{self.index_of_first} + {i} = {self.index_of_first + i}")
current_index = self.index_of_first
current_index += i
if current_index >= list_len:
current_index -= list_len
return self.list[current_index]
if __name__ == "__main__":
q = QuickList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(q.get(0)) # 1
print(q.get(4)) # 5
q.move(3)
print(q.get(4)) # 8
q.move(3)
print(q.get(4)) # 1
q.move(10)
print(q.get(4)) # 1
q.move(7)
q.move(5)
print(q.get(0)) # 9
q = QuickList(list(range(1, 10**5 + 1)))
for i in range(10**5 - 1):
q.move(10**5 - 1)
print(q.get(10**4))