"""
Lab001. Преобразование текста в байты и биты.

Цель:
1. Взять обычную текстовую строку.
2. Преобразовать её в байты UTF-8.
3. Показать каждый байт как десятичное число.
4. Показать каждый байт как восемь бит.
5. Восстановить исходный текст.
"""

# Исходное сообщение
message = "HELLO SDR"

# Кодирование текста в байты.
# UTF-8 — способ представить символы числами.
encoded_message = message.encode("utf-8")

# Преобразование каждого байта в строку из восьми бит.
binary_message = " ".join(
    f"{byte:08b}" for byte in encoded_message
)

# Обратное преобразование байтов в текст.
decoded_message = encoded_message.decode("utf-8")


print("Исходный текст:")
print(message)

print("\nОбъект bytes:")
print(encoded_message)

print("\nБайты в десятичном виде:")
print(list(encoded_message))

print("\nБайты в двоичном виде:")
print(binary_message)

print("\nПодробно по каждому символу:")
for character, byte_value in zip(message, encoded_message):
    print(
        f"{character!r:>4} "
        f"→ число {byte_value:3d} "
        f"→ биты {byte_value:08b}"
    )

print("\nВосстановленный текст:")
print(decoded_message)

# Автоматическая проверка результата.
assert decoded_message == message

print("\nПроверка пройдена: исходный текст восстановлен без ошибок.")