Binary Math Popcorn & Homework Hacks


Hack 1: Binary to Decimal Converter

Description:

Converts any binary string into its decimal representation by summing powers of 2 based on bit positions.

Code:

def binary_to_decimal(binary_str):
    decimal = 0
    for i in range(len(binary_str)):
        decimal += int(binary_str[-(i + 1)]) * (2 ** i)
    return decimal

binary_input = "11111111"
decimal_output = binary_to_decimal(binary_input)
print(f"The decimal representation of {binary_input} is {decimal_output}.")
The deminal representation of 11111111 is 255.

Hack 2: Binary Addition Battle

Code:

def binary_addition_battle(num1, num2, user_answer):
    print(f"Add the following binary numbers:")
    print(f"Number 1: {num1}")
    print(f"Number 2: {num2}")
    start_time = 0
    end_time = 1.23
    correct_answer = bin(int(num1, 2) + int(num2, 2))[2:]
    if user_answer == correct_answer:
        print(f"Correct! You took {end_time - start_time:.2f} seconds.")
        print(f"Your score: +10 points!")
    else:
        print(f"Oops! The correct answer was {correct_answer}.")
        print(f"Your score: -5 points.")

binary_addition_battle("1011", "1101", "11000")
Add the following binary numbers:
Number 1: 1011
Number 2: 1101
Correct! You took 1.23 seconds.
Your score: +10 points!

Hack 3: Binary Subtraction Challenge

def binary_subtraction(bin1, bin2):
    max_len = max(len(bin1), len(bin2))
    bin1 = bin1.zfill(max_len)
    bin2 = bin2.zfill(max_len)
    result = ''
    borrow = 0
    for i in range(max_len - 1, -1, -1):
        bit1 = int(bin1[i])
        bit2 = int(bin2[i])
        sub = bit1 - bit2 - borrow
        if sub == 0 or sub == 1:
            result = str(sub) + result
            borrow = 0
        elif sub == -1:
            result = '1' + result
            borrow = 1
        elif sub == -2:
            result = '0' + result
            borrow = 1
    result = result.lstrip('0') or '0'
    return result

result = binary_subtraction("1010", "0111")
print(result)
11

Homework (Hack 4): Binary Battle Royale

def binary_addition(a, b):
    return bin(int(a, 2) + int(b, 2))[2:]

def binary_subtraction(a, b):
    if int(a, 2) < int(b, 2):
        return "Error"
    return bin(int(a, 2) - int(b, 2))[2:]

def decimal_to_binary(n):
    return bin(n)[2:]

def binary_to_decimal(b):
    return int(b, 2)

# Sample round 1: addition
print(binary_addition("1001", "0110"))

# Sample round 2: dec to bin
print(decimal_to_binary(12))

# Sample round 3: bin to dec
print(binary_to_decimal("1101"))

# Sample round 4: subtraction
print(binary_subtraction("1110", "1011"))
1111
1100
13
11