Загрузка данных



w1 = "11001011"
w2 = "10011001"
w3 = "11101110"
 
n = 8  # длина слов в битах
 
 
def hamming(a, b):
    """Расстояние Хэмминга и позиции различий через побитовый XOR."""
    x = int(a, 2) ^ int(b, 2)      # XOR: единицы стоят там, где биты различаются
    d = 0
    positions = []
    for p in range(1, n + 1):      # позиции считаем слева направо, начиная с 1
        if (x >> (n - p)) & 1:     # проверяем бит в позиции p
            d += 1
            positions.append(p)
    return x, d, positions
 
 
x12, d12, pos12 = hamming(w1, w2)
x13, d13, pos13 = hamming(w1, w3)
x23, d23, pos23 = hamming(w2, w3)
 
print("Слова 1 и 2:", w1, "XOR", w2, "=", format(x12, "08b"))
print("  d =", d12, ", позиции:", pos12)
print("Слова 1 и 3:", w1, "XOR", w3, "=", format(x13, "08b"))
print("  d =", d13, ", позиции:", pos13)
print("Слова 2 и 3:", w2, "XOR", w3, "=", format(x23, "08b"))
print("  d =", d23, ", позиции:", pos23)
 
d_min = min(d12, d13, d23)
 
print()
print("Минимальное расстояние d_min =", d_min)
print("Обнаруживает ошибок до:", d_min - 1)
print("Исправляет ошибок до:", (d_min - 1) // 2)
 
# Проверка: число единиц в XOR должно совпадать с расстоянием
print()
print("Проверка:", bin(x12).count("1") == d12 and bin(x13).count("1") == d13 and bin(x23).count("1") == d23)