Skip to content

Instantly share code, notes, and snippets.

@mr5z
Last active January 17, 2021 08:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mr5z/a4b73a85e1df8a83d38e3a90d2679939 to your computer and use it in GitHub Desktop.
Save mr5z/a4b73a85e1df8a83d38e3a90d2679939 to your computer and use it in GitHub Desktop.
Longest way to implement extended hamming code error detection. It doesn't even have a correction capability.
function isEven(n) {
return n % 2 == 0;
}
function getColumnSum(column, block, skipFirst) {
return (skipFirst ? 0 : block[column + 0]) +
block[column + 4] +
block[column + 8] +
block[column + 12];
}
function getRowSum(row, block, skipFirst) {
return (skipFirst ? 0 : block[4 * row + 0]) +
block[4 * row + 1] +
block[4 * row + 2] +
block[4 * row + 3];
}
function check1stParity(block) {
var a = getColumnSum(1, block, true);
var b = getColumnSum(3, block, false);
var parityValue = block[1];
if (parityValue)
return !isEven(a + b);
else
return isEven(a + b);
}
function check2ndParity(block) {
var a = getColumnSum(2, block, true);
var b = getColumnSum(3, block, false);
var parityValue = block[2];
if (parityValue)
return !isEven(a + b);
else
return isEven(a + b);
}
function check3rdParity(block) {
var a = getRowSum(1, block, true);
var b = getRowSum(3, block, false);
var parityValue = block[4];
if (parityValue)
return !isEven(a + b);
else
return isEven(a + b);
}
function check4thParity(block) {
var a = getRowSum(2, block, true);
var b = getRowSum(3, block, false);
var parityValue = block[8];
if (parityValue)
return !isEven(a + b);
else
return isEven(a + b);
}
function firstIndexParity(block) {
var sum = 0;
for(var i = 0;i < block.length; ++i) {
sum += block[i];
}
var parityValue = block[0];
if (parityValue)
return !isEven(sum);
else
return isEven(sum);
}
function fifteenElevenHamming(block) {
var a = check1stParity(block);
var b = check2ndParity(block);
var c = check3rdParity(block);
var d = check4thParity(block);
return a && b && c && d;
}
function extendedHammingCode(block) {
var a = firstIndexParity(block);
var b = fifteenElevenHamming(block);
return a && b;
}
function main() {
var correctBlock = [
0, 0, 1, 0,
1, 0, 1, 1,
1, 0, 0, 0,
1, 1, 1, 0
];
var wrongBlock = [
0, 0, 1, 0,
1, 0, 1, 1,
1, 0, 1, 0,
1, 1, 1, 0
];
var a = extendedHammingCode(correctBlock);
var b = extendedHammingCode(wrongBlock);
console.log("Correct block: " + a);
console.log("Wrong block: " + b);
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment