# The Hamming distance task solution

I was going through new interesting tasks on http://www.checkio.org/ and faced with bytes task about Hamming distance calculation. Here's some theory about this :

The Hamming distance between two binary integers is the number of bit positions that differs (http://en.wikipedia.org/wiki/Hamming_distance). For example:

117 = 0 1 1 1 0 1 0 1 17 = 0 0 0 1 0 0 0 1 H = 0+1+1+0+0+1+0+0 = 3

And the task was :

*Given two positive integers in decimal form. You should calculate the Hamming distance between these two numbers in binary form.*

I don't like tasks with bytes because i don't understand them fully:) So, i started googling and playing around with different solutions. In the end i got my code running and completing the task as it was required :

And then i got access to other people solutions. Well, it was very surprising and exciting to see this nice, clean and short solution for my problem:)

And then i got access to other people solutions. Well, it was very surprising and exciting to see this nice, clean and short solution for my problem:)

def checkio(data):Which, we all have to admit, is cool and looks really good. For the one who just start studying python here's some short description of how this cool algorithm works : According to python docs :

a, b = data

return str(bin(a^b)).count('1')

#These "asserts" using only for self-checking and not necessary for auto-testing

if __name__ == '__main__':

assert checkio([117, 17]) == 3, "First example"

assert checkio([1, 2]) == 2, "Second example"

assert checkio([16, 15]) == 5, "Third example"

Bitwise operator works on bits and perform bit by bit operation. Assume if a = 60; and b = 13; Now in binary format they will be as follows: a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011So,

- bin() - converts ints into bytes
- a^b - Binary XOR Operator copies the bit if it is set in one operand but not both
- .count("1") - counts how many 1 in result

Nice and easy:)

P.S. while i was googling about this convertation from int into bytes and back, i found useful python script which i used for my method :