from structures.LinkedList import * def hash_func(name: str, size: int) -> int: total = 0 for i, ch in enumerate(name): total += ord(ch) * (i + 1) return total % size def ht_insert(buckets: list | None, name: str, phone: str, size: int = 50) -> list: if buckets is None: buckets = [None] * size index = hash_func(name, len(buckets)) buckets[index] = ll_insert(buckets[index], name, phone) return buckets def ht_find(buckets: list | None, name: str) -> str | None: if not buckets: return None index = hash_func(name, len(buckets)) return ll_find(buckets[index], name) def ht_delete(buckets: list | None, name: str) -> list | None: if not buckets: return buckets index = hash_func(name, len(buckets)) buckets[index] = ll_delete(buckets[index], name) return buckets def ht_list_all(buckets: list | None) -> list: if not buckets: return [] result = [] for bucket in buckets: if bucket is not None: result.extend(ll_list_all(bucket)) return sorted(result, key=lambda x: x[0])