..

Spotify Reverse Binary Numbers Puzzle

This was my solution for the fun little puzzle from Spotify. The instructions were:

Your task will be to write a program for reversing numbers in binary. For instance, the binary representation of 13 is 1101, and reversing it gives 1011, which corresponds to number 11. Input The input contains a single line with an integer N, 1 ≤ N ≤ 1000000000. Output Output one line with one integer, the number we get by reversing the binary representation of N.

#!/usr/bin/env python
from __future__ import with_statement

import threading
import time
import sys



# Implementation of Ticker class
class Ticker(threading.Thread):
    def __init__(self, msg):
        threading.Thread.__init__(self)
        self.msg = msg
        self.event = threading.Event()
    def __enter__(self):
        self.start()
    def __exit__(self, ex_type, ex_value, ex_traceback):
        self.event.set()
        self.join()
    def run(self):
        sys.stdout.write(self.msg)
        while not self.event.isSet():
            sys.stdout.write(".")
            sys.stdout.flush()
            self.event.wait(1)

# Implementation of binary number
def get_binary_number(num):
	bin_num = ''
	reverse_bin_num = ''
	remainder = 0

	while(num > 0):
		remainder = num % 2
		num = num / 2
		bin_num += str(remainder)

	with Ticker("\nBinary Number"):
		time.sleep(2)
		sys.stdout.write(bin_num)
	reverse_bin_num = bin_num[::-1]
	with Ticker("\nReverse Binary Number"):
		time.sleep(2)
		sys.stdout.write(reverse_bin_num)
	return get_reverse_binary_number(reverse_bin_num)
	#return reverse_bin_num0

# Implementation of reverse binary number
def get_reverse_binary_number(reverse_bin_num):
		multiplier = 0
		number = 0

		for el in reverse_bin_num:
			number += int(el) * (2**multiplier)
			multiplier += 1
		return number

# Implementation of main
def main():
	bin = input("Enter a number: ")
	reversed = get_binary_number(bin)
	with Ticker("\nReverse Decimal"):
		time.sleep(2)
		sys.stdout.write(str(reversed))
		sys.stdout.write("\n")

if __name__ == '__main__':
	status = main()
	sys.exit(status)

Happy Coding,

-Korben