""" 0461.1 - Hamming Distance - Solution 1 - XOR and Bit Count """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def hammingDistance(self, x: int, y: int) -> int:
"""Hamming Distance Function"""
return bin(x ^ y).count('1')
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().hammingDistance(1, 4)) # 2
print(Solution().hammingDistance(3, 1)) # 1
print(Solution().hammingDistance(0, 0)) # 0
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()
""" 0461.2 - Hamming Distance - Solution 2 - Brian Kernighan's Algorithm """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def hammingDistance(self, x: int, y: int) -> int:
"""Hamming Distance Function"""
xor = x ^ y
count = 0
while xor:
count += 1
xor &= xor - 1
return count
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().hammingDistance(1, 4)) # 2
print(Solution().hammingDistance(3, 1)) # 1
print(Solution().hammingDistance(0, 0)) # 0
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()