Загрузка данных
# ============================================================
# БИЛЕТ 7 — ГОТОВАЯ ПРОГРАММА
# Просто запусти. Она сама всё сделает и всё выведет.
# ============================================================
# ---------- 1. ХЭШИРОВАНИЕ ----------
def hash_function(s, size):
"""Превращает строку в число от 0 до size-1."""
h = 0
for ch in s:
h = (h * 31 + ord(ch)) % size
return h
class HashTable:
"""Хэш-таблица: хранит ключ -> значение."""
def __init__(self):
self.size = 10
self.table = [[] for _ in range(self.size)]
def put(self, key, value):
index = hash_function(key, self.size)
for pair in self.table[index]:
if pair[0] == key:
pair[1] = value
return
self.table[index].append([key, value])
def get(self, key):
index = hash_function(key, self.size)
for pair in self.table[index]:
if pair[0] == key:
return pair[1]
return None
# ---------- 2. ДВУСВЯЗНЫЙ СПИСОК С __getitem__ ----------
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def add(self, data):
node = Node(data)
if self.head is None:
self.head = node
self.tail = node
else:
node.prev = self.tail
self.tail.next = node
self.tail = node
def __getitem__(self, index):
if index < 0:
return None
current = self.head
i = 0
while current is not None:
if i == index:
return current.data
current = current.next
i += 1
return None
# ---------- 3. ЗАДАЧА 232: ОЧЕРЕДЬ НА СТЕКАХ ----------
class MyQueue:
def __init__(self):
self.stack_in = []
self.stack_out = []
def push(self, x):
self.stack_in.append(x)
def pop(self):
self.peek()
return self.stack_out.pop()
def peek(self):
if not self.stack_out:
while self.stack_in:
self.stack_out.append(self.stack_in.pop())
return self.stack_out[-1]
def empty(self):
return len(self.stack_in) == 0 and len(self.stack_out) == 0
# ============================================================
# ЗАПУСК И ВЫВОД
# ============================================================
print("=" * 55)
print("ПУНКТ 1: ХЭШИРОВАНИЕ")
print("=" * 55)
print("Хэш-функция превращает строку в число:")
print(" hash('hello') =", hash_function("hello", 10))
print(" hash('world') =", hash_function("world", 10))
print(" hash('hello') =", hash_function("hello", 10), "(то же самое — это правильно)")
print("\nХэш-таблица (ключ -> значение):")
ht = HashTable()
ht.put("apple", 100)
ht.put("banana", 200)
ht.put("apple", 999)
print(" apple =", ht.get("apple"), "(было 100, стало 999 — перезапись работает)")
print(" banana =", ht.get("banana"))
print(" cherry =", ht.get("cherry"), "(нет такого ключа)")
print()
print("=" * 55)
print("ПУНКТ 2: __getitem__ ДВУСВЯЗНОГО СПИСКА")
print("=" * 55)
lst = DoublyLinkedList()
for x in [10, 20, 30, 40, 50]:
lst.add(x)
print("Список: 10 <-> 20 <-> 30 <-> 40 <-> 50")
print(" lst[0] =", lst[0])
print(" lst[2] =", lst[2])
print(" lst[4] =", lst[4])
print(" lst[99] =", lst[99], "(за границей — None)")
print()
print("=" * 55)
print("ПУНКТ 3: ЗАДАЧА 232 — ОЧЕРЕДЬ НА СТЕКАХ")
print("=" * 55)
q = MyQueue()
q.push(1)
print(" push(1)")
q.push(2)
print(" push(2)")
print(" peek() =", q.peek())
print(" pop() =", q.pop())
print(" empty() =", q.empty())
print(" pop() =", q.pop())
print(" empty() =", q.empty())
print()
print("=" * 55)
print("ВСЁ РАБОТАЕТ. ПРОГРАММА ЗАВЕРШЕНА.")
print("=" * 55)