mirror of
https://github.com/iritmaximus/tira.git
synced 2026-10-12 19:13:47 +03:00
53 lines
1.5 KiB
Python
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))
|