Реализуйте функцию
shorten_url(original_url, storage), которая генерирует короткий код (например, 5 символов) для длинной ссылки.Функция должна гарантировать уникальность кода и использовать уже существующий storage (словарь вида
{short_code: original_url}) для проверки коллизий.Код должен быть:
• Состоящим из символов [a-zA-Z0-9]
• Фиксированной длины (по умолчанию 5)
• Уникальным: если сгенерированный код уже есть — нужно сгенерировать другой
Решение задачи🔽
import random
import string
def shorten_url(original_url, storage, code_length=5):
chars = string.ascii_letters + string.digits
attempt = 0
max_attempts = 1000
while attempt < max_attempts:
code = ''.join(random.choices(chars, k=code_length))
if code not in storage:
storage[code] = original_url
return code
attempt += 1
raise RuntimeError("Unable to generate unique code after many attempts")
# Пример использования
storage = {}
url = "https://example.com/very/long/link"
code = shorten_url(url, storage)
print(code)
print(storage)