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)