summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/hamming.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/hamming.go b/lib/hamming.go
new file mode 100644
index 0000000..c267c43
--- /dev/null
+++ b/lib/hamming.go
@@ -0,0 +1,27 @@
+// Copyright © 2020 rsiddharth <s@ricketyspace.net>
+// SPDX-License-Identifier: ISC
+
+package lib
+
+func HammingDistance(a, b string) int {
+ if len(a) != len(b) {
+ return -1 // Fail.
+ }
+
+ d := 0
+ for i := 0; i < len(a); i++ {
+ c := a[i] ^ b[i]
+ d += setBits(c)
+ }
+ return d
+}
+
+// Returns number of set bits.
+func setBits(b byte) int {
+ var c byte = 0
+ for i := 0; i < 8; i++ {
+ c += b & 0x1
+ b = b >> 1
+ }
+ return int(c)
+}