/* Hamming distance in Picat. I.e. the number of bits differing in two (binary) arrays. See http://en.wikipedia.org/wiki/Hamming_distance Model created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. % % We can now either % - Calculate the hamming distance from two arrays % - Given the distance, generate all arrays which has the % Hamming distance. % go ?=> N = 6, % length of the arrays A = new_list(N), A :: 0..1, B = new_list(N), B :: 0..1, Diffs :: 0..N, % The number of differences % Diffs #= 2, indomain(Diffs), A = [1,1,1,1,1,1], hamming_distance(A,B,Diffs), Vars = A ++ B ++ [Diffs], solve(Vars), writeln(diffs=Diffs), writeln(a=A), writeln(b=B),nl, fail. go => true. hamming_distance(As, Bs, Diffs) => Diffs #= sum([(A #!= B) : {A,B} in zip(As,Bs)]).