Sina Media Lab
commited on
Commit
·
62b8133
1
Parent(s):
26f260d
Updates
Browse files- modules/twos_complement.py +22 -9
- requirements.txt +2 -1
modules/twos_complement.py
CHANGED
@@ -1,20 +1,23 @@
|
|
1 |
-
|
|
|
2 |
|
3 |
title = "2's Complement Questions"
|
4 |
description = "This module explains the 2's complement method for representing negative numbers."
|
5 |
|
6 |
def generate_question():
|
7 |
-
import random
|
8 |
-
|
9 |
number = ''.join(random.choice('01') for _ in range(8))
|
10 |
|
11 |
def calculate_twos_complement(number):
|
12 |
-
|
13 |
ones_complement = ''.join('1' if bit == '0' else '0' for bit in number)
|
|
|
|
|
14 |
twos_complement = bin(int(ones_complement, 2) + 1)[2:]
|
15 |
-
|
|
|
|
|
16 |
|
17 |
-
correct_answer = calculate_twos_complement(number)
|
18 |
options = [correct_answer]
|
19 |
|
20 |
# Generate incorrect answers
|
@@ -26,12 +29,22 @@ def generate_question():
|
|
26 |
random.shuffle(options)
|
27 |
|
28 |
question = f"What is the 2's complement of the binary number {number}?"
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
30 |
step_by_step_solution = [
|
31 |
-
"Step 1:
|
32 |
-
"Step 2:
|
|
|
|
|
|
|
33 |
]
|
34 |
|
|
|
|
|
35 |
return {
|
36 |
"question": question,
|
37 |
"options": options,
|
|
|
1 |
+
import random
|
2 |
+
import sympy as sp
|
3 |
|
4 |
title = "2's Complement Questions"
|
5 |
description = "This module explains the 2's complement method for representing negative numbers."
|
6 |
|
7 |
def generate_question():
|
|
|
|
|
8 |
number = ''.join(random.choice('01') for _ in range(8))
|
9 |
|
10 |
def calculate_twos_complement(number):
|
11 |
+
# Calculate 1's complement
|
12 |
ones_complement = ''.join('1' if bit == '0' else '0' for bit in number)
|
13 |
+
|
14 |
+
# Calculate 2's complement
|
15 |
twos_complement = bin(int(ones_complement, 2) + 1)[2:]
|
16 |
+
twos_complement = twos_complement.zfill(len(number))
|
17 |
+
|
18 |
+
return ones_complement, twos_complement
|
19 |
|
20 |
+
ones_complement, correct_answer = calculate_twos_complement(number)
|
21 |
options = [correct_answer]
|
22 |
|
23 |
# Generate incorrect answers
|
|
|
29 |
random.shuffle(options)
|
30 |
|
31 |
question = f"What is the 2's complement of the binary number {number}?"
|
32 |
+
|
33 |
+
# Generate a step-by-step solution using SymPy
|
34 |
+
num_expr = sp.sympify(f'0b{number}')
|
35 |
+
ones_expr = sp.sympify(f'0b{ones_complement}')
|
36 |
+
twos_expr = ones_expr + 1
|
37 |
+
|
38 |
step_by_step_solution = [
|
39 |
+
f"Step 1: Start with the original binary number: {number}",
|
40 |
+
f"Step 2: Find the 1's complement by flipping all bits: {ones_complement}",
|
41 |
+
f"Step 3: Add 1 to the 1's complement:",
|
42 |
+
f" {ones_complement} + 1 = {bin(twos_expr)[2:].zfill(len(number))}",
|
43 |
+
f"Step 4: The 2's complement of {number} is {correct_answer}."
|
44 |
]
|
45 |
|
46 |
+
explanation = f"The 2's complement of {number} is {correct_answer}. It is calculated by inverting the bits and adding 1."
|
47 |
+
|
48 |
return {
|
49 |
"question": question,
|
50 |
"options": options,
|
requirements.txt
CHANGED
@@ -1,3 +1,4 @@
|
|
1 |
streamlit
|
2 |
huggingface_hub
|
3 |
-
fpdf
|
|
|
|
1 |
streamlit
|
2 |
huggingface_hub
|
3 |
+
fpdf
|
4 |
+
sympy
|