Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if(y1 ^ y2 !== z) {
// значит испорченный бит среди них, и исходное сообщение (первые четыре бита) можно читать без опаски
if(x1 ^ x2 !== y1) {
// значит испорченный бит y1
} elseif(x3 ^ x4 !== y2) {
// значит испорченный бит y2
} else {
// значит испорченный бит z
}
} else {
// значит испорчен один из битов данных
if(x1 ^ x2 !== y1) {
// испорчен один из первых двух битов данных
// используя ассоциативность xor'а, заменяем в проверке поочередно один из битов его альтернативой: x1 = x2 ^ y1
if((x1 ^ (x1 ^ y1)) ^ y2 !== z) {
// значит испорчен бит x2, так как в подстановке мы использовали только его
} elseif(((x2 ^ y1) ^ x2) ^ y2 !== z) {
// значит испорчен бит x1, так как в подстановке мы использовали только его
}
} elseif(x1 ^ x2 !== y2) {
// испорчен один из второй пары битов данных
if(y1 ^ (x3 ^ (x3 ^ y2)) !== z) {
// значит испорчен бит x3, так как в подстановке мы использовали только его
} elseif(y1 ^ ((x4 ^ y2) ^ x4) !== z) {
// значит испорчен бит x4, так как в подстановке мы использовали только его
}
} else {
// а здесь, как пишут индусы, чистые деньги! :P
}
}
Задачка с башорга