From 46205268e4984389585a44336f2e1a3804c0ac8d Mon Sep 17 00:00:00 2001 From: rsiddharth Date: Fri, 4 Sep 2020 18:36:19 -0400 Subject: lib: add HammingDistance * lib/hamming.go (HammingDistance, setBits): New functions. --- lib/hamming.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 lib/hamming.go (limited to 'lib') 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 +// 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) +} -- cgit v1.2.3