Skip to content

Instantly share code, notes, and snippets.

@bcleenders
Created September 19, 2012 09:07
Show Gist options
  • Save bcleenders/3748599 to your computer and use it in GitHub Desktop.
Save bcleenders/3748599 to your computer and use it in GitHub Desktop.
Hamming code generator
// De eisen voor de codewoorden
var codeLength = 15,
hamDist = 7;
// Creeër het eerste codewoord; 0
var firstCode = [];
for(var i = 0; i < codeLength; i++) {
firstCode[i] = 0;
}
// De array die alle codes moet gaan bevatten
var codes = [
firstCode
];
// kopieërd "original", om references naar opgeslagen waarden te voorkomen
var copy = function(original) {
var output = [];
for(var i = 0; i < original.length; i++) {
output[i] = original[i];
}
return output;
}
// Tovert "previous" om tot de volgende code (binair tellen feitelijk)
var addOne = function(previous) {
var carry = 1;
for(var i = 0; i < previous.length && (carry == 1); i++) {
if(previous[i] == 1) {
previous[i] = 0;
// carry remains 1
}
else {
previous[i] = 1;
carry = 0;
}
}
}
// Geeft de Hamming distance tussen twee codes
var getDiff = function(a, b) {
var output = 0;
for(var i = 0; i < a.length; i++) {
if(a[i] !== b[i]) {
output++;
}
}
return output;
}
//
// START CALUCLATING
//
var prev = copy(firstCode);
for(var i = 0; i < Math.pow(2, codeLength); i++) {
var isGood = true;
for(var j = codes.length -1; j >= 0 && isGood; j--) {
isGood = getDiff(prev, codes[j]) >= hamDist;
}
if(isGood)
codes[codes.length] = copy(prev);
// Done checking this code, now let's focus on the next one!
addOne(prev);
}
// now print the results
for(var i = 0; i < codes.length; i++) {
var current = '';
// Add leading zeroes
for(var j = 0; j < codeLength; j++) {
current += codes[i][j];
}
console.log(current);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment