2026-rff_mp/VaravinVV/task1_1.py

93 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random, time, csv
N = []
for n in range(10000): # вот сначала просят сгенерировать а потом 100 гарантированных имён ну ёмаё💀💀💀
i = random.randint(1,99999)
p = random.randint(10000000, 99999999)
N.append((f"User_{i:05d}", str(p))) # как в примере кортежики брбрбр
#короче тупо в лоб, там всё равно вставка списка повторы не допускает (ну телефон обновится)
for i in range(100):
N.append((f"User_{i:05d}", str(f'{i:08d}')))
def ll_insert(head, name, phone):
data = {'name' : name, 'phone' : phone, "next" : None}
if head is None:
return data
current = head
while current:
if current['name'] == name:
current['phone'] = phone
return head
if current['next'] == None:
last = current
current = current['next'] # везде где такое это изменение текущей строки на следующую через ссылку в нексте
last['next'] = data
return head
def ll_find(head, name):
current = head
while current:
if current['name'] == name:
return current['phone']
current = current['next']
return None
def ll_delete(head, name):
if head is None:
return None
prev = head
current = head['next']
while current:
if current['name'] == name:
prev['next'] = current['next']
return head
prev = current
current = current['next']
return head
def ll_list_all(head):
data_list = []
current = head
while current:
data_list.append({'name' : current['name'], 'phone' : current['phone']})
current = current['next']
data_list.sort(key=lambda x: x['name']) # честно украдено со стака оверфлоу и не понял что такое лямбда я устал читать
return data_list
#1 - вставка списка
start_time = time.perf_counter()
data_unsorted = None
for name, phone in N:
data_unsorted = ll_insert(data_unsorted, name, phone)
end_time = time.perf_counter()
elapsed_time_1_1 = end_time - start_time
start_time = time.perf_counter()
data_sorted = ll_list_all(data_unsorted)
end_time = time.perf_counter() # правильно ли я сделал? навряд-ли
elapsed_time_1_2 = end_time - start_time
#2 - по поиску
start_time = time.perf_counter()
for i in range(100):
ll_find(data_unsorted, f'User_{i:05d}')
for i in range(10):
ll_find(data_unsorted, f'None_{i:05d}')
end_time = time.perf_counter()
elapsed_time_2_1 = end_time - start_time
start_time = time.perf_counter()
for i in range(100):
ll_find(data_sorted, f'User_{i:05d}')
for i in range(10):
ll_find(data_sorted, f'None_{i:05d}')
end_time = time.perf_counter()
elapsed_time_2_2 = end_time - start_time