Sina Media Lab
commited on
Commit
·
3c35d02
1
Parent(s):
40d3dfc
Updates
Browse files
modules/counting/addition_bases.py
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
# modules/numbering_system/addition_bases.py
|
2 |
-
|
3 |
-
title = "Addition in Various Bases"
|
4 |
-
description = "This module covers addition operations in bases like binary, octal, and hexadecimal."
|
5 |
-
|
6 |
-
def generate_question():
|
7 |
-
import random
|
8 |
-
|
9 |
-
# Choose a base and corresponding valid digits
|
10 |
-
base = random.choice([2, 8, 16])
|
11 |
-
digits = '01' if base == 2 else '01234567' if base == 8 else '0123456789ABCDEF'
|
12 |
-
|
13 |
-
# Generate two valid numbers for the selected base
|
14 |
-
num1 = ''.join(random.choice(digits) for _ in range(3))
|
15 |
-
num2 = ''.join(random.choice(digits) for _ in range(3))
|
16 |
-
|
17 |
-
def add_numbers(num1, num2, base):
|
18 |
-
# Perform the addition in the correct base
|
19 |
-
return hex(int(num1, base) + int(num2, base))[2:].upper() if base == 16 else \
|
20 |
-
oct(int(num1, base) + int(num2, base))[2:] if base == 8 else \
|
21 |
-
bin(int(num1, base) + int(num2, base))[2:] if base == 2 else \
|
22 |
-
str(int(num1) + int(num2))
|
23 |
-
|
24 |
-
correct_answer = add_numbers(num1, num2, base)
|
25 |
-
options = [correct_answer]
|
26 |
-
|
27 |
-
# Generate incorrect answers
|
28 |
-
while len(options) < 4:
|
29 |
-
invalid_answer = ''.join(random.choice(digits) for _ in range(4))
|
30 |
-
if invalid_answer != correct_answer:
|
31 |
-
options.append(invalid_answer)
|
32 |
-
|
33 |
-
random.shuffle(options)
|
34 |
-
|
35 |
-
question = f"Add the numbers {num1} and {num2} in base {base}."
|
36 |
-
explanation = f"The sum of {num1} and {num2} in base {base} is {correct_answer}."
|
37 |
-
step_by_step_solution = [
|
38 |
-
f"Step 1: Convert the numbers {num1} and {num2} to base 10.",
|
39 |
-
"Step 2: Add the numbers in base 10.",
|
40 |
-
f"Step 3: Convert the sum back to base {base}."
|
41 |
-
]
|
42 |
-
|
43 |
-
return {
|
44 |
-
"question": question,
|
45 |
-
"options": options,
|
46 |
-
"correct_answer": correct_answer,
|
47 |
-
"explanation": explanation,
|
48 |
-
"step_by_step_solution": step_by_step_solution
|
49 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/counting/additive_multiplicative.py
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import random
|
2 |
+
import nltk
|
3 |
+
from nltk.corpus import words
|
4 |
+
from nltk.corpus import wordnet
|
5 |
+
|
6 |
+
# Ensure the NLTK word corpus is downloaded
|
7 |
+
nltk.download('words')
|
8 |
+
nltk.download('wordnet')
|
9 |
+
|
10 |
+
title = "Counting and Combinatorial Questions"
|
11 |
+
description = "This module covers basic counting principles, including additive and multiplicative principles in combinatorial problems."
|
12 |
+
|
13 |
+
def get_random_word(length=None):
|
14 |
+
"""Return a random word from the NLTK words corpus with an optional length."""
|
15 |
+
word_list = words.words()
|
16 |
+
if length:
|
17 |
+
word_list = [word for word in word_list if len(word) == length]
|
18 |
+
return random.choice(word_list).capitalize()
|
19 |
+
|
20 |
+
def get_synonym(word):
|
21 |
+
"""Return a random synonym for a word using WordNet."""
|
22 |
+
synonyms = wordnet.synsets(word)
|
23 |
+
if synonyms:
|
24 |
+
return random.choice(synonyms).lemmas()[0].name().capitalize()
|
25 |
+
return word.capitalize()
|
26 |
+
|
27 |
+
def generate_question():
|
28 |
+
question_type = random.choice(["vowels", "ties", "outfits", "combinations"])
|
29 |
+
|
30 |
+
if question_type == "vowels":
|
31 |
+
# Randomly generate two-letter words using vowels
|
32 |
+
vowel_count = random.randint(3, 5)
|
33 |
+
vowels = [get_random_word(1) for _ in range(vowel_count)]
|
34 |
+
num_two_letter_words = len(vowels) * 26
|
35 |
+
word_type = get_random_word(4)
|
36 |
+
question = f"How many two-letter {word_type}s can be formed if the first letter must be one of these {vowel_count} vowels: {', '.join(vowels)}?"
|
37 |
+
correct_answer = num_two_letter_words
|
38 |
+
explanation = f"There are {vowel_count} choices for the first letter (vowels) and 26 choices for the second letter (any letter). Thus, the total number of two-letter words is {vowel_count} * 26 = {num_two_letter_words}."
|
39 |
+
step_by_step_solution = [
|
40 |
+
f"Step 1: Identify the number of choices for the first letter ({vowel_count} vowels).",
|
41 |
+
"Step 2: Identify the number of choices for the second letter (any letter).",
|
42 |
+
f"Step 3: Multiply the two values: {vowel_count} * 26 = {num_two_letter_words}.",
|
43 |
+
f"Step 4: The total number of two-letter words is {num_two_letter_words}."
|
44 |
+
]
|
45 |
+
|
46 |
+
elif question_type == "ties":
|
47 |
+
# Randomly generate tie names
|
48 |
+
regular_ties = random.randint(5, 10)
|
49 |
+
bow_ties = random.randint(3, 7)
|
50 |
+
tie_name = get_random_word(3)
|
51 |
+
question = f"You own {regular_ties} {tie_name}s and {bow_ties} bow {tie_name}s. How many choices do you have for your neckwear?"
|
52 |
+
correct_answer = regular_ties + bow_ties
|
53 |
+
explanation = f"You have {regular_ties} choices for {tie_name}s and {bow_ties} choices for bow {tie_name}s. Since you can wear either type, you have {regular_ties} + {bow_ties} = {correct_answer} choices for neckwear."
|
54 |
+
step_by_step_solution = [
|
55 |
+
f"Step 1: Identify the number of {tie_name}s ({regular_ties}).",
|
56 |
+
f"Step 2: Identify the number of bow {tie_name}s ({bow_ties}).",
|
57 |
+
f"Step 3: Add the two values: {regular_ties} + {bow_ties} = {correct_answer}.",
|
58 |
+
f"Step 4: The total number of neckwear choices is {correct_answer}."
|
59 |
+
]
|
60 |
+
|
61 |
+
elif question_type == "outfits":
|
62 |
+
# Randomly generate clothing items
|
63 |
+
shirt_count = random.randint(4, 8)
|
64 |
+
skirt_count = random.randint(3, 6)
|
65 |
+
pants_count = random.randint(1, 4)
|
66 |
+
dress_count = random.randint(2, 5)
|
67 |
+
clothing_item = get_random_word(5)
|
68 |
+
question = (f"You have {shirt_count} {clothing_item}s, {skirt_count} skirts, {pants_count} pants, and {dress_count} dresses. "
|
69 |
+
"You want to select either a shirt to wear with a skirt or pants, or just a dress. How many outfits do you have to choose from?")
|
70 |
+
outfit_with_shirt = shirt_count * (skirt_count + pants_count)
|
71 |
+
correct_answer = outfit_with_shirt + dress_count
|
72 |
+
explanation = (f"You can choose a {clothing_item} ({shirt_count} options) with either a skirt ({skirt_count} options) or pants ({pants_count} options), "
|
73 |
+
f"giving {shirt_count} * ({skirt_count} + {pants_count}) = {outfit_with_shirt} outfits. "
|
74 |
+
f"Or you can choose a dress ({dress_count} options), so the total number of outfits is {outfit_with_shirt} + {dress_count} = {correct_answer}.")
|
75 |
+
step_by_step_solution = [
|
76 |
+
"Step 1: Calculate the number of outfits with a shirt and either a skirt or pants.",
|
77 |
+
f"Step 2: Multiply the number of {clothing_item}s ({shirt_count}) by the sum of skirts ({skirt_count}) and pants ({pants_count}): {shirt_count} * ({skirt_count} + {pants_count}) = {outfit_with_shirt}.",
|
78 |
+
f"Step 3: Add the number of dresses ({dress_count}): {outfit_with_shirt} + {dress_count} = {correct_answer}.",
|
79 |
+
f"Step 4: The total number of outfits is {correct_answer}."
|
80 |
+
]
|
81 |
+
|
82 |
+
elif question_type == "combinations":
|
83 |
+
# Randomly generate meal options
|
84 |
+
appetizers = random.randint(2, 5)
|
85 |
+
main_courses = random.randint(4, 7)
|
86 |
+
desserts = random.randint(3, 5)
|
87 |
+
drinks = random.randint(2, 4)
|
88 |
+
meal_item = get_random_word(4)
|
89 |
+
question = (f"A restaurant offers {appetizers} {meal_item}s, {main_courses} main courses, {desserts} desserts, and {drinks} types of drinks. "
|
90 |
+
"How many different meal combinations can you order if you choose one of each?")
|
91 |
+
correct_answer = appetizers * main_courses * desserts * drinks
|
92 |
+
explanation = (f"You have {appetizers} choices for an {meal_item}, {main_courses} choices for a main course, {desserts} choices for a dessert, "
|
93 |
+
f"and {drinks} choices for a drink. Multiplying these together gives the total number of meal combinations: "
|
94 |
+
f"{appetizers} * {main_courses} * {desserts} * {drinks} = {correct_answer}.")
|
95 |
+
step_by_step_solution = [
|
96 |
+
f"Step 1: Identify the number of choices for each part of the meal: {meal_item}s, main courses, desserts, and drinks.",
|
97 |
+
f"Step 2: Multiply the number of choices: {appetizers} * {main_courses} * {desserts} * {drinks} = {correct_answer}.",
|
98 |
+
f"Step 3: The total number of meal combinations is {correct_answer}."
|
99 |
+
]
|
100 |
+
|
101 |
+
options = [correct_answer]
|
102 |
+
|
103 |
+
# Generate incorrect answers ensuring they are unique and close to the correct answer
|
104 |
+
while len(options) < 4:
|
105 |
+
incorrect_answer = random.randint(correct_answer - random.randint(1, 10), correct_answer + random.randint(1, 10))
|
106 |
+
if incorrect_answer != correct_answer and incorrect_answer not in options:
|
107 |
+
options.append(incorrect_answer)
|
108 |
+
|
109 |
+
random.shuffle(options)
|
110 |
+
|
111 |
+
return {
|
112 |
+
"question": question,
|
113 |
+
"options": options,
|
114 |
+
"correct_answer": correct_answer,
|
115 |
+
"explanation": explanation,
|
116 |
+
"step_by_step_solution": step_by_step_solution
|
117 |
+
}
|
modules/number_system/{subtraction_bases.py → tmp/subtraction_bases.py}
RENAMED
File without changes
|
requirements.txt
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
streamlit
|
2 |
huggingface_hub
|
3 |
fpdf
|
4 |
-
sympy
|
|
|
|
1 |
streamlit
|
2 |
huggingface_hub
|
3 |
fpdf
|
4 |
+
sympy
|
5 |
+
nltk
|