From 02ca66cf91d5ca7fd0b52555822f25c83107482e Mon Sep 17 00:00:00 2001 From: - Date: Thu, 15 Oct 2020 23:32:38 +0200 Subject: [PATCH 01/84] Prime Factorisation --- mathgenerator/mathgen.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e9987ad..03be158 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -216,6 +216,21 @@ def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" return problem, solution +def primeFactors(minVal=10, maxVal=999): + a = random.randint(minVal, maxVal) + i = 2 + factors = [] + while i*i <= a: + if a % i: + i += 1 + else: + a //= i + factors.append(i) + if a > 1: + factors.append(n) + problem = f"Find prime factors of {a}" + solution = f"{factors}" + return problem, solution # || Class Instances @@ -238,4 +253,5 @@ intDivision = Generator("Easy Division", 13,"a/b=","c",divisionToIntFunc) decimalToBinary = Generator("Decimal to Binary",14,"Binary of a=","b",DecimalToBinaryFunc) binaryToDecimal = Generator("Binary to Decimal",15,"Decimal of a=","b",BinaryToDecimalFunc) fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) -intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) \ No newline at end of file +intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) +primeFactors = Generator("Prime Factorisation", 18, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file From f38892bec78c33218b77508bb4d825dad9b1c88a Mon Sep 17 00:00:00 2001 From: - Date: Fri, 16 Oct 2020 10:14:21 +0200 Subject: [PATCH 02/84] Fixed undeclared variable --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 03be158..5926ba3 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -227,7 +227,7 @@ def primeFactors(minVal=10, maxVal=999): a //= i factors.append(i) if a > 1: - factors.append(n) + factors.append(a) problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution From f905903bd4d7d8bc32d64a8e50af70ed7fab780b Mon Sep 17 00:00:00 2001 From: Priyansh Anand Date: Fri, 16 Oct 2020 15:55:27 +0530 Subject: [PATCH 03/84] Allowed to pass arguments to the generator functions (optional) --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 9918cd0..88b05b9 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -15,8 +15,8 @@ class Generator: def __str__(self): return str(self.id) + " " + self.title + " " + self.generalProb + " " + self.generalSol - def __call__(self): - return self.func() + def __call__(self, **kwargs): + return self.func(**kwargs) # || Non-generator Functions def genById(id): From 209bfb7978ed37718a09d6f9c77e45f3a11d1a7d Mon Sep 17 00:00:00 2001 From: Priyansh Anand Date: Fri, 16 Oct 2020 15:57:23 +0530 Subject: [PATCH 04/84] Added linearEquations generator --- mathgenerator/mathgen.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 88b05b9..247fab8 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,6 +276,29 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution +def linearEquationsFunc(n = 2, varRange = 20, coeffRange = 20): + if n > 10: + print("[!] n cannot be greater than 10") + return None, None + + vars = ['x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g'][:n] + soln = [ random.randint(-varRange, varRange) for i in range(n) ] + + problem = list() + solution = ", ".join(["{} = {}".format(vars[i], soln[i]) for i in range(n)]) + for _ in range(n): + coeff = [ random.randint(-coeffRange, coeffRange) for i in range(n) ] + res = sum([ coeff[i] * soln[i] for i in range(n)]) + + prob = ["{}{}".format(coeff[i], vars[i]) if coeff[i] != 0 else "" for i in range(n)] + while "" in prob: + prob.remove("") + prob = " + ".join(prob) + " = " + str(res) + problem.append(prob) + + problem = "\n".join(problem) + return problem, solution + # || Class Instances #Format is: @@ -301,4 +324,5 @@ intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?","Yes/No", isTriangleValidFunc) midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) -factoring = Generator("Subtraction", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) \ No newline at end of file +factoring = Generator("Subtraction", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +linearEquations = Generator("Linear Equations", 22, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) \ No newline at end of file From 887cedda9f7d5cf8ce8292bdc44e5f2972165993 Mon Sep 17 00:00:00 2001 From: Ananya Kaushik Date: Fri, 16 Oct 2020 05:46:44 -0700 Subject: [PATCH 05/84] add Pythagorean theorem --- mathgenerator/mathgen.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 9918cd0..df35240 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,6 +276,14 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution +def pythagoreanTheoremFunc(maxLength = 20): + a = random.randint(1, maxLength) + b = random.randint(1, maxLength) + c = (a**2 + b**2)**0.5 + problem = f"The hypotenuse of a right triangle given the other two lengths {a} and {b} = " + solution = f"{c:.0f}" if c.is_integer() else f"{c:.2f}" + return problem, solution + # || Class Instances #Format is: @@ -301,4 +309,5 @@ intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?","Yes/No", isTriangleValidFunc) midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) -factoring = Generator("Subtraction", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) \ No newline at end of file +factoring = Generator("Subtraction", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +pythagoreanTheorem = Generator("Pythagorean Theorem", 22, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) \ No newline at end of file From 08b7c701d699ed80dda64eae92e2bd2a938d15ab Mon Sep 17 00:00:00 2001 From: - Date: Fri, 16 Oct 2020 16:11:45 +0200 Subject: [PATCH 06/84] Fixed error where the problem is adjusted in the algorithm --- mathgenerator/mathgen.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 5926ba3..0a92142 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -218,16 +218,17 @@ def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): def primeFactors(minVal=10, maxVal=999): a = random.randint(minVal, maxVal) + n = a i = 2 factors = [] - while i*i <= a: - if a % i: + while i * i <= n: + if n % i: i += 1 else: - a //= i + n //= i factors.append(i) - if a > 1: - factors.append(a) + if n > 1: + factors.append(n) problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution @@ -254,4 +255,7 @@ decimalToBinary = Generator("Decimal to Binary",14,"Binary of a=","b",DecimalToB binaryToDecimal = Generator("Binary to Decimal",15,"Decimal of a=","b",BinaryToDecimalFunc) fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) -primeFactors = Generator("Prime Factorisation", 18, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 18, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) + +for i in range(0, 10): + print(primeFactors()) \ No newline at end of file From 7e555f42fe522249de353bb24a67cd9bfe1d94c3 Mon Sep 17 00:00:00 2001 From: - Date: Fri, 16 Oct 2020 16:11:59 +0200 Subject: [PATCH 07/84] Adjusted difficulty --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0a92142..0eadbc9 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -216,7 +216,7 @@ def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" return problem, solution -def primeFactors(minVal=10, maxVal=999): +def primeFactors(minVal=1, maxVal=200): a = random.randint(minVal, maxVal) n = a i = 2 From bfb7e1ba7ac742abe2368cb87eb11e99d8865d8c Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 10:17:36 -0400 Subject: [PATCH 08/84] Fixed factoring name and added comment to 26 --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index d19199f..31047ef 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -395,10 +395,10 @@ intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?","Yes/No", isTriangleValidFunc) midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) -factoring = Generator("Subtraction", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) +linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y From 78d6bcc9b30866bfddb8e8a208c27c94aa3ef50e Mon Sep 17 00:00:00 2001 From: Rodolfo Nei Date: Fri, 16 Oct 2020 12:14:07 -0300 Subject: [PATCH 09/84] add the multiplication of fractions function --- mathgenerator/mathgen.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..35c3e28 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -387,6 +387,29 @@ def primeFactors(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution +def multiplyFractionsFunc(maxVal=10): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + c = random.randint(1, maxVal) + d = random.randint(1, maxVal) + while (a == b): + b = random.randint(1, maxVal) + while (c == d): + d = random.randint(1, maxVal) + def calculate_gcd(x, y): + while(y): + x, y = y, x % y + return x + tmp_n = a * c + tmp_d = b * d + gcd = calculate_gcd(tmp_n, tmp_d) + x = f"{tmp_n//gcd}/{tmp_d//gcd}" + if (tmp_d == 1 or tmp_d == gcd): + x = f"{tmp_n//gcd}" + problem = f"({a}/{b})*({c}/{d})" + solution = x + return problem, solution + # || Class Instances #Format is: @@ -419,4 +442,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) \ No newline at end of file From 7c352da6a272d6a6bf9d9936290c2890569af57d Mon Sep 17 00:00:00 2001 From: Yash Date: Fri, 16 Oct 2020 21:17:54 +0530 Subject: [PATCH 10/84] added function --- mathgenerator/mathgen.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..f63415b 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -387,6 +387,13 @@ def primeFactors(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution +def regularPolygonAngle(minVal = 3,maxVal = 20): + sideNum = random.randint(minVal, maxVal) + problem = f"Find the angle of a regular polygon with {sideNum} sides" + exteriorAngle = (360/sideNum) + solution = 180 - exteriorAngle + return problem, solution + # || Class Instances #Format is: From 8a9912e40a6183e64714b02f6b3dd701ab179975 Mon Sep 17 00:00:00 2001 From: Yash Date: Fri, 16 Oct 2020 21:21:59 +0530 Subject: [PATCH 11/84] added class instance --- mathgenerator/mathgen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index f63415b..87864c0 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -426,4 +426,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +angleRegularPolygon = Generator("Angle of a Regular Polygon",28,"Find the angle of a regular polygon with 6 sides",120,regularPolygonAngle) \ No newline at end of file From 4b3874cc74003e42e9652dfc4fde5194e2357efb Mon Sep 17 00:00:00 2001 From: Yash Date: Fri, 16 Oct 2020 21:28:54 +0530 Subject: [PATCH 12/84] Rounded to 2 decimal places --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 87864c0..a29b443 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -390,7 +390,7 @@ def primeFactors(minVal=1, maxVal=200): def regularPolygonAngle(minVal = 3,maxVal = 20): sideNum = random.randint(minVal, maxVal) problem = f"Find the angle of a regular polygon with {sideNum} sides" - exteriorAngle = (360/sideNum) + exteriorAngle = round((360/sideNum),2) solution = 180 - exteriorAngle return problem, solution From de2bf981b59d2298d824d6045a2eb73c3c567f5a Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Fri, 16 Oct 2020 21:48:41 +0530 Subject: [PATCH 13/84] Update mathgen.py Adding a function for getting factorial of a random integer. --- mathgenerator/mathgen.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..fe0db39 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -386,6 +386,16 @@ def primeFactors(minVal=1, maxVal=200): problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution +def factorial(maxlength=10): + a=random.randint(0,maxlength) + + d=1 + problem=a + for i in range(a): + a=(i+1)*d + d=a + solution=d + return " The Factorial for {} is {} ".format(problem, solution) # || Class Instances @@ -419,4 +429,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +factorials = Generator("Factorials", 28, "Factorial of a = ", "xyz", factorial) From 4e80e009209d02b5c78cc5ddbb2933a7e41bbbea Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Fri, 16 Oct 2020 22:28:04 +0530 Subject: [PATCH 14/84] Update mathgen.py Request for adding combinations function to the generator. --- mathgenerator/mathgen.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..1f24f7e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -386,6 +386,19 @@ def primeFactors(minVal=1, maxVal=200): problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution +def combination(maxlength=20): + def factorial(a): + d=1 + for i in range(a): + a=(i+1)*d + d=a + return d + a= random.randint(10,maxlength) + b=random.randint(0,9) + solution= int(factorial(a)/(factorial(b)*factorial(a-b))) + problem= "Number of combinations from {} objects picked {} at a time ".format(a,b) + + return problem, solution # || Class Instances @@ -419,4 +432,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +combinations=Generator("Combinations of Objects",28, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinations) From 358a676dba20345dff3eda4bc5faf066aad500e7 Mon Sep 17 00:00:00 2001 From: adityapanchal10 Date: Fri, 16 Oct 2020 22:37:17 +0530 Subject: [PATCH 15/84] added factorial function --- mathgenerator/mathgen.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..7b648f4 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -387,6 +387,21 @@ def primeFactors(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution +def factorialFunc(maxInput = 6): + a = random.randint(0, maxInput) + n = a + problem = str(a) + "! = " + b = 1 + if a == 1: + solution = str(b) + return problem, solution + else: + while n > 0: + b *= n + n = n - 1 + solution = str(b) + return problem, solution + # || Class Instances #Format is: @@ -419,4 +434,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +factorial = Generator("Factorial", 28, "a! = ", "b", factorialFunc) \ No newline at end of file From 5c79fef2fbcf711817a911a58a0f29c85a692386 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 13:17:01 -0400 Subject: [PATCH 16/84] Update mathgen.py --- mathgenerator/mathgen.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1f24f7e..24eb9bc 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -386,7 +386,8 @@ def primeFactors(minVal=1, maxVal=200): problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution -def combination(maxlength=20): + +def combinationsFunc(maxlength=20): def factorial(a): d=1 for i in range(a): @@ -433,4 +434,4 @@ distance2Point = Generator("Distance between 2 points", 24, "Find the distance b pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) -combinations=Generator("Combinations of Objects",28, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinations) +combinations = Generator("Combinations of Objects",28, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) From 8045ee376a3b5ddbd4102a972262eebc8fa068c0 Mon Sep 17 00:00:00 2001 From: Deepak Sharma Date: Fri, 16 Oct 2020 22:47:02 +0530 Subject: [PATCH 17/84] Adding a new math function commonFactors --- mathgenerator/mathgen.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..d725d5e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -387,6 +387,26 @@ def primeFactors(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution +def commonFactors(maxVal=100): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + c = a * b + if (x < y): + min = x + else: + min = y + count = 0 + arr = [] + for i in range(1, min + 1): + if (x % i == 0): + if (y % i == 0): + count = count + 1 + arr.append(i) + problem = f"Common Factors of {a} and {b} = " + solution = arr + return problem, solution + # || Class Instances #Format is: @@ -419,4 +439,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +commonFactors = Generator("Common Factors", 28, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactors) \ No newline at end of file From 81602ca484e0d94ace5c967260dbaac1b545e912 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 13:21:03 -0400 Subject: [PATCH 18/84] Update mathgen.py --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 600311e..fbaf400 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -483,4 +483,4 @@ primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle of a regular polygon with 6 sides","120",regularPolygonAngleFunc) combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) -factorial = Generator("Factorial", 28, "a! = ", "b", factorialFunc) +factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) From 09f66b3d12ce6333fd9e1a28d4c4b009558f3c14 Mon Sep 17 00:00:00 2001 From: Deepak Sharma Date: Fri, 16 Oct 2020 22:47:02 +0530 Subject: [PATCH 19/84] Adding a new math function commonFactors --- mathgenerator/mathgen.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..d725d5e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -387,6 +387,26 @@ def primeFactors(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution +def commonFactors(maxVal=100): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + c = a * b + if (x < y): + min = x + else: + min = y + count = 0 + arr = [] + for i in range(1, min + 1): + if (x % i == 0): + if (y % i == 0): + count = count + 1 + arr.append(i) + problem = f"Common Factors of {a} and {b} = " + solution = arr + return problem, solution + # || Class Instances #Format is: @@ -419,4 +439,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +commonFactors = Generator("Common Factors", 28, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactors) \ No newline at end of file From 7f66db8e3f67f57b6089dc1b61d904f80ee48a61 Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Fri, 16 Oct 2020 23:17:27 +0530 Subject: [PATCH 20/84] Update mathgen.py Number of Permutations. --- mathgenerator/mathgen.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..6d39a65 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -386,6 +386,18 @@ def primeFactors(minVal=1, maxVal=200): problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution +def permutationFunc(maxlength=20): + def factorial(a): + d=1 + for i in range(a): + a=(i+1)*d + d=a + return d + a= random.randint(10,maxlength) + b=random.randint(0,9) + solution= int(factorial(a)/(factorial(a-b))) + problem= "Number of combinations from {} objects picked {} at a time = ".format(a,b) + return problem, solution # || Class Instances @@ -419,4 +431,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +permutations= Generator("Permutations",28, "Total permutations of 4 objects at a time from 10 objects is","5040", permutationFunc) From 1f8d7e5077f7d153b81aafa4c9eaa44ecbe27fec Mon Sep 17 00:00:00 2001 From: ieshaan12 Date: Fri, 16 Oct 2020 23:39:45 +0530 Subject: [PATCH 21/84] Added volume and surface area functions --- mathgenerator/mathgen.py | 75 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index fbaf400..2bee2c8 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,4 +1,5 @@ import random +import math genList = [] @@ -447,6 +448,72 @@ def factorialFunc(maxInput = 6): solution = str(b) return problem, solution +def surfaceAreaCube(maxSide = 20, unit = 'm'): + a = random.randint(1, maxSide) + problem = f"Surface area of cube with side = {a}{unit} is" + ans = 6 * a * a + solution = f"{ans} {unit}^2" + return problem, solution + +def volumeCube(maxSide = 20, unit = 'm'): + a = random.randint(1, maxSide) + problem = f"Volume of cube with side = {a}{unit} is" + ans = a * a * a + solution = f"{ans} {unit}^3" + return problem, solution + +def surfaceAreaCuboid(maxSide = 20, unit = 'm'): + a = random.randint(1, maxSide) + b = random.randint(1, maxSide) + c = random.randint(1, maxSide) + + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" + ans = 2 * (a*b + b*c + c*a) + solution = f"{ans} {unit}^2" + return problem, solution + +def volumeCuboid(maxSide = 20, unit = 'm'): + a = random.randint(1, maxSide) + b = random.randint(1, maxSide) + c = random.randint(1, maxSide) + problem = f"Volume of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" + ans = a * b * c + solution = f"{ans} {unit}^3" + return problem, solution + +def surfaceAreaCylinder(maxRadius = 20, maxHeight = 50,unit = 'm'): + a = random.randint(1, maxHeight) + b = random.randint(1, maxRadius) + problem = f"Surface area of cylinder with height = {a}{unit} and radius = {b}{unit} is" + ans = int(2 * math.pi * a * b + 2 * math.pi * b * b) + solution = f"{ans} {unit}^2" + return problem, solution + +def volumeCylinder(maxRadius = 20, maxHeight = 50, unit = 'm'): + a = random.randint(1, maxHeight) + b = random.randint(1, maxRadius) + problem = f"Volume of cylinder with height = {a}{unit} and radius = {b}{unit} is" + ans = int(math.pi * b * b * a) + solution = f"{ans} {unit}^3" + return problem, solution + +def surfaceAreaCone(maxRadius = 20, maxHeight = 50,unit = 'm'): + a = random.randint(1, maxHeight) + b = random.randint(1, maxRadius) + slopingHeight = math.sqrt(a**2 + b**2) + problem = f"Surface area of cone with height = {a}{unit} and radius = {b}{unit} is" + ans = int(math.pi * b * slopingHeight + math.pi * b * b) + solution = f"{ans} {unit}^2" + return problem, solution + +def volumeCone(maxRadius = 20, maxHeight = 50, unit = 'm'): + a = random.randint(1, maxHeight) + b = random.randint(1, maxRadius) + problem = f"Volume of cone with height = {a}{unit} and radius = {b}{unit} is" + ans = int(math.pi * b * b * a * (1/3)) + solution = f"{ans} {unit}^3" + return problem, solution + # || Class Instances #Format is: @@ -484,3 +551,11 @@ fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=" angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle of a regular polygon with 6 sides","120",regularPolygonAngleFunc) combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) +surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is","b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is","d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is","c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) +volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is","d units^3", volumeCuboid) +volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is","c units^3", volumeCylinder) +surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) +volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) From d3ebe8e5fb01015d27b5076a1430b872c779c6b0 Mon Sep 17 00:00:00 2001 From: Akash Saravanan Date: Fri, 16 Oct 2020 23:48:19 +0530 Subject: [PATCH 22/84] Add intersection of two lines. --- mathgenerator/mathgen.py | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index bd22657..a85d7c3 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,4 +1,5 @@ import random +import fractions genList = [] @@ -464,6 +465,60 @@ def commonFactorsFunc(maxVal=100): problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution + +def intersectionOfTwoLinesFunc( + minM=-10, maxM=10, minB=-10, maxB=10, minDenominator=1, maxDenominator=6 +): + def generateEquationString(m, b): + """ + Generates an equation given the slope and intercept. + It handles cases where m is fractional. + It also ensures that we don't have weird signs such as y = mx + -b. + """ + if m[1] == 1: + m = m[0] + else: + m = f"{m[0]}/{m[1]}" + base = f"y = {m}x" + if b > 0: + return f"{base} + {b}" + elif b < 0: + return f"{base} - {b * -1}" + else: + return base + + def fractionToString(x): + """ + Converts the given fractions.Fraction into a string. + """ + if x.denominator == 1: + x = x.numerator + else: + x = f"{x.numerator}/{x.denominator}" + return x + + m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + b1 = random.randint(minB, maxB) + b2 = random.randint(minB, maxB) + equation1 = generateEquationString(m1, b1) + equation2 = generateEquationString(m2, b2) + problem = "Find the point of intersection of the two lines: " + problem += f"{equation1} and {equation2}" + m1 = fractions.Fraction(*m1) + m2 = fractions.Fraction(*m2) + # if m1 == m2 then the slopes are equal + # This can happen if both line are the same + # Or if they are parallel + # In either case there is no intersection + if m1 == m2: + solution = "No Solution" + else: + intersection_x = (b1 - b2) / (m2 - m1) + intersection_y = ((m2 * b1) - (m1 * b2)) / (m2 - m1) + solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" + return problem, solution + # || Class Instances #Format is: @@ -502,3 +557,4 @@ angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) commonFactors = Generator("Common Factors", 32, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) +intersectionOfTwoLines = Generator("Intersection of Two Lines", 33, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) From fcc3d4d9b637e56fec7ed877b67d563cb7c07f80 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 14:20:01 -0400 Subject: [PATCH 23/84] Added genById Documentation --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8ac09dd..45ffcec 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ from mathgenerator import mathgen #generate an addition problem problem, solution = mathgen.addition() + +#another way to generate an addition problem using genById() +problem, solution = mathgen.genById(0) ``` ## List of Generators From 3430dfeac665d86b553cc6b75edd69a75cff5a36 Mon Sep 17 00:00:00 2001 From: Akash Saravanan Date: Fri, 16 Oct 2020 23:48:19 +0530 Subject: [PATCH 24/84] Add intersection of two lines. --- mathgenerator/mathgen.py | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 917fccc..1b900ad 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,5 +1,9 @@ import random +<<<<<<< HEAD import math +======= +import fractions +>>>>>>> Add intersection of two lines. genList = [] @@ -531,6 +535,60 @@ def commonFactorsFunc(maxVal=100): problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution + +def intersectionOfTwoLinesFunc( + minM=-10, maxM=10, minB=-10, maxB=10, minDenominator=1, maxDenominator=6 +): + def generateEquationString(m, b): + """ + Generates an equation given the slope and intercept. + It handles cases where m is fractional. + It also ensures that we don't have weird signs such as y = mx + -b. + """ + if m[1] == 1: + m = m[0] + else: + m = f"{m[0]}/{m[1]}" + base = f"y = {m}x" + if b > 0: + return f"{base} + {b}" + elif b < 0: + return f"{base} - {b * -1}" + else: + return base + + def fractionToString(x): + """ + Converts the given fractions.Fraction into a string. + """ + if x.denominator == 1: + x = x.numerator + else: + x = f"{x.numerator}/{x.denominator}" + return x + + m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + b1 = random.randint(minB, maxB) + b2 = random.randint(minB, maxB) + equation1 = generateEquationString(m1, b1) + equation2 = generateEquationString(m2, b2) + problem = "Find the point of intersection of the two lines: " + problem += f"{equation1} and {equation2}" + m1 = fractions.Fraction(*m1) + m2 = fractions.Fraction(*m2) + # if m1 == m2 then the slopes are equal + # This can happen if both line are the same + # Or if they are parallel + # In either case there is no intersection + if m1 == m2: + solution = "No Solution" + else: + intersection_x = (b1 - b2) / (m2 - m1) + intersection_y = ((m2 * b1) - (m1 * b2)) / (m2 - m1) + solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" + return problem, solution + # || Class Instances #Format is: From bac53548085b8fac4375ca93fb614f74489eaa5c Mon Sep 17 00:00:00 2001 From: Shiven Tripathi <58358532+ShivenTripathi@users.noreply.github.com> Date: Fri, 16 Oct 2020 23:56:22 +0530 Subject: [PATCH 25/84] add problem to find roots of quadratic equation --- mathgenerator/mathgen.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 917fccc..90cd1ac 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -531,6 +531,15 @@ def commonFactorsFunc(maxVal=100): problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution + +def quadraticEquation(maxVal=100): + a = random.randint(1,maxVal) + c = random.randint(1,maxVal) + b = random.randint(4*a*c,4*maxVal*maxVal) + + problem = "Zeros of the Quadratic Equation {a}x^2+{b}x+{c}=0".format(a,b,c) + solution = str[(-b+sqrt(b^2-4*a*c))/2*a,(-b-sqrt(b^2-4*a*c))/2*a] + return problem,solution # || Class Instances #Format is: @@ -577,3 +586,4 @@ volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) +quadraticEquationSolve = Generator("Quadratic Equation", 41, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) From e2dddff7ece1dd12d7d1668dacc9406488ea3709 Mon Sep 17 00:00:00 2001 From: Akash Saravanan Date: Fri, 16 Oct 2020 23:58:34 +0530 Subject: [PATCH 26/84] fix numbering of generators --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 5575303..4403964 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -640,4 +640,4 @@ volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) -intersectionOfTwoLines = Generator("Intersection of Two Lines", 33, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) From ce3ec7a3a33bd132882c11bddd1cbd881d1b9447 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 14:30:09 -0400 Subject: [PATCH 27/84] Update mathgen.py --- mathgenerator/mathgen.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 4403964..64e935f 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,13 +1,6 @@ import random -<<<<<<< HEAD -<<<<<<< HEAD import math -======= import fractions ->>>>>>> Add intersection of two lines. -======= -import fractions ->>>>>>> d3ebe8e5fb01015d27b5076a1430b872c779c6b0 genList = [] From 9890ae0edf7ff329e3f1c73171304f8f954a7504 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 14:30:56 -0400 Subject: [PATCH 28/84] Update mathgen.py --- mathgenerator/mathgen.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 64e935f..940dd90 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -623,7 +623,6 @@ fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=" angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle of a regular polygon with 6 sides","120",regularPolygonAngleFunc) combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -<<<<<<< HEAD surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is","b units^2", surfaceAreaCube) surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is","d units^2", surfaceAreaCuboid) surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is","c units^2", surfaceAreaCylinder) From 0f74e3cf73c4bcc9146e7d6ffc4ca93e2011d269 Mon Sep 17 00:00:00 2001 From: Daniel Sorensen Date: Fri, 16 Oct 2020 19:49:46 +0100 Subject: [PATCH 29/84] Add Vector Cross Product --- mathgenerator/mathgen.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 16f7537..dd79403 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -387,6 +387,14 @@ def primeFactors(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution +def vectorCrossFunc(minVal=-20, maxVal=20): + a = [random.randint(minVal, maxVal) for i in range(3)] + b = [random.randint(minVal, maxVal) for i in range(3)] + c = [a[1]*b[2] - a[2]*b[1], + a[2]*b[0] - a[0]*b[2], + a[0]*b[1] - a[1]*b[0]] + return str(a) + " X " + str(b) + " = ", str(c) + # || Class Instances #Format is: @@ -419,4 +427,5 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) \ No newline at end of file +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) +vectorCross = Generator("Cross Product of 2 Vectors", 28, "a X b = ", "c", vectorCrossFunc) From feac32ca70209c6a51693c7dc3760a226ffd621d Mon Sep 17 00:00:00 2001 From: Dark Prince Date: Sat, 17 Oct 2020 00:30:10 +0530 Subject: [PATCH 30/84] Added Compare Fractions Generator --- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 164 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 0 -> 19103 bytes mathgenerator/mathgen.py | 26 ++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc create mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..893336fc37f23c5d8be2b5e049b532e5ed6e2ea6 GIT binary patch literal 164 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 literal 0 HcmV?d00001 diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index bd22657..6f6a5fe 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -464,6 +464,31 @@ def commonFactorsFunc(maxVal=100): problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution +def compareFractionsFunc(maxVal=10): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + c = random.randint(1, maxVal) + d = random.randint(1, maxVal) + + while (a == b): + b = random.randint(1, maxVal) + while (c == d): + d = random.randint(1, maxVal) + + first=a/b + second=c/d + + if(first>second): + solution=">" + elif(first/ Date: Sat, 17 Oct 2020 00:54:33 +0530 Subject: [PATCH 31/84] Added a generator for Simple Intereset --- mathgenerator/mathgen.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 940dd90..bb11dd4 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -586,6 +586,15 @@ def intersectionOfTwoLinesFunc( solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" return problem, solution +def simpleInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10): + a = random.randint(1000, maxPrinciple) + b = random.randint(1, maxRate) + c = random.randint(1, maxTime) + d = (a*b*c)/100 + problem = "Simple interest for a principle amount of " + str(a) +" dollars, " + str(b) + "%% rate of interest and for a time period of " + str(c) + " years is = " + solution = round(d, 2) + return problem, solution + # || Class Instances #Format is: @@ -633,3 +642,4 @@ surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +simpleInterest = Generator("Simple Interest", 42, "Simple interest for a principle amount of a dollars, b%% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) \ No newline at end of file From 0743b1bef713bdd083c685afa647467659c3724c Mon Sep 17 00:00:00 2001 From: YuvalG Date: Fri, 16 Oct 2020 22:42:54 +0300 Subject: [PATCH 32/84] Adding pytest and tests GitHubAction --- .github/workflows/tests.yaml | 21 ++++++ .gitignore | 138 +++++++++++++++++++++++++++++++++++ Makefile | 2 + dev-requirements.txt | 2 + tests/test_mathgen.py | 46 ++++++++++++ 5 files changed, 209 insertions(+) create mode 100644 .github/workflows/tests.yaml create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 dev-requirements.txt create mode 100644 tests/test_mathgen.py diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..3252576 --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,21 @@ +name: Run tests + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install -U pip + python -m pip install -r dev-requirements.txt + - name: Test + run: make test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c42af8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,138 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dbf1f17 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +test: + python -m pytest --verbose -s tests diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 0000000..a965899 --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,2 @@ +pytest +hypothesis \ No newline at end of file diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py new file mode 100644 index 0000000..ace72a5 --- /dev/null +++ b/tests/test_mathgen.py @@ -0,0 +1,46 @@ +from math import sqrt +from mathgenerator.mathgen import * + +from hypothesis import strategies as st, given, assume + + +@given(maxSum=st.integers(min_value=1), maxAddend=st.integers(min_value=1)) +def test_additionFunc(maxSum, maxAddend): + assume(maxSum > maxAddend) + problem, solution = additionFunc(maxSum, maxAddend) + assert eval(problem[:-1]) == int(solution) + + +@given(maxMinuend=st.integers(min_value=1), maxDiff=st.integers(min_value=1)) +def test_subtractionFunc(maxMinuend, maxDiff): + assume(maxMinuend > maxDiff) + problem, solution = subtractionFunc(maxMinuend, maxDiff) + assert eval(problem[:-1]) == int(solution) + + +@given(maxRes=st.integers(min_value=1), maxMulti=st.integers(min_value=1)) +def test_multiplicationFunc(maxRes, maxMulti): + assume(maxRes > maxMulti) + problem, solution = multiplicationFunc(maxRes, maxMulti) + assert eval(problem[:-1]) == int(solution) + + +@given(maxRes=st.integers(min_value=1), maxDivid=st.integers(min_value=1)) +def test_divisionFunc(maxRes, maxDivid): + assume(maxRes > maxDivid) + problem, solution = divisionFunc(maxRes, maxDivid) + assert eval(problem[:-1]) == float(solution) + + +@given(maxRes=st.integers(min_value=1), maxModulo=st.integers(min_value=1)) +def test_moduloFunc(maxRes, maxModulo): + assume(maxRes > maxModulo) + problem, solution = moduloFunc(maxRes, maxModulo) + assert eval(problem[:-1]) == int(solution) + + +@given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) +def test_squareRootFunc(minNo, maxNo): + assume(maxNo > minNo) + problem, solution = squareRootFunc(minNo, maxNo) + assert eval(problem[:-1]) == float(solution) From 35d90136e4134e01548c594ee789dbac125e56cd Mon Sep 17 00:00:00 2001 From: shyambhu Date: Sat, 17 Oct 2020 01:23:45 +0530 Subject: [PATCH 33/84] added cube root function. --- mathgenerator/mathgen.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 940dd90..0b15947 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -89,6 +89,13 @@ def squareRootFunc(minNo = 1, maxNo = 12): solution = str(b) return problem, solution +def cubeRootFunc(minNo = 1, maxNo = 1000): + b = random.randint(minNo, maxNo) + a = b**(1/3) + problem = "cuberoot of " + str(b) + " upto 2 decimal places is:" + solution = str(round(a,2)) + return problem, solution + def powerRuleDifferentiationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): numTerms = random.randint(1, maxTerms) problem = "" @@ -633,3 +640,4 @@ surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +CubeRoot = Generator("Cube Root",42,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) \ No newline at end of file From f4aa55385863f58252a1a0bfc4f8b42d1eed2361 Mon Sep 17 00:00:00 2001 From: shyambhu Date: Sat, 17 Oct 2020 01:38:43 +0530 Subject: [PATCH 34/84] added power rule integration function. --- mathgenerator/mathgen.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0b15947..5a141af 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -110,6 +110,21 @@ def powerRuleDifferentiationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): solution += str(coefficient * exponent) + "x^" + str(exponent - 1) return problem, solution +def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): + numTerms = random.randint(1, maxTerms) + problem = "" + solution = "" + for i in range(numTerms): + if i > 0: + problem += " + " + solution += " + " + coefficient = random.randint(1, maxCoef) + exponent = random.randint(1, maxExp) + problem += str(coefficient) + "x^" + str(exponent) + solution += "("+str(coefficient) +"/"+str(exponent) +")x^" + str(exponent +1) + solution = solution + " + c" + return problem, solution + def squareFunc(maxSquareNum = 20): a = random.randint(1, maxSquareNum) b = a * a From 3b2f707f2e1cfc95581f300c57a012b52025927c Mon Sep 17 00:00:00 2001 From: shyambhu Date: Sat, 17 Oct 2020 01:43:12 +0530 Subject: [PATCH 35/84] corrected integration. --- mathgenerator/mathgen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 5a141af..cf661d8 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -655,4 +655,5 @@ surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -CubeRoot = Generator("Cube Root",42,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) \ No newline at end of file +CubeRoot = Generator("Cube Root",42,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) +powerRuleIntegration = Generator("Power Rule Integration", 43, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) \ No newline at end of file From b6c35922f49d7cce48aac06cd8fd4d5d22add3ee Mon Sep 17 00:00:00 2001 From: shyambhu Date: Sat, 17 Oct 2020 02:13:16 +0530 Subject: [PATCH 36/84] added fourth angle of quadrilateral function. --- mathgenerator/mathgen.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index cf661d8..87567d5 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -308,6 +308,16 @@ def thirdAngleOfTriangleFunc(maxAngle=89): solution = angle3 return problem, solution +def fourthAngleOfQuadriFunc(maxAngle = 180): + angle1 = random.randint(1, maxAngle) + angle2 = random.randint(1, 240-angle1) + angle3 = random.randint(1, 340-(angle1 + angle2)) + sum_ = angle1 + angle2 + angle3 + angle4 = 360 - sum_ + problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" + solution = angle4 + return problem, solution + def systemOfEquationsFunc(range_x = 10, range_y = 10, coeff_mult_range=10): # Generate solution point first x = random.randint(-range_x, range_x) @@ -656,4 +666,5 @@ volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) CubeRoot = Generator("Cube Root",42,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) -powerRuleIntegration = Generator("Power Rule Integration", 43, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) \ No newline at end of file +powerRuleIntegration = Generator("Power Rule Integration", 43, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",44,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) \ No newline at end of file From 7b05df8f17a4b9354c4fb38767f55534407e7b22 Mon Sep 17 00:00:00 2001 From: gitarthasarma <61044554+gitarthasarma@users.noreply.github.com> Date: Sat, 17 Oct 2020 02:33:21 +0530 Subject: [PATCH 37/84] added matrix multiplication function --- mathgenerator/mathgen.py | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index bd22657..35ff5d3 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -464,6 +464,49 @@ def commonFactorsFunc(maxVal=100): problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution + +def matrixMultiplicationFunc(maxVal=100): + m= random.randint(2, 10) + n= random.randint(2, 10) + k= random.randint(2, 10) + #generate matrices a and b + a=[] + for r in range(m): + a.append([]) + for c in range(n): + a[r].append(random.randint(-maxVal,maxVal)) + + b=[] + for r in range(n): + b.append([]) + for c in range(k): + b[r].append(random.randint(-maxVal, maxVal)) + + res= [] + a_string= matrixMultiplicationFuncHelper(a) + b_string= matrixMultiplicationFuncHelper(b) + + for r in range(m): + res.append([]) + for c in range(k): + temp= 0 + for t in range(n): + temp+=a[r][t]*b[t][c] + res[r].append(temp) + problem= f"Multiply \n{a_string}\n and \n\n{b_string}" + solution= matrixMultiplicationFuncHelper(res) + return problem, solution + +def matrixMultiplicationFuncHelper(inp): + m= len(inp) + n= len(inp[0]) + string= "" + for i in range(m): + for j in range(n): + string+=f"{inp[i][j]: 6d}" + string+=" " + string+="\n" + return string # || Class Instances #Format is: @@ -502,3 +545,4 @@ angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) commonFactors = Generator("Common Factors", 32, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) +matrixMultiplication = Generator("Multiplication of two matrices", 33, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) \ No newline at end of file From 3017f8255143001e72c3c97af0170a3f29c49bfe Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 18:04:06 -0400 Subject: [PATCH 38/84] Update mathgen.py --- mathgenerator/mathgen.py | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 62a067f..4250fdb 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -389,20 +389,6 @@ def primeFactorsFunc(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution - -def permutationFunc(maxlength=20): - def factorial(a): - d=1 - for i in range(a): - a=(i+1)*d - d=a - return d - a= random.randint(10,maxlength) - b=random.randint(0,9) - solution= int(factorial(a)/(factorial(a-b)) - problem= "Number of Permutations from {} objects picked {} at a time = ".format(a,b) - return problem, solution - def multiplyFractionsFunc(maxVal=10): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -604,6 +590,12 @@ def intersectionOfTwoLinesFunc( solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" return problem, solution +def permutationFunc(maxlength=20): + a = random.randint(10,maxlength) + b = random.randint(0,9) + solution= int(math.factorial(a)/(math.factorial(a-b))) + problem= "Number of Permutations from {} objects picked {} at a time = ".format(a,b) + return problem, solution # || Class Instances @@ -637,12 +629,6 @@ systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y - -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactors) - -permutations= Generator("Permutations",28, "Total permutations of 4 objects at a time from 10 objects is","5040", permutationFunc) - -======= primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle of a regular polygon with 6 sides","120",regularPolygonAngleFunc) @@ -658,4 +644,4 @@ surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) - +permutations= Generator("Permutations",42, "Total permutations of 4 objects at a time from 10 objects is","5040", permutationFunc) From 728f29feca252eb2fc2d7a145cfb7330bffc90c1 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 19:19:37 -0400 Subject: [PATCH 39/84] Removed second % symbol in problem --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index bb11dd4..0a97832 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -591,7 +591,7 @@ def simpleInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10): b = random.randint(1, maxRate) c = random.randint(1, maxTime) d = (a*b*c)/100 - problem = "Simple interest for a principle amount of " + str(a) +" dollars, " + str(b) + "%% rate of interest and for a time period of " + str(c) + " years is = " + problem = "Simple interest for a principle amount of " + str(a) +" dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " solution = round(d, 2) return problem, solution @@ -642,4 +642,4 @@ surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -simpleInterest = Generator("Simple Interest", 42, "Simple interest for a principle amount of a dollars, b%% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) \ No newline at end of file +simpleInterest = Generator("Simple Interest", 42, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) From 61ba85f4b0fcca1872843f90f1b45f2cfa08ad5b Mon Sep 17 00:00:00 2001 From: lukew3 Date: Fri, 16 Oct 2020 20:53:33 -0400 Subject: [PATCH 40/84] makeReadme.py added and generators with newloine chars fixed --- README.md | 69 +++++++++++++++++++++++++++++----------- makeReadme.py | 25 +++++++++++++++ mathgenerator/mathgen.py | 65 +++++++++++++++++++++++++------------ 3 files changed, 121 insertions(+), 38 deletions(-) create mode 100644 makeReadme.py diff --git a/README.md b/README.md index 45ffcec..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -30,21 +30,54 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 1+5= | 6 | addition | -| 1 | Subtraction | 9-4= | 5 | subtraction | -| 2 | Multiplication | 4*6= | 24 | multiplication | -| 3 | Division | 4/3= | 1.33333333 | division | -| 4 | Binary Complement 1s | 1010= | 0101 | binaryComplement1s | -| 5 | Modulo Division | 10%3= | 1 | moduloDivision | -| 6 | Square Root | sqrt(25)= | 5 | squareRootFunction | -| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | -| 8 | Square | 4^2 | 16 | square | -| 9 | LCM (Least Common Multiple) | LCM of 14 and 9 = | 126 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 18 and 18 = | 18 | gcd | -| 11 | Basic Algebra | 9x + 7 = 10 | 1/3 | basicAlgebra | -| 12 | Logarithm | log3(3) | 1 | log | -| 13 | Easy Division | 270/15 = | 18 | intDivision | -| 14 | Decimal to Binary | Binary of a= | b | decimalToBinary | -| 15 | Binary to Decimal | Decimal of a= | b | binaryToDecimal | -| 16 | Fraction Division | (a/b)/(c/d)= | x/y | fractionDivision | -| 17 | Int 2x2 Matrix Multiplication | k * [[a,b],[c,d]]= | [[k*a,k*b],[k*c,k*d]] | intMatrix22Multiplication| +| 0 | Addition | 29+33= | 62 | addition | +| 1 | Subtraction | 62-7= | 55 | subtraction | +| 2 | Multiplication | 93*1= | 93 | multiplication | +| 3 | Division | 59/47= | 1.2553191489361701 | division | +| 4 | Binary Complement 1s | 001110000 | 110001111 | binaryComplement1s | +| 5 | Modulo Division | 89%34= | 21 | moduloDivision | +| 6 | Square Root | sqrt(16)= | 4 | squareRoot | +| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | +| 8 | Square | 12^2= | 144 | square | +| 9 | LCM (Least Common Multiple) | LCM of 10 and 1 = | 10 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 12 and 5 = | 1 | gcd | +| 11 | Basic Algebra | 8x + 7 = 10 | 3/8 | basicAlgebra | +| 12 | Logarithm | log3(729) | 6 | log | +| 13 | Easy Division | 378/21 = | 18 | intDivision | +| 14 | Decimal to Binary | Binary of 4= | 100 | decimalToBinary | +| 15 | Binary to Decimal | 10011 | 19 | binaryToDecimal | +| 16 | Fraction Division | (1/2)/(4/3) | 3/8 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 2 * [[0, 7], [7, 7]] = | [[0,14],[14,14]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 9 14 15 = | 61.644140029689765 | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 33, 6 and 43 exist? | No | doesTriangleExist | +| 20 | Midpoint of the two point | (-15,-10),(-5,2)= | (-10.0,-4.0) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-17x+72 | (x-9)(x-8) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 4 and 31 = | 145 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | +| 26 | Linear Equations | -11x + -16y = -302 +1x + 20y = 250 | x = 10, y = 12 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | +| 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 13 objects picked 1 at a time | 13 | combinations | +| 31 | Factorial | 2! = | 2 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 13m is | 1014 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 5m, 3m, 7m is | 142 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 15m and radius = 7m is | 967 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 11m is | 1331 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 6m, 1m, 10m is | 60 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 26m and radius = 15m is | 18378 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 46m and radius = 14m is | 2730 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 7m and radius = 11m is | 886 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 91 and 51 = | [1] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 6/4x + 5 and y = -7/2x + 3 | (-2/5, 22/5) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 13 objects picked 4 at a time = | 17160 | permutations | +| 43 | Cross Product of 2 Vectors | [-14, 13, 20] X [-5, -18, 19] = | [607, 166, 317] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 8/3 and 6/7? | > | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | +| 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | +| 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | +| 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | diff --git a/makeReadme.py b/makeReadme.py new file mode 100644 index 0000000..7ca8f2c --- /dev/null +++ b/makeReadme.py @@ -0,0 +1,25 @@ +#To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py + +wList = getGenList() +allRows = [] +f=open('mathgen.py') +lines=f.readlines() +line = 720 #This has to be changed depending on which line the first generator appears on +for item in wList: + myGen = item[2] + prob, sol = myGen() + prob = str(prob).rstrip("\n") + sol = str(sol).rstrip("\n") + instName = lines[line] + def_name = instName[:instName.find('=')].strip() + row = [myGen.id, myGen.title, prob, sol, def_name] + line+=1 + allRows.append(row) + +g=open('../README.md', "a") +for row in allRows: + tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" + g.write(tableLine) +g.close() + +print("New README.md table generated") diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..d00ea30 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -224,7 +224,7 @@ def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): c = random.randint(1, maxC) s = (a+b+c)/2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 - problem = "Area of triangle with side lengths: "+ str(a) +" "+ str(b) +" "+ str(c) + " = " + problem = "Area of triangle with side lengths: "+ str(a) +" "+ str(b) +" "+ str(c) + " = " solution = area return problem, solution @@ -234,7 +234,7 @@ def isTriangleValidFunc(maxSideLength = 50): sideC = random.randint(1, maxSideLength) sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: solution = "Yes" @@ -267,7 +267,7 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): if (b == "+1"): b = "+" - + if (b == ""): problem = f"x^2{c}" else: @@ -277,7 +277,7 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): x2 = intParser(x2) solution = f"(x{x1})(x{x2})" return problem, solution - + def thirdAngleOfTriangleFunc(maxAngle=89): angle1 = random.randint(1, maxAngle) angle2 = random.randint(1, maxAngle) @@ -362,13 +362,13 @@ def linearEquationsFunc(n = 2, varRange = 20, coeffRange = 20): for _ in range(n): coeff = [ random.randint(-coeffRange, coeffRange) for i in range(n) ] res = sum([ coeff[i] * soln[i] for i in range(n)]) - + prob = ["{}{}".format(coeff[i], vars[i]) if coeff[i] != 0 else "" for i in range(n)] while "" in prob: prob.remove("") prob = " + ".join(prob) + " = " + str(res) problem.append(prob) - + problem = "\n".join(problem) return problem, solution @@ -417,8 +417,8 @@ def regularPolygonAngleFunc(minVal = 3,maxVal = 20): problem = f"Find the angle of a regular polygon with {sideNum} sides" exteriorAngle = round((360/sideNum),2) solution = 180 - exteriorAngle - return problem, solution - + return problem, solution + def combinationsFunc(maxlength=20): def factorial(a): @@ -434,9 +434,9 @@ def combinationsFunc(maxlength=20): solution= int(factorial(a)/(factorial(b)*factorial(a-b))) problem= "Number of combinations from {} objects picked {} at a time ".format(a,b) - + return problem, solution - + def factorialFunc(maxInput = 6): a = random.randint(0, maxInput) n = a @@ -470,7 +470,7 @@ def surfaceAreaCuboid(maxSide = 20, unit = 'm'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) - + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" ans = 2 * (a*b + b*c + c*a) solution = f"{ans} {unit}^2" @@ -567,7 +567,7 @@ def intersectionOfTwoLinesFunc( else: x = f"{x.numerator}/{x.denominator}" return x - + m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) @@ -625,7 +625,7 @@ def compareFractionsFunc(maxVal=10): solution="<" else: solution="=" - + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" return problem,solution @@ -648,7 +648,7 @@ def matrixMultiplicationFunc(maxVal=100): a.append([]) for c in range(n): a[r].append(random.randint(-maxVal,maxVal)) - + b=[] for r in range(n): b.append([]) @@ -666,8 +666,8 @@ def matrixMultiplicationFunc(maxVal=100): for t in range(n): temp+=a[r][t]*b[t][c] res[r].append(temp) - problem= f"Multiply \n{a_string}\n and \n\n{b_string}" #consider using a, b instead of a_string, b_string if the problem doesn't look right - solution= matrixMultiplicationFuncHelper(res) + problem= f"Multiply {a} and {b}" #consider using a, b instead of a_string, b_string if the problem doesn't look right + solution= res#matrixMultiplicationFuncHelper(res) return problem, solution def matrixMultiplicationFuncHelper(inp): @@ -703,7 +703,7 @@ def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): solution = solution + " + c" return problem, solution - + def fourthAngleOfQuadriFunc(maxAngle = 180): angle1 = random.randint(1, maxAngle) angle2 = random.randint(1, 240-angle1) @@ -741,8 +741,7 @@ doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with s midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", - systemOfEquationsFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y @@ -754,7 +753,7 @@ factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is","b units^2", surfaceAreaCube) surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is","d units^2", surfaceAreaCuboid) surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is","c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) +volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is","d units^3", volumeCuboid) volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is","c units^3", volumeCylinder) surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) @@ -769,3 +768,29 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) + +wList = getGenList() +#print(wList) +allRows = [] +f=open('mathgen.py') +lines=f.readlines() +line = 720 +for item in wList: + myGen = item[2] + prob, sol = myGen() + prob = str(prob).rstrip("\n") + sol = str(sol).rstrip("\n") + instName = lines[line] + def_name = instName[:instName.find('=')].strip() + print(def_name) + row = [myGen.id, myGen.title, prob, sol, def_name] + print(row) + line+=1 + allRows.append(row) + +g=open('../README.md', "a") +for row in allRows: + tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" + g.write(tableLine) + #print(tableLine) +g.close() From a4fdc4ce99be1d89b92c4b9e0e5435e42d7737a4 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Fri, 16 Oct 2020 20:56:46 -0400 Subject: [PATCH 41/84] Update README.md --- README.md | 69 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 45ffcec..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -30,21 +30,54 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 1+5= | 6 | addition | -| 1 | Subtraction | 9-4= | 5 | subtraction | -| 2 | Multiplication | 4*6= | 24 | multiplication | -| 3 | Division | 4/3= | 1.33333333 | division | -| 4 | Binary Complement 1s | 1010= | 0101 | binaryComplement1s | -| 5 | Modulo Division | 10%3= | 1 | moduloDivision | -| 6 | Square Root | sqrt(25)= | 5 | squareRootFunction | -| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | -| 8 | Square | 4^2 | 16 | square | -| 9 | LCM (Least Common Multiple) | LCM of 14 and 9 = | 126 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 18 and 18 = | 18 | gcd | -| 11 | Basic Algebra | 9x + 7 = 10 | 1/3 | basicAlgebra | -| 12 | Logarithm | log3(3) | 1 | log | -| 13 | Easy Division | 270/15 = | 18 | intDivision | -| 14 | Decimal to Binary | Binary of a= | b | decimalToBinary | -| 15 | Binary to Decimal | Decimal of a= | b | binaryToDecimal | -| 16 | Fraction Division | (a/b)/(c/d)= | x/y | fractionDivision | -| 17 | Int 2x2 Matrix Multiplication | k * [[a,b],[c,d]]= | [[k*a,k*b],[k*c,k*d]] | intMatrix22Multiplication| +| 0 | Addition | 29+33= | 62 | addition | +| 1 | Subtraction | 62-7= | 55 | subtraction | +| 2 | Multiplication | 93*1= | 93 | multiplication | +| 3 | Division | 59/47= | 1.2553191489361701 | division | +| 4 | Binary Complement 1s | 001110000 | 110001111 | binaryComplement1s | +| 5 | Modulo Division | 89%34= | 21 | moduloDivision | +| 6 | Square Root | sqrt(16)= | 4 | squareRoot | +| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | +| 8 | Square | 12^2= | 144 | square | +| 9 | LCM (Least Common Multiple) | LCM of 10 and 1 = | 10 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 12 and 5 = | 1 | gcd | +| 11 | Basic Algebra | 8x + 7 = 10 | 3/8 | basicAlgebra | +| 12 | Logarithm | log3(729) | 6 | log | +| 13 | Easy Division | 378/21 = | 18 | intDivision | +| 14 | Decimal to Binary | Binary of 4= | 100 | decimalToBinary | +| 15 | Binary to Decimal | 10011 | 19 | binaryToDecimal | +| 16 | Fraction Division | (1/2)/(4/3) | 3/8 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 2 * [[0, 7], [7, 7]] = | [[0,14],[14,14]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 9 14 15 = | 61.644140029689765 | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 33, 6 and 43 exist? | No | doesTriangleExist | +| 20 | Midpoint of the two point | (-15,-10),(-5,2)= | (-10.0,-4.0) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-17x+72 | (x-9)(x-8) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 4 and 31 = | 145 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | +| 26 | Linear Equations | -11x + -16y = -302 +1x + 20y = 250 | x = 10, y = 12 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | +| 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 13 objects picked 1 at a time | 13 | combinations | +| 31 | Factorial | 2! = | 2 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 13m is | 1014 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 5m, 3m, 7m is | 142 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 15m and radius = 7m is | 967 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 11m is | 1331 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 6m, 1m, 10m is | 60 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 26m and radius = 15m is | 18378 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 46m and radius = 14m is | 2730 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 7m and radius = 11m is | 886 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 91 and 51 = | [1] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 6/4x + 5 and y = -7/2x + 3 | (-2/5, 22/5) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 13 objects picked 4 at a time = | 17160 | permutations | +| 43 | Cross Product of 2 Vectors | [-14, 13, 20] X [-5, -18, 19] = | [607, 166, 317] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 8/3 and 6/7? | > | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | +| 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | +| 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | +| 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | From 1572bd616c473906914c2e72f7fcff6b9971600f Mon Sep 17 00:00:00 2001 From: c0d3nh4ck <50226641+c0d3nh4ck@users.noreply.github.com> Date: Sat, 17 Oct 2020 08:01:21 +0530 Subject: [PATCH 42/84] added HCF function --- mathgenerator/mathgen.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..660a961 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,17 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution + +def hcfFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + while(y): + x, y = y, x % y + problem = f"HCF of {a} and {b} = " + solution = str(x) + return problem, solution + # || Class Instances #Format is: @@ -769,3 +780,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +hcf = Generator("HCF (Highest Common Factor)", 50, "HCF of a and b = ", "c", hcfFunc) From dedbb7027e1f53cad75608991fdd6d50de75589d Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 11:47:30 +0530 Subject: [PATCH 43/84] Probability Function for Sum on dice faces --- mathgenerator/mathgen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..866a2f2 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,27 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def DiceSumProbFunc(maxDice=3): + a = random.randint(1,maxDice) + b = random.randint(a,6*a) + count=0 + for i in [1,2,3,4,5,6]: + if a==1: + if i==b: + count=count+1 + elif a==2: + for j in [1,2,3,4,5,6]: + if i+j==b: + count=count+1 + elif a==3: + for j in [1,2,3,4,5,6]: + for k in [1,2,3,4,5,6]: + if i+j+k==b: + count=count+1 + problem = "If {} dices rolled at the same time, Probability of getting a sum of {} =".format(a,b) + solution="{}/{}".format(count, 6**a) + return problem, solution + # || Class Instances #Format is: @@ -769,3 +790,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +DiceSumProbability=Generator("Probability of a certain sum appearing on faces of dice",50,"If n dices are rolled then probabilty of getting sum of x is", DiceSumProbFunc) From e3834b2c8951be2670dc6a8a3ea64c7eca81725a Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 11:54:50 +0530 Subject: [PATCH 44/84] Update mathgen.py --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 866a2f2..a5164a1 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -790,4 +790,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) -DiceSumProbability=Generator("Probability of a certain sum appearing on faces of dice",50,"If n dices are rolled then probabilty of getting sum of x is", DiceSumProbFunc) +DiceSumProbability=Generator("Probability of a certain sum appearing on faces of dice",50,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) From 91b42f8ab6287219c767ed38937db1508f853414 Mon Sep 17 00:00:00 2001 From: palmcm Date: Sat, 17 Oct 2020 13:38:19 +0700 Subject: [PATCH 45/84] Add exponentiation function --- mathgenerator/mathgen.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..0722c35 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,12 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def exponentiationFunc(maxBase = 20,maxExpo = 10): + base = random.randint(1, maxBase) + expo = random.randint(1, maxExpo) + problem = f"{base}^{expo} =" + solution = str(base ** expo) + return problem, solution # || Class Instances #Format is: @@ -769,3 +775,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +exponentiation = Generator("Exponentiation",50,"a^b = ","c",exponentiationFunc) \ No newline at end of file From efc3df0b275784b1cce4fa3e182b4f974317e427 Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 13:22:26 +0530 Subject: [PATCH 46/84] Confidence Interval Problem Generator --- mathgenerator/mathgen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..e7da9a6 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -713,6 +713,27 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution +def confidenceIntervalFunc(): + n=random.randint(20,40) + j=random.randint(1,4) + lst=random.sample(range(200,300),n) + lst_per=[80 ,90, 95, 99] + lst_t = [1.282, 1.645, 1.960, 2.576] + mean=0 + sd=0 + for i in lst: + count= i + mean + mean=count + mean = mean/n + for i in lst: + x=(i-mean)**2+sd + sd=x + sd=sd/n + standard_error = lst_t[j]*math.sqrt(sd/n) + problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) + solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + return problem, solution + # || Class Instances @@ -769,3 +790,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +ConfidenceInterval = Generator("Confidence interval For sample S", 51, "With X% confidence", "is (A,B)", confidenceIntervalFunc) From 6651379fb82862edd1b970fec65ddbebbd3c7549 Mon Sep 17 00:00:00 2001 From: MaxwellJpg <70202524+MaxwellJpg@users.noreply.github.com> Date: Sat, 17 Oct 2020 10:26:46 +0100 Subject: [PATCH 47/84] Update README.md correct row 26 of table --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index dfc7d41..3f3ab03 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,7 @@ problem, solution = mathgen.genById(0) | 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | | 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | | 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | -| 26 | Linear Equations | -11x + -16y = -302 -1x + 20y = 250 | x = 10, y = 12 | linearEquations | +| 26 | Linear Equations | -11x + -16y = -302 , 1x + 20y = 250 | x = 10, y = 12 | linearEquations | | 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | | 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | | 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | From e2857e8f18aff94aee4fb02265842d6d075374d8 Mon Sep 17 00:00:00 2001 From: MaxwellJpg Date: Sat, 17 Oct 2020 12:26:10 +0100 Subject: [PATCH 48/84] correct int powerRuleIntegrationFunc --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..3c67452 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -699,7 +699,7 @@ def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "("+str(coefficient) +"/"+str(exponent) +")x^" + str(exponent +1) + solution += "("+str(coefficient) +"/"+str(exponent + 1) +")x^" + str(exponent +1) solution = solution + " + c" return problem, solution @@ -767,5 +767,5 @@ compareFractions=Generator("Compare Fractions",44,"Which symbol represents the c simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) -powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m+1)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) From 7bbfec529ff49cdfb7b61f46067df81eb09cf399 Mon Sep 17 00:00:00 2001 From: ieshaan12 Date: Sat, 17 Oct 2020 17:24:23 +0530 Subject: [PATCH 49/84] Surds comparison --- README.md | 1 + mathgenerator/mathgen.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/README.md b/README.md index dfc7d41..621b2a4 100644 --- a/README.md +++ b/README.md @@ -81,3 +81,4 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | +| 50 | Surd Comparison | 25^(1/3) _ 37^(1/2) | < | surdsComparisonGen | diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..fb435d2 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,20 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def surdsComparison(maxValue = 100, maxRoot = 10): + radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) + degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) + problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" + first = math.pow(radicand1, 1/degree1) + second = math.pow(radicand2, 1/degree2) + solution = "=" + if first > second: + solution = ">" + elif first < second: + solution = "<" + return problem, solution + + # || Class Instances #Format is: @@ -769,3 +783,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +surdsComparisonGen = Generator("Comparing surds", 50, "Fill in the blanks a^(1/b) _ c^(1/d)", "/=", surdsComparison) From b8a5741ecd424ce57bf76d23dd6380fb91f33020 Mon Sep 17 00:00:00 2001 From: vishnudk Date: Sat, 17 Oct 2020 17:31:20 +0530 Subject: [PATCH 50/84] add a --- mathgenerator/mathgen.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..0791512 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -713,6 +713,22 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution +def createFibList(n): + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l + +def fibonacciSeriesFunc(minNo=1): + n = random.randint(minNo,20) + fibList=createFibList(n) + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + solution = fibList + return problem,solution # || Class Instances @@ -769,3 +785,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +fibonacciSeries = Generator("Fibonacci Series",50,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) \ No newline at end of file From 783f0ce953c3bc844341ca79f6a7bf2f2c9191b0 Mon Sep 17 00:00:00 2001 From: Dark Prince Date: Sat, 17 Oct 2020 17:42:43 +0530 Subject: [PATCH 51/84] Added Trigonometric Values Generator for Standard Angles in Degrees --- .../__pycache__/mathgen.cpython-37.pyc | Bin 19103 -> 29724 bytes mathgenerator/mathgen.py | 13 +++++++++++++ 2 files changed, 13 insertions(+) diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc index 418e0a56baea2c94655d34c4eac76225870c1ea8..82bcec4b454f2a62c9cf0b2088c33baea54dfaef 100644 GIT binary patch delta 13355 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 W{9Hm@vXc)Kt4zL7%r*H*u^0fiPjV#y diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..1306a95 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,18 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): + angle=random.choice(angles) + function=random.choice(functions) + + problem=f"What is {function}({angle})?\n" + expression='math.'+function+'(math.radians(angle))' + result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} + + solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition + + return problem,solution + # || Class Instances #Format is: @@ -769,3 +781,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +basicTrigonometry=Generator("Trigonometric Values",50,"What is sin(X)?","ans",basicTrigonometryFunc) From 2b5a8135dc47f1209103fbbb75804ffb3a82bd09 Mon Sep 17 00:00:00 2001 From: Shiven Tripathi <58358532+ShivenTripathi@users.noreply.github.com> Date: Sat, 17 Oct 2020 18:22:20 +0530 Subject: [PATCH 52/84] debug, tested --- mathgenerator/mathgen.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 90cd1ac..fda0d0e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -535,10 +535,13 @@ def commonFactorsFunc(maxVal=100): def quadraticEquation(maxVal=100): a = random.randint(1,maxVal) c = random.randint(1,maxVal) - b = random.randint(4*a*c,4*maxVal*maxVal) + b = random.randint(round(math.sqrt(4*a*c))+1,round(math.sqrt(4*maxVal*maxVal))) - problem = "Zeros of the Quadratic Equation {a}x^2+{b}x+{c}=0".format(a,b,c) - solution = str[(-b+sqrt(b^2-4*a*c))/2*a,(-b-sqrt(b^2-4*a*c))/2*a] + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a,b,c) + + D = math.sqrt(b*b-4*a*c) + + solution = str([(-b+D)/(2*a),(-b-D)/(2*a)]) return problem,solution # || Class Instances From 7e9f8a4d2b19e5ed168cca1498a6c26958d5123d Mon Sep 17 00:00:00 2001 From: "sakshi.kst" Date: Sat, 17 Oct 2020 18:30:57 +0530 Subject: [PATCH 53/84] Sum of Angles of Polygon function added --- README.md | 1 + mathgenerator/mathgen.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index dfc7d41..d39ce06 100644 --- a/README.md +++ b/README.md @@ -81,3 +81,4 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | +| 50 | Sum of Angles of Polygon | Sum of angles of polygon with 4 sides = | 360 | sumOfAnglesOfPolygon | \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..52ee492 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,13 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def sumOfAnglesOfPolygonFunc(maxSides = 12): + side = random.randint(3, maxSides) + sum = (side - 2) * 180 + problem = f"Sum of angles of polygon with {side} sides = " + solution = sum + return problem, solution + # || Class Instances #Format is: @@ -769,3 +776,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 50, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) From e2bbbee7c6957ac6276c9b95dad579fcc93745ac Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Sat, 17 Oct 2020 12:54:30 -0400 Subject: [PATCH 54/84] Rounded solution --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 3a44119..72eb108 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -723,7 +723,7 @@ def quadraticEquation(maxVal=100): D = math.sqrt(b*b-4*a*c) - solution = str([(-b+D)/(2*a),(-b-D)/(2*a)]) + solution = str([round((-b+D)/(2*a), 2),round((-b-D)/(2*a), 2)]) return problem,solution # || Class Instances From 08fc9d0663e90b96ee9d7cb7451aa3ee5c212576 Mon Sep 17 00:00:00 2001 From: YuvalG Date: Sat, 17 Oct 2020 20:05:47 +0300 Subject: [PATCH 55/84] Add flake8 as linter --- .github/workflows/tests.yaml | 44 +- Makefile | 9 +- dev-requirements.txt | 5 +- .../__pycache__/__init__.cpython-37.pyc | Bin 164 -> 0 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 19103 -> 0 bytes mathgenerator/mathgen.py | 500 ++++++++++-------- tests/test_mathgen.py | 92 ++-- 7 files changed, 358 insertions(+), 292 deletions(-) delete mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc delete mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 3252576..cc6cf9d 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,21 +1,23 @@ -name: Run tests - -on: [push, pull_request] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install -U pip - python -m pip install -r dev-requirements.txt - - name: Test - run: make test +name: Run tests + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install -U pip + python -m pip install -r dev-requirements.txt + - name: Linter + run: make lint + - name: Test + run: make test diff --git a/Makefile b/Makefile index dbf1f17..bd04e35 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,7 @@ -test: - python -m pytest --verbose -s tests +FLAKE_FLAGS = --ignore=E501,F401,F403,F405 + +lint: + python -m flake8 $(FLAKE_FLAGS) + +test: + python -m pytest --verbose -s tests diff --git a/dev-requirements.txt b/dev-requirements.txt index a965899..6e46af4 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,2 +1,3 @@ -pytest -hypothesis \ No newline at end of file +pytest +hypothesis +flake8 \ No newline at end of file diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 893336fc37f23c5d8be2b5e049b532e5ed6e2ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 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 diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 7bf36d8..b8d9033 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -4,6 +4,7 @@ import fractions genList = [] + # || Generator class class Generator: def __init__(self, title, id, generalProb, generalSol, func): @@ -20,52 +21,59 @@ class Generator: def __call__(self, **kwargs): return self.func(**kwargs) + # || Non-generator Functions def genById(id): generator = genList[id][2] return(generator()) + def getGenList(): return(genList) # || Generator Functions -def additionFunc(maxSum = 99, maxAddend = 50): + +def additionFunc(maxSum=99, maxAddend=50): a = random.randint(0, maxAddend) - b = random.randint(0, min((maxSum-a), maxAddend)) #The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well - c = a+b + b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + c = a + b problem = str(a) + "+" + str(b) + "=" solution = str(c) return problem, solution -def subtractionFunc(maxMinuend = 99, maxDiff = 99): + +def subtractionFunc(maxMinuend=99, maxDiff=99): a = random.randint(0, maxMinuend) - b = random.randint(max(0, (a-maxDiff)), a) - c = a-b + b = random.randint(max(0, (a - maxDiff)), a) + c = a - b problem = str(a) + "-" + str(b) + "=" solution = str(c) return problem, solution -def multiplicationFunc(maxRes = 99, maxMulti = 99): + +def multiplicationFunc(maxRes=99, maxMulti=99): a = random.randint(0, maxMulti) - b = random.randint(0, min(int(maxMulti/a), maxRes)) - c = a*b + b = random.randint(0, min(int(maxMulti / a), maxRes)) + c = a * b problem = str(a) + "*" + str(b) + "=" solution = str(c) return problem, solution -def divisionFunc(maxRes = 99, maxDivid = 99): + +def divisionFunc(maxRes=99, maxDivid=99): a = random.randint(0, maxDivid) b = random.randint(0, min(maxRes, maxDivid)) - c = a/b + c = a / b problem = str(a) + "/" + str(b) + "=" solution = str(c) return problem, solution -def binaryComplement1sFunc(maxDigits = 10): + +def binaryComplement1sFunc(maxDigits=10): question = '' answer = '' - for i in range(random.randint(1,maxDigits)): + for i in range(random.randint(1, maxDigits)): temp = str(random.randint(0, 1)) question += temp answer += "0" if temp == "1" else "1" @@ -74,22 +82,25 @@ def binaryComplement1sFunc(maxDigits = 10): solution = answer return problem, solution -def moduloFunc(maxRes = 99, maxModulo= 99): + +def moduloFunc(maxRes=99, maxModulo=99): a = random.randint(0, maxModulo) b = random.randint(0, min(maxRes, maxModulo)) - c = a%b + c = a % b problem = str(a) + "%" + str(b) + "=" solution = str(c) return problem, solution -def squareRootFunc(minNo = 1, maxNo = 12): + +def squareRootFunc(minNo=1, maxNo=12): b = random.randint(minNo, maxNo) - a = b*b + a = b * b problem = "sqrt(" + str(a) + ")=" solution = str(b) return problem, solution -def powerRuleDifferentiationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): + +def powerRuleDifferentiationFunc(maxCoef=10, maxExp=10, maxTerms=5): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -103,23 +114,26 @@ def powerRuleDifferentiationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): solution += str(coefficient * exponent) + "x^" + str(exponent - 1) return problem, solution -def squareFunc(maxSquareNum = 20): + +def squareFunc(maxSquareNum=20): a = random.randint(1, maxSquareNum) b = a * a problem = str(a) + "^2" + "=" solution = str(b) return problem, solution + def gcdFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) x, y = a, b while(y): - x, y = y, x % y + x, y = y, x % y problem = f"GCD of {a} and {b} = " solution = str(x) return problem, solution + def lcmFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -132,11 +146,13 @@ def lcmFunc(maxVal=20): solution = str(d) return problem, solution -def basicAlgebraFunc(maxVariable = 10): + +def basicAlgebraFunc(maxVariable=10): a = random.randint(1, maxVariable) b = random.randint(1, maxVariable) c = random.randint(b, maxVariable) # calculate gcd + def calculate_gcd(x, y): while(y): x, y = y, x % y @@ -145,44 +161,49 @@ def basicAlgebraFunc(maxVariable = 10): x = f"{(c - b)//i}/{a//i}" if (c - b == 0): x = "0" - elif a == 1 or a == i : + elif a == 1 or a == i: x = f"{c - b}" problem = f"{a}x + {b} = {c}" solution = x return problem, solution + def logFunc(maxBase=3, maxVal=8): a = random.randint(1, maxVal) b = random.randint(2, maxBase) - c = pow(b,a) - problem = "log"+str(b)+"("+str(c)+")" + c = pow(b, a) + problem = "log" + str(b) + "(" + str(c) + ")" solution = str(a) return problem, solution + def divisionToIntFunc(maxA=25, maxB=25): - a = random.randint(1,maxA) - b = random.randint(1,maxB) - divisor = a*b - dividend=random.choice([a,b]) + a = random.randint(1, maxA) + b = random.randint(1, maxB) + divisor = a * b + dividend = random.choice([a, b]) problem = f"{divisor}/{dividend} = " - solution=int(divisor/dividend) - return problem,solution + solution = int(divisor / dividend) + return problem, solution + def DecimalToBinaryFunc(max_dec=99): a = random.randint(1, max_dec) b = bin(a).replace("0b", "") - problem = "Binary of "+str(a)+"=" + problem = "Binary of " + str(a) + "=" solution = str(b) return problem, solution -def BinaryToDecimalFunc(max_dig=10): - problem='' - for i in range(random.randint(1,max_dig)): - temp = str(random.randint(0, 1)) - problem += temp - solution=int(problem, 2); - return problem, solution +def BinaryToDecimalFunc(max_dig=10): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = int(problem, 2) + return problem, solution + def divideFractionsFunc(maxVal=10): a = random.randint(1, maxVal) @@ -193,6 +214,7 @@ def divideFractionsFunc(maxVal=10): d = random.randint(1, maxVal) while (c == d): d = random.randint(1, maxVal) + def calculate_gcd(x, y): while(y): x, y = y, x % y @@ -208,33 +230,36 @@ def divideFractionsFunc(maxVal=10): solution = x return problem, solution -def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): + +def multiplyIntToMatrix22(maxMatrixVal=10, maxRes=100): a = random.randint(0, maxMatrixVal) b = random.randint(0, maxMatrixVal) c = random.randint(0, maxMatrixVal) d = random.randint(0, maxMatrixVal) - constant = random.randint(0, int(maxRes/max(a,b,c,d))) + constant = random.randint(0, int(maxRes / max(a, b, c, d))) problem = f"{constant} * [[{a}, {b}], [{c}, {d}]] = " solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" return problem, solution -def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): - a = random.randint(1, maxA) - b = random.randint(1, maxB) - c = random.randint(1, maxC) - s = (a+b+c)/2 - area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 - problem = "Area of triangle with side lengths: "+ str(a) +" "+ str(b) +" "+ str(c) + " = " - solution = area - return problem, solution -def isTriangleValidFunc(maxSideLength = 50): +def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): + a = random.randint(1, maxA) + b = random.randint(1, maxB) + c = random.randint(1, maxC) + s = (a + b + c) / 2 + area = (s * (s - a) * (s - b) * (s - c)) ** 0.5 + problem = "Area of triangle with side lengths: " + str(a) + " " + str(b) + " " + str(c) + " = " + solution = area + return problem, solution + + +def isTriangleValidFunc(maxSideLength=50): sideA = random.randint(1, maxSideLength) sideB = random.randint(1, maxSideLength) sideC = random.randint(1, maxSideLength) sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: solution = "Yes" @@ -242,51 +267,56 @@ def isTriangleValidFunc(maxSideLength = 50): solution = "No" return problem, solution + def MidPointOfTwoPointFunc(maxValue=20): - x1=random.randint(-20,maxValue) - y1=random.randint(-20,maxValue) - x2=random.randint(-20,maxValue) - y2=random.randint(-20,maxValue) - problem=f"({x1},{y1}),({x2},{y2})=" - solution=f"({(x1+x2)/2},{(y1+y2)/2})" - return problem,solution + x1 = random.randint(-20, maxValue) + y1 = random.randint(-20, maxValue) + x2 = random.randint(-20, maxValue) + y2 = random.randint(-20, maxValue) + problem = f"({x1},{y1}),({x2},{y2})=" + solution = f"({(x1+x2)/2},{(y1+y2)/2})" + return problem, solution -def factoringFunc(range_x1 = 10, range_x2 = 10): - x1 = random.randint(-range_x1, range_x1) - x2 = random.randint(-range_x2, range_x2) - def intParser(z): - if (z == 0): - return "" - if (z > 0): - return "+" + str(z) - if (z < 0): - return "-" + str(abs(z)) - b = intParser(x1 + x2) - c = intParser(x1 * x2) +def factoringFunc(range_x1=10, range_x2=10): + x1 = random.randint(-range_x1, range_x1) + x2 = random.randint(-range_x2, range_x2) + + def intParser(z): + if (z == 0): + return "" + if (z > 0): + return "+" + str(z) + if (z < 0): + return "-" + str(abs(z)) + + b = intParser(x1 + x2) + c = intParser(x1 * x2) + + if (b == "+1"): + b = "+" + + if (b == ""): + problem = f"x^2{c}" + else: + problem = f"x^2{b}x{c}" + + x1 = intParser(x1) + x2 = intParser(x2) + solution = f"(x{x1})(x{x2})" + return problem, solution - if (b == "+1"): - b = "+" - - if (b == ""): - problem = f"x^2{c}" - else: - problem = f"x^2{b}x{c}" - x1 = intParser(x1) - x2 = intParser(x2) - solution = f"(x{x1})(x{x2})" - return problem, solution - def thirdAngleOfTriangleFunc(maxAngle=89): - angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, maxAngle) - angle3 = 180 - (angle1 + angle2) - problem = f"Third angle of triangle with angles {angle1} and {angle2} = " - solution = angle3 - return problem, solution + angle1 = random.randint(1, maxAngle) + angle2 = random.randint(1, maxAngle) + angle3 = 180 - (angle1 + angle2) + problem = f"Third angle of triangle with angles {angle1} and {angle2} = " + solution = angle3 + return problem, solution -def systemOfEquationsFunc(range_x = 10, range_y = 10, coeff_mult_range=10): + +def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): # Generate solution point first x = random.randint(-range_x, range_x) y = random.randint(-range_y, range_y) @@ -331,17 +361,19 @@ def systemOfEquationsFunc(range_x = 10, range_y = 10, coeff_mult_range=10): # Add random (non-zero) multiple of equations to each other -def distanceTwoPointsFunc(maxValXY = 20, minValXY=-20): - point1X = random.randint(minValXY, maxValXY+1) - point1Y = random.randint(minValXY, maxValXY+1) - point2X = random.randint(minValXY, maxValXY+1) - point2Y = random.randint(minValXY, maxValXY+1) + +def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): + point1X = random.randint(minValXY, maxValXY + 1) + point1Y = random.randint(minValXY, maxValXY + 1) + point2X = random.randint(minValXY, maxValXY + 1) + point2Y = random.randint(minValXY, maxValXY + 1) distanceSq = (point1X - point2X) ** 2 + (point1Y - point2Y) ** 2 solution = f"sqrt({distanceSq})" problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" return problem, solution -def pythagoreanTheoremFunc(maxLength = 20): + +def pythagoreanTheoremFunc(maxLength=20): a = random.randint(1, maxLength) b = random.randint(1, maxLength) c = (a**2 + b**2)**0.5 @@ -349,29 +381,31 @@ def pythagoreanTheoremFunc(maxLength = 20): solution = f"{c:.0f}" if c.is_integer() else f"{c:.2f}" return problem, solution -def linearEquationsFunc(n = 2, varRange = 20, coeffRange = 20): + +def linearEquationsFunc(n=2, varRange=20, coeffRange=20): if n > 10: print("[!] n cannot be greater than 10") return None, None vars = ['x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g'][:n] - soln = [ random.randint(-varRange, varRange) for i in range(n) ] + soln = [random.randint(-varRange, varRange) for i in range(n)] problem = list() solution = ", ".join(["{} = {}".format(vars[i], soln[i]) for i in range(n)]) for _ in range(n): - coeff = [ random.randint(-coeffRange, coeffRange) for i in range(n) ] - res = sum([ coeff[i] * soln[i] for i in range(n)]) - + coeff = [random.randint(-coeffRange, coeffRange) for i in range(n)] + res = sum([coeff[i] * soln[i] for i in range(n)]) + prob = ["{}{}".format(coeff[i], vars[i]) if coeff[i] != 0 else "" for i in range(n)] while "" in prob: prob.remove("") prob = " + ".join(prob) + " = " + str(res) problem.append(prob) - + problem = "\n".join(problem) return problem, solution + def primeFactorsFunc(minVal=1, maxVal=200): a = random.randint(minVal, maxVal) n = a @@ -389,6 +423,7 @@ def primeFactorsFunc(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution + def multiplyFractionsFunc(maxVal=10): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -398,6 +433,7 @@ def multiplyFractionsFunc(maxVal=10): b = random.randint(1, maxVal) while (c == d): d = random.randint(1, maxVal) + def calculate_gcd(x, y): while(y): x, y = y, x % y @@ -412,32 +448,33 @@ def multiplyFractionsFunc(maxVal=10): solution = x return problem, solution -def regularPolygonAngleFunc(minVal = 3,maxVal = 20): + +def regularPolygonAngleFunc(minVal=3, maxVal=20): sideNum = random.randint(minVal, maxVal) problem = f"Find the angle of a regular polygon with {sideNum} sides" - exteriorAngle = round((360/sideNum),2) + exteriorAngle = round((360 / sideNum), 2) solution = 180 - exteriorAngle - return problem, solution - + return problem, solution + + def combinationsFunc(maxlength=20): def factorial(a): - d=1 + d = 1 for i in range(a): - a=(i+1)*d - d=a + a = (i + 1) * d + d = a return d - a= random.randint(10,maxlength) - b=random.randint(0,9) + a = random.randint(10, maxlength) + b = random.randint(0, 9) + solution = int(factorial(a) / (factorial(b) * factorial(a - b))) + problem = "Number of combinations from {} objects picked {} at a time ".format(a, b) - - solution= int(factorial(a)/(factorial(b)*factorial(a-b))) - problem= "Number of combinations from {} objects picked {} at a time ".format(a,b) - return problem, solution - -def factorialFunc(maxInput = 6): + + +def factorialFunc(maxInput=6): a = random.randint(0, maxInput) n = a problem = str(a) + "! = " @@ -452,31 +489,35 @@ def factorialFunc(maxInput = 6): solution = str(b) return problem, solution -def surfaceAreaCube(maxSide = 20, unit = 'm'): + +def surfaceAreaCube(maxSide=20, unit='m'): a = random.randint(1, maxSide) problem = f"Surface area of cube with side = {a}{unit} is" ans = 6 * a * a solution = f"{ans} {unit}^2" return problem, solution -def volumeCube(maxSide = 20, unit = 'm'): + +def volumeCube(maxSide=20, unit='m'): a = random.randint(1, maxSide) problem = f"Volume of cube with side = {a}{unit} is" ans = a * a * a solution = f"{ans} {unit}^3" return problem, solution -def surfaceAreaCuboid(maxSide = 20, unit = 'm'): + +def surfaceAreaCuboid(maxSide=20, unit='m'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) - + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" - ans = 2 * (a*b + b*c + c*a) + ans = 2 * (a * b + b * c + c * a) solution = f"{ans} {unit}^2" return problem, solution -def volumeCuboid(maxSide = 20, unit = 'm'): + +def volumeCuboid(maxSide=20, unit='m'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) @@ -485,7 +526,8 @@ def volumeCuboid(maxSide = 20, unit = 'm'): solution = f"{ans} {unit}^3" return problem, solution -def surfaceAreaCylinder(maxRadius = 20, maxHeight = 50,unit = 'm'): + +def surfaceAreaCylinder(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) problem = f"Surface area of cylinder with height = {a}{unit} and radius = {b}{unit} is" @@ -493,7 +535,8 @@ def surfaceAreaCylinder(maxRadius = 20, maxHeight = 50,unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution -def volumeCylinder(maxRadius = 20, maxHeight = 50, unit = 'm'): + +def volumeCylinder(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) problem = f"Volume of cylinder with height = {a}{unit} and radius = {b}{unit} is" @@ -501,7 +544,8 @@ def volumeCylinder(maxRadius = 20, maxHeight = 50, unit = 'm'): solution = f"{ans} {unit}^3" return problem, solution -def surfaceAreaCone(maxRadius = 20, maxHeight = 50,unit = 'm'): + +def surfaceAreaCone(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) slopingHeight = math.sqrt(a**2 + b**2) @@ -510,14 +554,16 @@ def surfaceAreaCone(maxRadius = 20, maxHeight = 50,unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution -def volumeCone(maxRadius = 20, maxHeight = 50, unit = 'm'): + +def volumeCone(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) problem = f"Volume of cone with height = {a}{unit} and radius = {b}{unit} is" - ans = int(math.pi * b * b * a * (1/3)) + ans = int(math.pi * b * b * a * (1 / 3)) solution = f"{ans} {unit}^3" return problem, solution + def commonFactorsFunc(maxVal=100): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -537,6 +583,7 @@ def commonFactorsFunc(maxVal=100): solution = arr return problem, solution + def intersectionOfTwoLinesFunc( minM=-10, maxM=10, minB=-10, maxB=10, minDenominator=1, maxDenominator=6 ): @@ -567,7 +614,7 @@ def intersectionOfTwoLinesFunc( else: x = f"{x.numerator}/{x.denominator}" return x - + m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) @@ -590,21 +637,24 @@ def intersectionOfTwoLinesFunc( solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" return problem, solution + def permutationFunc(maxlength=20): - a = random.randint(10,maxlength) - b = random.randint(0,9) - solution= int(math.factorial(a)/(math.factorial(a-b))) - problem= "Number of Permutations from {} objects picked {} at a time = ".format(a,b) + a = random.randint(10, maxlength) + b = random.randint(0, 9) + solution = int(math.factorial(a) / (math.factorial(a - b))) + problem = "Number of Permutations from {} objects picked {} at a time = ".format(a, b) return problem, solution + def vectorCrossFunc(minVal=-20, maxVal=20): a = [random.randint(minVal, maxVal) for i in range(3)] b = [random.randint(minVal, maxVal) for i in range(3)] - c = [a[1]*b[2] - a[2]*b[1], - a[2]*b[0] - a[0]*b[2], - a[0]*b[1] - a[1]*b[0]] + c = [a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0]] return str(a) + " X " + str(b) + " = ", str(c) + def compareFractionsFunc(maxVal=10): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -616,79 +666,84 @@ def compareFractionsFunc(maxVal=10): while (c == d): d = random.randint(1, maxVal) - first=a/b - second=c/d + first = a / b + second = c / d - if(first>second): - solution=">" - elif(first second): + solution = ">" + elif(first < second): + solution = "<" else: - solution="=" - - problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" - return problem,solution + solution = "=" + + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" + return problem, solution + + +def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): + a = random.randint(1000, maxPrinciple) + b = random.randint(1, maxRate) + c = random.randint(1, maxTime) + d = (a * b * c) / 100 + problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " + solution = round(d, 2) + return problem, solution -def simpleInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10): - a = random.randint(1000, maxPrinciple) - b = random.randint(1, maxRate) - c = random.randint(1, maxTime) - d = (a*b*c)/100 - problem = "Simple interest for a principle amount of " + str(a) +" dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " - solution = round(d, 2) - return problem, solution def matrixMultiplicationFunc(maxVal=100): - m= random.randint(2, 10) - n= random.randint(2, 10) - k= random.randint(2, 10) - #generate matrices a and b - a=[] + m = random.randint(2, 10) + n = random.randint(2, 10) + k = random.randint(2, 10) + # generate matrices a and b + a = [] for r in range(m): a.append([]) for c in range(n): - a[r].append(random.randint(-maxVal,maxVal)) - - b=[] + a[r].append(random.randint(-maxVal, maxVal)) + + b = [] for r in range(n): b.append([]) for c in range(k): b[r].append(random.randint(-maxVal, maxVal)) - res= [] - a_string= matrixMultiplicationFuncHelper(a) - b_string= matrixMultiplicationFuncHelper(b) + res = [] + a_string = matrixMultiplicationFuncHelper(a) + b_string = matrixMultiplicationFuncHelper(b) for r in range(m): res.append([]) for c in range(k): - temp= 0 + temp = 0 for t in range(n): - temp+=a[r][t]*b[t][c] + temp += a[r][t] * b[t][c] res[r].append(temp) - problem= f"Multiply \n{a_string}\n and \n\n{b_string}" #consider using a, b instead of a_string, b_string if the problem doesn't look right - solution= matrixMultiplicationFuncHelper(res) + problem = f"Multiply \n{a_string}\n and \n\n{b_string}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + solution = matrixMultiplicationFuncHelper(res) return problem, solution + def matrixMultiplicationFuncHelper(inp): - m= len(inp) - n= len(inp[0]) - string= "" + m = len(inp) + n = len(inp[0]) + string = "" for i in range(m): for j in range(n): - string+=f"{inp[i][j]: 6d}" - string+=" " - string+="\n" + string += f"{inp[i][j]: 6d}" + string += " " + string += "\n" return string -def cubeRootFunc(minNo = 1, maxNo = 1000): + +def cubeRootFunc(minNo=1, maxNo=1000): b = random.randint(minNo, maxNo) - a = b**(1/3) + a = b**(1 / 3) problem = "cuberoot of " + str(b) + " upto 2 decimal places is:" - solution = str(round(a,2)) + solution = str(round(a, 2)) return problem, solution -def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): + +def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -699,32 +754,33 @@ def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "("+str(coefficient) +"/"+str(exponent) +")x^" + str(exponent +1) + solution += "(" + str(coefficient) + "/" + str(exponent) + ")x^" + str(exponent + 1) solution = solution + " + c" return problem, solution - -def fourthAngleOfQuadriFunc(maxAngle = 180): + +def fourthAngleOfQuadriFunc(maxAngle=180): angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, 240-angle1) - angle3 = random.randint(1, 340-(angle1 + angle2)) + angle2 = random.randint(1, 240 - angle1) + angle3 = random.randint(1, 340 - (angle1 + angle2)) sum_ = angle1 + angle2 + angle3 angle4 = 360 - sum_ problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution - -def quadraticEquation(maxVal=100): - a = random.randint(1,maxVal) - c = random.randint(1,maxVal) - b = random.randint(round(math.sqrt(4*a*c))+1,round(math.sqrt(4*maxVal*maxVal))) - - problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a,b,c) - D = math.sqrt(b*b-4*a*c) - - solution = str([round((-b+D)/(2*a), 2),round((-b-D)/(2*a), 2)]) - return problem,solution + +def quadraticEquation(maxVal=100): + a = random.randint(1, maxVal) + c = random.randint(1, maxVal) + b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) + + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) + + D = math.sqrt(b * b - 4 * a * c) + + solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + return problem, solution def hcfFunc(maxVal=20): @@ -732,15 +788,17 @@ def hcfFunc(maxVal=20): b = random.randint(1, maxVal) x, y = a, b while(y): - x, y = y, x % y + x, y = y, x % y problem = f"HCF of {a} and {b} = " solution = str(x) return problem, solution # || Class Instances -#Format is: -# = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) +# Format is: +# <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) + + addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) @@ -749,48 +807,48 @@ binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", binar moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) -square = Generator("Square", 8,"a^2", "b", squareFunc) +square = Generator("Square", 8, "a^2", "b", squareFunc) lcm = Generator("LCM (Least Common Multiple)", 9, "LCM of a and b = ", "c", lcmFunc) gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", "c", gcdFunc) basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) -intDivision = Generator("Easy Division", 13,"a/b=","c",divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary",14,"Binary of a=","b",DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal",15,"Decimal of a=","b",BinaryToDecimalFunc) +intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) +decimalToBinary = Generator("Decimal to Binary", 14, "Binary of a=", "b", DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15, "Decimal of a=", "b", BinaryToDecimalFunc) fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) -doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?","Yes/No", isTriangleValidFunc) -midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) +doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) +midPointOfTwoPoint = Generator("Midpoint of the two point", 20, "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) -distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) +distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y +linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) # This has multiple variables whereas #23 has only x and y primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle of a regular polygon with 6 sides","120",regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) +angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) +combinations = Generator("Combinations of Objects", 30, "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is","b units^2", surfaceAreaCube) -surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is","d units^2", surfaceAreaCuboid) -surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is","c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) -volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is","d units^3", volumeCuboid) -volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is","c units^3", volumeCylinder) -surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) -volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) -commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) +surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) +volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) +volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) +surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) +volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) +commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -permutations= Generator("Permutations",42, "Total permutations of 4 objects at a time from 10 objects is","5040", permutationFunc) +permutations = Generator("Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) vectorCross = Generator("Cross Product of 2 Vectors", 43, "a X b = ", "c", vectorCrossFunc) -compareFractions=Generator("Compare Fractions",44,"Which symbol represents the comparison between a/b and c/d?",">/</=",compareFractionsFunc) +compareFractions = Generator("Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) +matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) +CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index ace72a5..af38bff 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -1,46 +1,46 @@ -from math import sqrt -from mathgenerator.mathgen import * - -from hypothesis import strategies as st, given, assume - - -@given(maxSum=st.integers(min_value=1), maxAddend=st.integers(min_value=1)) -def test_additionFunc(maxSum, maxAddend): - assume(maxSum > maxAddend) - problem, solution = additionFunc(maxSum, maxAddend) - assert eval(problem[:-1]) == int(solution) - - -@given(maxMinuend=st.integers(min_value=1), maxDiff=st.integers(min_value=1)) -def test_subtractionFunc(maxMinuend, maxDiff): - assume(maxMinuend > maxDiff) - problem, solution = subtractionFunc(maxMinuend, maxDiff) - assert eval(problem[:-1]) == int(solution) - - -@given(maxRes=st.integers(min_value=1), maxMulti=st.integers(min_value=1)) -def test_multiplicationFunc(maxRes, maxMulti): - assume(maxRes > maxMulti) - problem, solution = multiplicationFunc(maxRes, maxMulti) - assert eval(problem[:-1]) == int(solution) - - -@given(maxRes=st.integers(min_value=1), maxDivid=st.integers(min_value=1)) -def test_divisionFunc(maxRes, maxDivid): - assume(maxRes > maxDivid) - problem, solution = divisionFunc(maxRes, maxDivid) - assert eval(problem[:-1]) == float(solution) - - -@given(maxRes=st.integers(min_value=1), maxModulo=st.integers(min_value=1)) -def test_moduloFunc(maxRes, maxModulo): - assume(maxRes > maxModulo) - problem, solution = moduloFunc(maxRes, maxModulo) - assert eval(problem[:-1]) == int(solution) - - -@given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) -def test_squareRootFunc(minNo, maxNo): - assume(maxNo > minNo) - problem, solution = squareRootFunc(minNo, maxNo) - assert eval(problem[:-1]) == float(solution) +from math import sqrt +from mathgenerator.mathgen import * + +from hypothesis import strategies as st, given, assume + + +@given(maxSum=st.integers(min_value=1), maxAddend=st.integers(min_value=1)) +def test_addition(maxSum, maxAddend): + assume(maxSum > maxAddend) + problem, solution = addition.func(maxSum, maxAddend) + assert eval(problem[:-1]) == int(solution) + + +@given(maxMinuend=st.integers(min_value=1), maxDiff=st.integers(min_value=1)) +def test_subtraction(maxMinuend, maxDiff): + assume(maxMinuend > maxDiff) + problem, solution = subtraction.func(maxMinuend, maxDiff) + assert eval(problem[:-1]) == int(solution) + + +@given(maxRes=st.integers(min_value=1), maxMulti=st.integers(min_value=1)) +def test_multiplication(maxRes, maxMulti): + assume(maxRes > maxMulti) + problem, solution = multiplication.func(maxRes, maxMulti) + assert eval(problem[:-1]) == int(solution) + + +@given(maxRes=st.integers(min_value=1), maxDivid=st.integers(min_value=1)) +def test_division(maxRes, maxDivid): + assume(maxRes > maxDivid) + problem, solution = division.func(maxRes, maxDivid) + assert eval(problem[:-1]) == float(solution) + + +@given(maxRes=st.integers(min_value=1), maxModulo=st.integers(min_value=1)) +def test_moduloDivision(maxRes, maxModulo): + assume(maxRes > maxModulo) + problem, solution = moduloDivision.func(maxRes, maxModulo) + assert eval(problem[:-1]) == int(solution) + + +@given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) +def test_squareRoot(minNo, maxNo): + assume(maxNo > minNo) + problem, solution = squareRoot.func(minNo, maxNo) + assert eval(problem[:-1]) == float(solution) From 8c326f827842044c719b7883aec392c58d144660 Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 22:58:11 +0530 Subject: [PATCH 56/84] Update mathgen.py --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e7da9a6..2515683 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -715,7 +715,7 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): return problem, solution def confidenceIntervalFunc(): n=random.randint(20,40) - j=random.randint(1,4) + j=random.randint(0,3) lst=random.sample(range(200,300),n) lst_per=[80 ,90, 95, 99] lst_t = [1.282, 1.645, 1.960, 2.576] From ec10674a7923354579f0d26beb922c1b90ef224f Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 13:38:09 -0400 Subject: [PATCH 57/84] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 621b2a4..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -81,4 +81,3 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | -| 50 | Surd Comparison | 25^(1/3) _ 37^(1/2) | < | surdsComparisonGen | From 801ac79b00f757f2e66650f133463ef98a70917b Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 13:54:51 -0400 Subject: [PATCH 58/84] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index d39ce06..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -81,4 +81,3 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | -| 50 | Sum of Angles of Polygon | Sum of angles of polygon with 4 sides = | 360 | sumOfAnglesOfPolygon | \ No newline at end of file From 74c3cab7db1d040d6975e6dcbc8a08029c55f6be Mon Sep 17 00:00:00 2001 From: MaxwellJpg <70202524+MaxwellJpg@users.noreply.github.com> Date: Sat, 17 Oct 2020 19:00:21 +0100 Subject: [PATCH 59/84] Update README.md corrected line 81, function id 48. Integrated denominator should be power + 1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f3ab03..a8c09dc 100644 --- a/README.md +++ b/README.md @@ -78,5 +78,5 @@ problem, solution = mathgen.genById(0) | 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | | 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | -| 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | +| 48 | Power Rule Integration | 3x^1 | (3/2)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | From 49ed99a3f9d042352ba8fb2b738e0c3da56a817f Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 14:06:00 -0400 Subject: [PATCH 60/84] Fixed createFibList indentation error --- mathgenerator/mathgen.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 3c91834..02b4c1d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -713,16 +713,16 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution - + def quadraticEquation(maxVal=100): a = random.randint(1,maxVal) c = random.randint(1,maxVal) b = random.randint(round(math.sqrt(4*a*c))+1,round(math.sqrt(4*maxVal*maxVal))) - + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a,b,c) D = math.sqrt(b*b-4*a*c) - + solution = str([round((-b+D)/(2*a), 2),round((-b-D)/(2*a), 2)]) return problem,solution @@ -797,18 +797,18 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): elif first < second: solution = "<" return problem, solution - + def fibonacciSeriesFunc(minNo=1): n = random.randint(minNo,20) def createFibList(n): - l=[] - for i in range(n): - if i<2: - l.append(i) - else: - val = l[i-1]+l[i-2] - l.append(val) - return l + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l fibList=createFibList(n) problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" solution = fibList @@ -821,7 +821,7 @@ def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): problem=f"What is {function}({angle})?" expression='math.'+function+'(math.radians(angle))' result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} - + solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition return problem,solution @@ -895,4 +895,4 @@ confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) \ No newline at end of file +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) From f323be51ae5281ad142095782177bc9d08ff52cc Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 14:14:57 -0400 Subject: [PATCH 61/84] remove pycache --- .../__pycache__/__init__.cpython-37.pyc | Bin 164 -> 0 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 29724 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc delete mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 893336fc37f23c5d8be2b5e049b532e5ed6e2ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmZ?b<>g{vU|`t!q%$5wKL!yn%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_`8r$0 zgche36~_cP$GD^xXP4v`!~_)OXQd{W6vqS<B_@|-Ca1>aCYEHRr{<*=C6?qDq4DD5 dGxIV_;^XxSDsOSv<mRW8=A_zztoaOb3ILz#EKdLc diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc deleted file mode 100644 index 82bcec4b454f2a62c9cf0b2088c33baea54dfaef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29724 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 E0A7mq+5i9m From c0a213b90c45bb321aa25c1c2690c62743b20963 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 00:05:05 +0530 Subject: [PATCH 62/84] data_mean function --- .../__pycache__/__init__.cpython-37.pyc | Bin 164 -> 160 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 29724 -> 33916 bytes mathgenerator/mathgen.py | 56 +++++++++++++----- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc index 893336fc37f23c5d8be2b5e049b532e5ed6e2ea6..8b0d08300961a9cf36125e988780744bcb4225b9 100644 GIT binary patch delta 57 zcmZ3&xPXz{iI<m)fq{YHsY&-lZVM$(XRDad;?$zz7>|G$m(=3ylKg@gkHqBclKiC9 MqO{cFl8Kqt0L~v0h5!Hn delta 61 zcmZ3$xP+10iI<m)fq{Wx=abHf+!kuS&Q>v@#i>QbF#*moE~&-YCHVz00Y&*)smUe9 QF#$!1$t9V|sS{JJ0W}X4lK=n! diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc index 82bcec4b454f2a62c9cf0b2088c33baea54dfaef..26c552d300e0698bcd1b325c1363a3d7fbd2a03c 100644 GIT binary patch delta 8720 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 Yg-nDPC9py<MhQj;MkXZ~C72`_0muUfK>z>% delta 4959 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 diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index fc1fc53..4e6c751 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -798,21 +798,21 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): solution = "<" return problem, solution -def fibonacciSeriesFunc(minNo=1): - n = random.randint(minNo,20) - def createFibList(n): - l=[] - for i in range(n): - if i<2: - l.append(i) - else: - val = l[i-1]+l[i-2] - l.append(val) - return l - fibList=createFibList(n) - problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" - solution = fibList - return problem,solution +# def fibonacciSeriesFunc(minNo=1): +# n = random.randint(minNo,20) +# def createFibList(n): +# l=[] +# for i in range(n): +# if i<2: +# l.append(i) +# else: +# val = l[i-1]+l[i-2] +# l.append(val) +# return l +# fibList=createFibList(n) +# problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" +# solution = fibList +# return problem,solution def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one angle=random.choice(angles) @@ -826,6 +826,29 @@ def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): return problem,solution + +def data_desc(number_values=15,minval=5,maxval=50): + random_list=[] + for i in range(number_values): + n=random.randint(minval,maxval) + random_list.append(n) + a=sum(random_list) + mean=a/number_values + var=0 + for i in range(number_values): + var+=(random_list[i]-mean)**2 + print(random_list) + print(mean) + print(var/number_values) + print((var/number_values)**0.5) + problem="Find the mean,standard deviation and variance for the data"+str(random_list) + solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) + return problem,solution + + + + + # || Class Instances #Format is: @@ -887,5 +910,6 @@ diceSumProbability=Generator("Probability of a certain sum appearing on faces of exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) +# fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) +data_summary=Generator("Mean,Standard Deviation,Variance",58,"a,b,c","Mean:a+b+c/3,Std,Var",data_desc) \ No newline at end of file From 6b63ecf292390b4ba7fb9b23fc8e0f6f18494eda Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 00:08:30 +0530 Subject: [PATCH 63/84] Fibinocci uncommented --- mathgenerator/mathgen.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 4e6c751..a12331f 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -798,21 +798,21 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): solution = "<" return problem, solution -# def fibonacciSeriesFunc(minNo=1): -# n = random.randint(minNo,20) -# def createFibList(n): -# l=[] -# for i in range(n): -# if i<2: -# l.append(i) -# else: -# val = l[i-1]+l[i-2] -# l.append(val) -# return l -# fibList=createFibList(n) -# problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" -# solution = fibList -# return problem,solution +def fibonacciSeriesFunc(minNo=1): + n = random.randint(minNo,20) + def createFibList(n): + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l + fibList=createFibList(n) + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + solution = fibList + return problem,solution def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one angle=random.choice(angles) @@ -910,6 +910,6 @@ diceSumProbability=Generator("Probability of a certain sum appearing on faces of exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -# fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) +fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) data_summary=Generator("Mean,Standard Deviation,Variance",58,"a,b,c","Mean:a+b+c/3,Std,Var",data_desc) \ No newline at end of file From c6e3d8a8fdccad2283e3d3f2c1bf505f45884955 Mon Sep 17 00:00:00 2001 From: Priyadarshan Mohanty <priyadarshan.mohanty@loginradius.com> Date: Sun, 18 Oct 2020 00:19:23 +0530 Subject: [PATCH 64/84] Surface Area of Sphere added --- mathgenerator/mathgen.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 02b4c1d..e3f8995 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -476,6 +476,14 @@ def surfaceAreaCuboid(maxSide = 20, unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution +def surfaceAreaSphere(maxSide = 20, unit = 'm'): + r = random.randint(1, maxSide) + + problem = f"Surface area of Sphere with radius = {r}{unit} is" + ans = 4 * math.pi * r * r + solution = f"{ans} {unit}^2" + return problem, solution + def volumeCuboid(maxSide = 20, unit = 'm'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) @@ -896,3 +904,4 @@ surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) \ No newline at end of file From a798e9e3e54bb56a33b9ce63ad2073ca405c21a5 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 00:20:36 +0530 Subject: [PATCH 65/84] Removed Pycache --- .../__pycache__/__init__.cpython-37.pyc | Bin 160 -> 0 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 33916 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc delete mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 8b0d08300961a9cf36125e988780744bcb4225b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ?b<>g{vU|@J^(j5<?AA<-OW@KPsaA06yC}v?`U`SyIX3%8xTggxa5=IceJe{p# zLW@(2ieo$iVq8*-vrF;|VmuO)vrF=mQj5}3i%Vj16H7AEQ}a@b5=-)n(0K9jnR%Hd Z@$q^EmA5!-a`RJ4b5iX<R(u9I0|1=bDnbAN diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc deleted file mode 100644 index 26c552d300e0698bcd1b325c1363a3d7fbd2a03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33916 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 From c76357186b74cc2ffdb9d8841628415dc8177985 Mon Sep 17 00:00:00 2001 From: Priyadarshan Mohanty <priyadarshan.mohanty@loginradius.com> Date: Sun, 18 Oct 2020 00:22:13 +0530 Subject: [PATCH 66/84] Function path changed --- mathgenerator/mathgen.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e3f8995..784d0b3 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -476,14 +476,6 @@ def surfaceAreaCuboid(maxSide = 20, unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution -def surfaceAreaSphere(maxSide = 20, unit = 'm'): - r = random.randint(1, maxSide) - - problem = f"Surface area of Sphere with radius = {r}{unit} is" - ans = 4 * math.pi * r * r - solution = f"{ans} {unit}^2" - return problem, solution - def volumeCuboid(maxSide = 20, unit = 'm'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) @@ -841,6 +833,14 @@ def sumOfAnglesOfPolygonFunc(maxSides = 12): solution = sum return problem, solution +def surfaceAreaSphere(maxSide = 20, unit = 'm'): + r = random.randint(1, maxSide) + + problem = f"Surface area of Sphere with radius = {r}{unit} is" + ans = 4 * math.pi * r * r + solution = f"{ans} {unit}^2" + return problem, solution + # || Class Instances #Format is: From 954b47fecdae7366802af7b6a4a5c7a1edce2ba1 Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sat, 17 Oct 2020 22:53:55 +0400 Subject: [PATCH 67/84] added 4 test and an "=" in binaryComplement1sFunc --- mathgenerator/mathgen.py | 2 +- tests/test_mathgen.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 02b4c1d..b1ce210 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -70,7 +70,7 @@ def binaryComplement1sFunc(maxDigits = 10): question += temp answer += "0" if temp == "1" else "1" - problem = question + problem = question+"=" solution = answer return problem, solution diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index ace72a5..2d6e590 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -39,8 +39,42 @@ def test_moduloFunc(maxRes, maxModulo): assert eval(problem[:-1]) == int(solution) +@given(maxDigits=st.integers(min_value=1, max_value=16)) +def test_binaryComplement1sFunc(maxDigits): + assume(maxDigits > 1) + problem, solution = binaryComplement1sFunc(maxDigits) + assert "".join('1' if i == '0' else '0' for i in problem[:-1]) == solution + + @given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) def test_squareRootFunc(minNo, maxNo): assume(maxNo > minNo) problem, solution = squareRootFunc(minNo, maxNo) assert eval(problem[:-1]) == float(solution) + + +@given(maxSquareNum=st.integers(min_value=1)) +def test_squareFunc(maxSquareNum): + assume(maxSquareNum > 1) + problem, solution = squareFunc(maxSquareNum) + assert pow(int(problem[:-3]), 2) == int(solution) + + +@given(maxVal=st.integers(min_value=1)) +def test_lcmFunc(maxVal): + assume(maxVal > 1) + problem, solution = lcmFunc(maxVal) + split_arr = problem.split(' ') + mult = int(split_arr[2])*int(split_arr[4]) + assert mult if mult != pow(int(split_arr[2]), 2) else int( + split_arr[2]) == int(solution) + + +@given(maxVal=st.integers(min_value=1)) +def test_gcdFunc(maxVal): + assume(maxVal > 1) + problem, solution = gcdFunc(maxVal) + split_arr = problem.split(' ') + mult = int(split_arr[2])*int(split_arr[4]) + assert mult if mult != pow(int(split_arr[2]), 2) else int( + split_arr[2]) == int(solution) \ No newline at end of file From e416d597fa2c8e287fe562f99c454e7eb3cd5925 Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sat, 17 Oct 2020 22:55:04 +0400 Subject: [PATCH 68/84] fixed whitespaces --- mathgenerator/mathgen.py | 4 ++-- tests/test_mathgen.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index b1ce210..390bc96 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -116,7 +116,7 @@ def gcdFunc(maxVal=20): x, y = a, b while(y): x, y = y, x % y - problem = f"GCD of {a} and {b} = " + problem = f"GCD of {a} and {b} =" solution = str(x) return problem, solution @@ -128,7 +128,7 @@ def lcmFunc(maxVal=20): while(y): x, y = y, x % y d = c // x - problem = f"LCM of {a} and {b} = " + problem = f"LCM of {a} and {b} =" solution = str(d) return problem, solution diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index 2d6e590..a6aa078 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -77,4 +77,4 @@ def test_gcdFunc(maxVal): split_arr = problem.split(' ') mult = int(split_arr[2])*int(split_arr[4]) assert mult if mult != pow(int(split_arr[2]), 2) else int( - split_arr[2]) == int(solution) \ No newline at end of file + split_arr[2]) == int(solution) From 95178d8b46b2ea7e04069ad74c78ca916298c7ad Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 17:22:11 -0400 Subject: [PATCH 69/84] Version Number change --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e07aa01..4a578ab 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='mathgenerator', - version='1.1.1', + version='1.1.2', description='An open source solution for generating math problems', url='https://github.com/todarith/mathgenerator', author='Luke Weiler', From c9db6ff74776f78a0c88635f68ea2aa7007929e2 Mon Sep 17 00:00:00 2001 From: Swayam Gupta <guptaswayam075@gmail.com> Date: Sun, 18 Oct 2020 03:32:08 +0530 Subject: [PATCH 70/84] added volumeSphereFunc and updated README.md --- README.md | 137 +++++++++++++++++++++++++-------------- mathgenerator/mathgen.py | 15 +++-- 2 files changed, 96 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index a8c09dc..7643a53 100644 --- a/README.md +++ b/README.md @@ -30,53 +30,90 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 29+33= | 62 | addition | -| 1 | Subtraction | 62-7= | 55 | subtraction | -| 2 | Multiplication | 93*1= | 93 | multiplication | -| 3 | Division | 59/47= | 1.2553191489361701 | division | -| 4 | Binary Complement 1s | 001110000 | 110001111 | binaryComplement1s | -| 5 | Modulo Division | 89%34= | 21 | moduloDivision | -| 6 | Square Root | sqrt(16)= | 4 | squareRoot | -| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | -| 8 | Square | 12^2= | 144 | square | -| 9 | LCM (Least Common Multiple) | LCM of 10 and 1 = | 10 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 12 and 5 = | 1 | gcd | -| 11 | Basic Algebra | 8x + 7 = 10 | 3/8 | basicAlgebra | -| 12 | Logarithm | log3(729) | 6 | log | -| 13 | Easy Division | 378/21 = | 18 | intDivision | -| 14 | Decimal to Binary | Binary of 4= | 100 | decimalToBinary | -| 15 | Binary to Decimal | 10011 | 19 | binaryToDecimal | -| 16 | Fraction Division | (1/2)/(4/3) | 3/8 | fractionDivision | -| 17 | Integer Multiplication with 2x2 Matrix | 2 * [[0, 7], [7, 7]] = | [[0,14],[14,14]] | intMatrix22Multiplication | -| 18 | Area of Triangle | Area of triangle with side lengths: 9 14 15 = | 61.644140029689765 | areaOfTriangle | -| 19 | Triangle exists check | Does triangle with sides 33, 6 and 43 exist? | No | doesTriangleExist | -| 20 | Midpoint of the two point | (-15,-10),(-5,2)= | (-10.0,-4.0) | midPointOfTwoPoint | -| 21 | Factoring Quadratic | x^2-17x+72 | (x-9)(x-8) | factoring | -| 22 | Third Angle of Triangle | Third angle of triangle with angles 4 and 31 = | 145 | thirdAngleOfTriangle | -| 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | -| 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | -| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | -| 26 | Linear Equations | -11x + -16y = -302 , 1x + 20y = 250 | x = 10, y = 12 | linearEquations | -| 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | -| 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | -| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | -| 30 | Combinations of Objects | Number of combinations from 13 objects picked 1 at a time | 13 | combinations | -| 31 | Factorial | 2! = | 2 | factorial | -| 32 | Surface Area of Cube | Surface area of cube with side = 13m is | 1014 m^2 | surfaceAreaCubeGen | -| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 5m, 3m, 7m is | 142 m^2 | surfaceAreaCuboidGen | -| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 15m and radius = 7m is | 967 m^2 | surfaceAreaCylinderGen | -| 35 | Volum of Cube | Volume of cube with side = 11m is | 1331 m^3 | volumeCubeGen | -| 36 | Volume of Cuboid | Volume of cuboid with sides = 6m, 1m, 10m is | 60 m^3 | volumeCuboidGen | -| 37 | Volume of cylinder | Volume of cylinder with height = 26m and radius = 15m is | 18378 m^3 | volumeCylinderGen | -| 38 | Surface Area of cone | Surface area of cone with height = 46m and radius = 14m is | 2730 m^2 | surfaceAreaConeGen | -| 39 | Volume of cone | Volume of cone with height = 7m and radius = 11m is | 886 m^3 | volumeConeGen | -| 40 | Common Factors | Common Factors of 91 and 51 = | [1] | commonFactors | -| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 6/4x + 5 and y = -7/2x + 3 | (-2/5, 22/5) | intersectionOfTwoLines | -| 42 | Permutations | Number of Permutations from 13 objects picked 4 at a time = | 17160 | permutations | -| 43 | Cross Product of 2 Vectors | [-14, 13, 20] X [-5, -18, 19] = | [607, 166, 317] | vectorCross | -| 44 | Compare Fractions | Which symbol represents the comparison between 8/3 and 6/7? | > | compareFractions | -| 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | -| 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | -| 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | -| 48 | Power Rule Integration | 3x^1 | (3/2)x^2 + c | powerRuleIntegration | -| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | +| 0 | Addition | 42+2= | 44 | addition | +| 1 | Subtraction | 32-26= | 6 | subtraction | +| 2 | Multiplication | 77*1= | 77 | multiplication | +| 3 | Division | 66/9= | 7.333333333333333 | division | +| 4 | Binary Complement 1s | 1010000 | 0101111 | binaryComplement1s | +| 5 | Modulo Division | 61%35= | 26 | moduloDivision | +| 6 | Square Root | sqrt(1)= | 1 | squareRoot | +| 7 | Power Rule Differentiation | 5x^5 | 25x^4 | powerRuleDifferentiation | +| 8 | Square | 20^2= | 400 | square | +| 9 | LCM (Least Common Multiple) | LCM of 19 and 5 = | 95 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 10 and 11 = | 1 | gcd | +| 11 | Basic Algebra | 3x + 7 = 8 | 1/3 | basicAlgebra | +| 12 | Logarithm | log2(128) | 7 | log | +| 13 | Easy Division | 306/18 = | 17 | intDivision | +| 14 | Decimal to Binary | Binary of 28= | 11100 | decimalToBinary | +| 15 | Binary to Decimal | 10001101 | 141 | binaryToDecimal | +| 16 | Fraction Division | (4/1)/(6/3) | 2 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 5 * [[10, 3], [0, 1]] = | [[50,15],[0,5]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 13 2 14 = | 11.659223816361019 | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 3, 4 and 25 exist? | No | doesTriangleExist | +| 20 | Midpoint of the two point | (4,-11),(17,-5)= | (10.5,-8.0) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-12x+35 | (x-7)(x-5) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 20 and 62 = | 98 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | 5x - 7y = -84, 4x + 5y = 7 | x = -7, y = 7 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (5, -18) and (1, 19) | sqrt(1385) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 15 and 5 = | 15.81 | pythagoreanTheorem | +| 26 | Linear Equations | -6x + -17y = -220 +-13x + -19y = -120 | x = -20, y = 20 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 62 | [2, 31] | primeFactors | +| 28 | Fraction Multiplication | (8/4)*(1/2) | 1 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 19 sides | 161.05 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 12 objects picked 1 at a time | 12 | combinations | +| 31 | Factorial | 0! = | 1 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 8m is | 384 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 18m, 17m, 1m is | 682 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 31m and radius = 1m is | 201 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 9m is | 729 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 20m, 1m, 10m is | 200 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 7m and radius = 7m is | 1077 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 47m and radius = 13m is | 2522 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 4m and radius = 4m is | 67 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 20 and 90 = | [1, 2, 5, 10] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = -3/6x + 1 and y = 0/2x + 6 | (-10, 6) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 11 objects picked 2 at a time = | 110 | permutations | +| 43 | Cross Product of 2 Vectors | [-19, -3, 2] X [-15, -12, 7] = | [3, 103, 183] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 8/6 and 3/1? | < | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 9862 dollars, 4% rate of interest and for a time period of 1 years is = | 394.48 | simpleInterest | +| 46 | Multiplication of two matrices | Multiply + -50 36 7 -26 -2 63 + 88 -37 60 -19 61 -56 + 48 -5 69 -87 -64 -92 + -84 -50 -79 -19 86 -13 + 0 28 12 -14 73 -49 + 94 -90 2 26 -38 19 + 2 -11 79 -77 98 -77 + -87 70 72 -32 64 -99 + + and + + 34 32 -6 -32 46 -23 78 -81 -18 + -17 24 49 -62 -50 77 38 -98 -64 + -23 -78 43 5 -83 -5 4 -92 -16 + 46 -47 -92 52 -25 -37 44 51 -7 + 20 26 70 37 96 -73 49 84 42 + -72 -15 -80 -24 58 -47 -41 45 -69 | -8245 -1057 -423 -3535 -569 2034 -6329 1219 -5765 + 6619 567 10737 2391 4001 -6291 10147 -7387 6383 + 1472 -161 13318 -5565 -12574 10381 638 -23699 2621 + 1593 5598 3465 7899 13170 -6487 -4857 24642 10618 + 3592 3027 12206 1473 2120 -412 6082 -635 4561 + 3748 -1803 -11460 2072 5462 -8183 2423 11 947 + 2400 960 22950 2483 952 -1974 4625 -5512 9372 + 1132 -2067 22392 1884 -12276 8196 1949 -7148 5677 | matrixMultiplication | +| 47 | Cube Root | cuberoot of 771 upto 2 decimal places is: | 9.17 | CubeRoot | +| 48 | Power Rule Integration | 1x^3 + 8x^8 + 10x^10 | (1/3)x^4 + (8/8)x^9 + (10/10)x^11 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 52 , 84, 154 = | 70 | fourthAngleOfQuadrilateral | +| 50 | Quadratic Equation | Zeros of the Quadratic Equation 51x^2+152x+80=0 | [-0.68, -2.3] | quadraticEquationSolve | +| 51 | HCF (Highest Common Factor) | HCF of 11 and 7 = | 1 | hcf | +| 52 | Probability of a certain sum appearing on faces of dice | If 2 dice are rolled at the same time, the probability of getting a sum of 11 = | 2/36 | diceSumProbability | +| 53 | Exponentiation | 9^9 = | 387420489 | exponentiation | +| 54 | Confidence interval For sample S | The confidence interval for sample [291, 254, 274, 207, 253, 289, 268, 280, 225, 240, 278, 270, 247, 252, 211, 212, 295, 241, 290, 206, 222, 263, 264, 228, 229, 256, 209, 292] with 99% confidence is | (265.560249263099, 237.72546502261523) | confidenceInterval | +| 55 | Comparing surds | Fill in the blanks 16^(1/7) _ 67^(1/6) | < | surdsComparison | +| 56 | Fibonacci Series | The Fibonacci Series of the first 11 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | fibonacciSeries | +| 57 | Trigonometric Values | What is cos(60)? | 1/2 | basicTrigonometry | +| 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | +| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | +| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | +| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 28971a8..610e821 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -914,13 +914,16 @@ def surfaceAreaSphere(maxSide = 20, unit = 'm'): ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution - +def volumeSphereFunc(maxRadius = 100): + r=random.randint(1,maxRadius) + problem=f"Volume of sphere with radius {r} m = " + ans=(4*math.pi/3)*r*r*r + solution = f"{ans} m^3" + return problem,solution # || Class Instances # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) - - addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) @@ -944,8 +947,7 @@ doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with s midPointOfTwoPoint = Generator("Midpoint of the two point", 20, "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", - systemOfEquationsFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3",systemOfEquationsFunc) distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) # This has multiple variables whereas #23 has only x and y @@ -982,4 +984,5 @@ fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a n basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) \ No newline at end of file +surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) +volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) From f8318be9776731db46be03fe86347b9184462e13 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 19:16:29 -0400 Subject: [PATCH 71/84] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4a578ab..0b546c2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='mathgenerator', - version='1.1.2', + version='1.1.3', description='An open source solution for generating math problems', url='https://github.com/todarith/mathgenerator', author='Luke Weiler', From 07314e280d4dc336edf206567629d8c4504c3641 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:15:10 -0400 Subject: [PATCH 72/84] Update issue templates --- .github/ISSUE_TEMPLATE/new-generator-idea.md | 16 ++++++++++++++++ .../request-changes-to-a-generator.md | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/new-generator-idea.md create mode 100644 .github/ISSUE_TEMPLATE/request-changes-to-a-generator.md diff --git a/.github/ISSUE_TEMPLATE/new-generator-idea.md b/.github/ISSUE_TEMPLATE/new-generator-idea.md new file mode 100644 index 0000000..b986c9f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new-generator-idea.md @@ -0,0 +1,16 @@ +--- +name: New Generator Idea +about: Use this template if you have an idea for a new generator. +title: '' +labels: New generator, hacktoberfest +assignees: '' + +--- + +**Example Problem:** + +**Example Solution:** + +**Further explanation:** + +**Would you like to be assigned to this:** diff --git a/.github/ISSUE_TEMPLATE/request-changes-to-a-generator.md b/.github/ISSUE_TEMPLATE/request-changes-to-a-generator.md new file mode 100644 index 0000000..9fa48e2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request-changes-to-a-generator.md @@ -0,0 +1,12 @@ +--- +name: Request changes to a generator +about: If you find a faulty generator that needs a fix, use this template. +title: '' +labels: bug, hacktoberfest +assignees: '' + +--- + +**Name or Id of generator:** + +**Issue:** From 83e31cdce738ec7b52dd52d29b961529d89306a2 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:16:44 -0400 Subject: [PATCH 73/84] Update issue templates --- .github/ISSUE_TEMPLATE/custom-issue.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/custom-issue.md diff --git a/.github/ISSUE_TEMPLATE/custom-issue.md b/.github/ISSUE_TEMPLATE/custom-issue.md new file mode 100644 index 0000000..77fd3e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom-issue.md @@ -0,0 +1,10 @@ +--- +name: Custom Issue +about: If your issue lies outside of the other templates +title: '' +labels: '' +assignees: '' + +--- + + From 7802bdbdb428e24d3d73c213992c496df332cfb6 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:18:08 -0400 Subject: [PATCH 74/84] Update issue templates --- .github/ISSUE_TEMPLATE/other-issue.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/other-issue.md diff --git a/.github/ISSUE_TEMPLATE/other-issue.md b/.github/ISSUE_TEMPLATE/other-issue.md new file mode 100644 index 0000000..7b37378 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/other-issue.md @@ -0,0 +1,10 @@ +--- +name: Other Issue +about: If your issue lies outside of the other templates +title: '' +labels: '' +assignees: '' + +--- + + From 4331db74d0010319fa50707798700f2d1a3fef35 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:20:20 -0400 Subject: [PATCH 75/84] Remove custom issue template --- .github/ISSUE_TEMPLATE/custom-issue.md | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/custom-issue.md diff --git a/.github/ISSUE_TEMPLATE/custom-issue.md b/.github/ISSUE_TEMPLATE/custom-issue.md deleted file mode 100644 index 77fd3e9..0000000 --- a/.github/ISSUE_TEMPLATE/custom-issue.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Custom Issue -about: If your issue lies outside of the other templates -title: '' -labels: '' -assignees: '' - ---- - - From bbe80963ef75b03e82bf24a2ae8eb51a18db4482 Mon Sep 17 00:00:00 2001 From: Sajag Swami <65067354+SunTzunami@users.noreply.github.com> Date: Sun, 18 Oct 2020 11:47:10 +0530 Subject: [PATCH 76/84] Rectified the "fourthAngleOfQuadriFunc" function. The previous version of this function generated angles for convex quadrilaterals only. The new version generates angles for concave quadrilateral as well. --- mathgenerator/mathgen.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..1ee6bb5 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -758,18 +758,23 @@ def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): solution = solution + " + c" return problem, solution - -def fourthAngleOfQuadriFunc(maxAngle=180): - angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, 240 - angle1) - angle3 = random.randint(1, 340 - (angle1 + angle2)) - sum_ = angle1 + angle2 + angle3 - angle4 = 360 - sum_ - problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" - solution = angle4 +def fourthAngleOfQuadriFunc(total=360): + def rand_anglesquad(): + a=180 + b=0 + c=0 + d=0 + while(c==0 or d==0): + a=random.randint(1, total-20) + b=random.randint(1, total-a-10) + c=random.randint(1, total-a-b) + d=total-a-b-c + return a, b, c, d + a, b, c, d=rand_anglesquad() + problem="Fourth angle of a quadrilateral with three angles {}, {}, {} (in degrees)".format(a, b, c) + solution=d return problem, solution - def quadraticEquation(maxVal=100): a = random.randint(1, maxVal) c = random.randint(1, maxVal) @@ -909,11 +914,11 @@ def dataSummaryFunc(number_values=15,minval=5,maxval=50): def surfaceAreaSphere(maxSide = 20, unit = 'm'): r = random.randint(1, maxSide) - problem = f"Surface area of Sphere with radius = {r}{unit} is" ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution + def volumeSphereFunc(maxRadius = 100): r=random.randint(1,maxRadius) problem=f"Volume of sphere with radius {r} m = " @@ -973,7 +978,7 @@ simpleInterest = Generator("Simple Interest", 45, "Simple interest for a princip matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) +fourthAngleOfQuadrilateral = Generator("Fourth angle of a quadrilateral", 49, "Fourth angle of a uadrilateral with angles 100, 50, 80 (in degrees)=", "130", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) From dcd2d1e89e917b26fe1f4d69b17353cf1896c60d Mon Sep 17 00:00:00 2001 From: Sajag Swami <65067354+SunTzunami@users.noreply.github.com> Date: Sun, 18 Oct 2020 11:48:17 +0530 Subject: [PATCH 77/84] rectified a typo --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1ee6bb5..18a508c 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -978,7 +978,7 @@ simpleInterest = Generator("Simple Interest", 45, "Simple interest for a princip matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth angle of a quadrilateral", 49, "Fourth angle of a uadrilateral with angles 100, 50, 80 (in degrees)=", "130", fourthAngleOfQuadriFunc) +fourthAngleOfQuadrilateral = Generator("Fourth angle of a quadrilateral", 49, "Fourth angle of a quadrilateral with angles 100, 50, 80 (in degrees)=", "130", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) From 0ab9edf57bffa4092940d8126434d612ce75bd46 Mon Sep 17 00:00:00 2001 From: Yuval Goldberg <yuvigoldi@hotmail.com> Date: Sun, 18 Oct 2020 11:16:48 +0300 Subject: [PATCH 78/84] Fix lint errors, adding a formatter --- Makefile | 8 +- dev-requirements.txt | 3 +- makeReadme.py | 12 +- mathgenerator/mathgen.py | 377 ++++++++++++++++++++++++--------------- 4 files changed, 247 insertions(+), 153 deletions(-) diff --git a/Makefile b/Makefile index bd04e35..9414a0b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ -FLAKE_FLAGS = --ignore=E501,F401,F403,F405 +IGNORE_ERRORS = E501,F401,F403,F405 +PKG = mathgenerator + +format: + python -m autopep8 --ignore=$(IGNORE_ERRORS) -i $(PKG)/* lint: - python -m flake8 $(FLAKE_FLAGS) + python -m flake8 --ignore=$(IGNORE_ERRORS) $(PKG) test: python -m pytest --verbose -s tests diff --git a/dev-requirements.txt b/dev-requirements.txt index 6e46af4..c29cf4e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,3 +1,4 @@ pytest hypothesis -flake8 \ No newline at end of file +flake8 +autopep8 \ No newline at end of file diff --git a/makeReadme.py b/makeReadme.py index 7ca8f2c..64f7989 100644 --- a/makeReadme.py +++ b/makeReadme.py @@ -1,10 +1,10 @@ -#To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py +# To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py wList = getGenList() allRows = [] -f=open('mathgen.py') -lines=f.readlines() -line = 720 #This has to be changed depending on which line the first generator appears on +f = open('mathgen.py') +lines = f.readlines() +line = 720 # This has to be changed depending on which line the first generator appears on for item in wList: myGen = item[2] prob, sol = myGen() @@ -13,10 +13,10 @@ for item in wList: instName = lines[line] def_name = instName[:instName.find('=')].strip() row = [myGen.id, myGen.title, prob, sol, def_name] - line+=1 + line += 1 allRows.append(row) -g=open('../README.md', "a") +g = open('../README.md', "a") for row in allRows: tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" g.write(tableLine) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..6f37443 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -36,7 +36,8 @@ def getGenList(): def additionFunc(maxSum=99, maxAddend=50): a = random.randint(0, maxAddend) - b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + b = random.randint(0, min((maxSum - a), maxAddend)) c = a + b problem = str(a) + "+" + str(b) + "=" solution = str(c) @@ -78,7 +79,7 @@ def binaryComplement1sFunc(maxDigits=10): question += temp answer += "0" if temp == "1" else "1" - problem = question+"=" + problem = question + "=" solution = answer return problem, solution @@ -248,7 +249,8 @@ def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): c = random.randint(1, maxC) s = (a + b + c) / 2 area = (s * (s - a) * (s - b) * (s - c)) ** 0.5 - problem = "Area of triangle with side lengths: " + str(a) + " " + str(b) + " " + str(c) + " = " + problem = "Area of triangle with side lengths: " + \ + str(a) + " " + str(b) + " " + str(c) + " = " solution = area return problem, solution @@ -259,7 +261,8 @@ def isTriangleValidFunc(maxSideLength=50): sideC = random.randint(1, maxSideLength) sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & ( + sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: solution = "Yes" @@ -352,7 +355,8 @@ def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): # No redundant 1s y_coeff = abs(coeffs[1]) if abs(coeffs[1]) != 1 else '' # Don't include if 0, unless x is also 0 (probably never happens) - y_str = f'{y_coeff}y' if coeffs[1] != 0 else ('' if x_str != '' else '0') + y_str = f'{y_coeff}y' if coeffs[1] != 0 else ( + '' if x_str != '' else '0') return f'{x_str}{op}{y_str} = {coeffs[2]}' problem = f"{coeffToFuncString(new_c1)}, {coeffToFuncString(new_c2)}" @@ -391,7 +395,8 @@ def linearEquationsFunc(n=2, varRange=20, coeffRange=20): soln = [random.randint(-varRange, varRange) for i in range(n)] problem = list() - solution = ", ".join(["{} = {}".format(vars[i], soln[i]) for i in range(n)]) + solution = ", ".join(["{} = {}".format(vars[i], soln[i]) + for i in range(n)]) for _ in range(n): coeff = [random.randint(-coeffRange, coeffRange) for i in range(n)] res = sum([coeff[i] * soln[i] for i in range(n)]) @@ -469,7 +474,8 @@ def combinationsFunc(maxlength=20): b = random.randint(0, 9) solution = int(factorial(a) / (factorial(b) * factorial(a - b))) - problem = "Number of combinations from {} objects picked {} at a time ".format(a, b) + problem = "Number of combinations from {} objects picked {} at a time ".format( + a, b) return problem, solution @@ -615,8 +621,10 @@ def intersectionOfTwoLinesFunc( x = f"{x.numerator}/{x.denominator}" return x - m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) - m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + m1 = (random.randint(minM, maxM), random.randint( + minDenominator, maxDenominator)) + m2 = (random.randint(minM, maxM), random.randint( + minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) b2 = random.randint(minB, maxB) equation1 = generateEquationString(m1, b1) @@ -642,7 +650,8 @@ def permutationFunc(maxlength=20): a = random.randint(10, maxlength) b = random.randint(0, 9) solution = int(math.factorial(a) / (math.factorial(a - b))) - problem = "Number of Permutations from {} objects picked {} at a time = ".format(a, b) + problem = "Number of Permutations from {} objects picked {} at a time = ".format( + a, b) return problem, solution @@ -685,7 +694,8 @@ def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): b = random.randint(1, maxRate) c = random.randint(1, maxTime) d = (a * b * c) / 100 - problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " + problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str( + b) + "% rate of interest and for a time period of " + str(c) + " years is = " solution = round(d, 2) return problem, solution @@ -718,7 +728,8 @@ def matrixMultiplicationFunc(maxVal=100): for t in range(n): temp += a[r][t] * b[t][c] res[r].append(temp) - problem = f"Multiply \n{a_string}\n and \n\n{b_string}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + # consider using a, b instead of a_string, b_string if the problem doesn't look right + problem = f"Multiply \n{a_string}\n and \n\n{b_string}" solution = matrixMultiplicationFuncHelper(res) return problem, solution @@ -754,7 +765,8 @@ def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "(" + str(coefficient) + "/" + str(exponent) + ")x^" + str(exponent + 1) + solution += "(" + str(coefficient) + "/" + \ + str(exponent) + ")x^" + str(exponent + 1) solution = solution + " + c" return problem, solution @@ -773,15 +785,18 @@ def fourthAngleOfQuadriFunc(maxAngle=180): def quadraticEquation(maxVal=100): a = random.randint(1, maxVal) c = random.randint(1, maxVal) - b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) + b = random.randint(round(math.sqrt(4 * a * c)) + 1, + round(math.sqrt(4 * maxVal * maxVal))) problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) D = math.sqrt(b * b - 4 * a * c) - solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + solution = str([round((-b + D) / (2 * a), 2), + round((-b - D) / (2 * a), 2)]) return problem, solution + def hcfFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -792,61 +807,67 @@ def hcfFunc(maxVal=20): solution = str(x) return problem, solution + def DiceSumProbFunc(maxDice=3): - a = random.randint(1,maxDice) - b = random.randint(a,6*a) - count=0 - for i in [1,2,3,4,5,6]: - if a==1: - if i==b: - count=count+1 - elif a==2: - for j in [1,2,3,4,5,6]: - if i+j==b: - count=count+1 - elif a==3: - for j in [1,2,3,4,5,6]: - for k in [1,2,3,4,5,6]: - if i+j+k==b: - count=count+1 - problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) - solution="{}/{}".format(count, 6**a) + a = random.randint(1, maxDice) + b = random.randint(a, 6 * a) + count = 0 + for i in [1, 2, 3, 4, 5, 6]: + if a == 1: + if i == b: + count = count + 1 + elif a == 2: + for j in [1, 2, 3, 4, 5, 6]: + if i + j == b: + count = count + 1 + elif a == 3: + for j in [1, 2, 3, 4, 5, 6]: + for k in [1, 2, 3, 4, 5, 6]: + if i + j + k == b: + count = count + 1 + problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format( + a, b) + solution = "{}/{}".format(count, 6**a) return problem, solution -def exponentiationFunc(maxBase = 20,maxExpo = 10): + +def exponentiationFunc(maxBase=20, maxExpo=10): base = random.randint(1, maxBase) expo = random.randint(1, maxExpo) problem = f"{base}^{expo} =" solution = str(base ** expo) return problem, solution + def confidenceIntervalFunc(): - n=random.randint(20,40) - j=random.randint(0,3) - lst=random.sample(range(200,300),n) - lst_per=[80 ,90, 95, 99] + n = random.randint(20, 40) + j = random.randint(0, 3) + lst = random.sample(range(200, 300), n) + lst_per = [80, 90, 95, 99] lst_t = [1.282, 1.645, 1.960, 2.576] - mean=0 - sd=0 + mean = 0 + sd = 0 for i in lst: - count= i + mean - mean=count - mean = mean/n + count = i + mean + mean = count + mean = mean / n for i in lst: - x=(i-mean)**2+sd - sd=x - sd=sd/n - standard_error = lst_t[j]*math.sqrt(sd/n) - problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) - solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + x = (i - mean)**2 + sd + sd = x + sd = sd / n + standard_error = lst_t[j] * math.sqrt(sd / n) + problem = 'The confidence interval for sample {} with {}% confidence is'.format( + [x for x in lst], lst_per[j]) + solution = '({}, {})'.format(mean + standard_error, mean - standard_error) return problem, solution -def surdsComparisonFunc(maxValue = 100, maxRoot = 10): - radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) - degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) + +def surdsComparisonFunc(maxValue=100, maxRoot=10): + radicand1, radicand2 = tuple(random.sample(range(1, maxValue), 2)) + degree1, degree2 = tuple(random.sample(range(1, maxRoot), 2)) problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" - first = math.pow(radicand1, 1/degree1) - second = math.pow(radicand2, 1/degree2) + first = math.pow(radicand1, 1 / degree1) + second = math.pow(radicand2, 1 / degree2) solution = "=" if first > second: solution = ">" @@ -854,135 +875,203 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): solution = "<" return problem, solution + def fibonacciSeriesFunc(minNo=1): - n = random.randint(minNo,20) + n = random.randint(minNo, 20) + def createFibList(n): - l=[] + fibList = [] for i in range(n): - if i<2: - l.append(i) + if i < 2: + fibList.append(i) else: - val = l[i-1]+l[i-2] - l.append(val) - return l - fibList=createFibList(n) - problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + val = fibList[i - 1] + fibList[i - 2] + fibList.append(val) + return fibList + fibList = createFibList(n) + problem = "The Fibonacci Series of the first " + str(n) + " numbers is ?" solution = fibList - return problem,solution + return problem, solution -def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one - angle=random.choice(angles) - function=random.choice(functions) - problem=f"What is {function}({angle})?" - expression='math.'+function+'(math.radians(angle))' - result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} +# Handles degrees in quadrant one +def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], functions=["sin", "cos", "tan"]): + angle = random.choice(angles) + function = random.choice(functions) - solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition + problem = f"What is {function}({angle})?" + expression = 'math.' + function + '(math.radians(angle))' + result_fraction_map = {0.0: "0", 0.5: "1/2", 0.71: "1/√2", + 0.87: "√3/2", 1.0: "1", 0.58: "1/√3", 1.73: "√3"} - return problem,solution + solution = result_fraction_map[round(eval(expression), 2)] if round( + eval(expression), 2) <= 99999 else "∞" # for handling the ∞ condition -def sumOfAnglesOfPolygonFunc(maxSides = 12): + return problem, solution + + +def sumOfAnglesOfPolygonFunc(maxSides=12): side = random.randint(3, maxSides) sum = (side - 2) * 180 problem = f"Sum of angles of polygon with {side} sides = " solution = sum return problem, solution -def dataSummaryFunc(number_values=15,minval=5,maxval=50): - random_list=[] + +def dataSummaryFunc(number_values=15, minval=5, maxval=50): + random_list = [] for i in range(number_values): - n=random.randint(minval,maxval) + n = random.randint(minval, maxval) random_list.append(n) - a=sum(random_list) - mean=a/number_values - var=0 + a = sum(random_list) + mean = a / number_values + var = 0 for i in range(number_values): - var+=(random_list[i]-mean)**2 + var += (random_list[i] - mean)**2 print(random_list) print(mean) - print(var/number_values) - print((var/number_values)**0.5) - problem="Find the mean,standard deviation and variance for the data"+str(random_list) - solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) - return problem,solution + print(var / number_values) + print((var / number_values)**0.5) + problem = "Find the mean,standard deviation and variance for the data" + \ + str(random_list) + solution = "The Mean is {} , Standard Deviation is {}, Variance is {}".format( + mean, var / number_values, (var / number_values)**0.5) + return problem, solution -def surfaceAreaSphere(maxSide = 20, unit = 'm'): + +def surfaceAreaSphere(maxSide=20, unit='m'): r = random.randint(1, maxSide) problem = f"Surface area of Sphere with radius = {r}{unit} is" ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution -def volumeSphereFunc(maxRadius = 100): - r=random.randint(1,maxRadius) - problem=f"Volume of sphere with radius {r} m = " - ans=(4*math.pi/3)*r*r*r + + +def volumeSphereFunc(maxRadius=100): + r = random.randint(1, maxRadius) + problem = f"Volume of sphere with radius {r} m = " + ans = (4 * math.pi / 3) * r * r * r solution = f"{ans} m^3" - return problem,solution + return problem, solution # || Class Instances + # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) -multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) +multiplication = Generator( + "Multiplication", 2, "a*b=", "c", multiplicationFunc) division = Generator("Division", 3, "a/b=", "c", divisionFunc) -binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) +binaryComplement1s = Generator( + "Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) -powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) +powerRuleDifferentiation = Generator( + "Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) square = Generator("Square", 8, "a^2", "b", squareFunc) -lcm = Generator("LCM (Least Common Multiple)", 9, "LCM of a and b = ", "c", lcmFunc) -gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", "c", gcdFunc) -basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) +lcm = Generator("LCM (Least Common Multiple)", 9, + "LCM of a and b = ", "c", lcmFunc) +gcd = Generator("GCD (Greatest Common Denominator)", + 10, "GCD of a and b = ", "c", gcdFunc) +basicAlgebra = Generator( + "Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary", 14, "Binary of a=", "b", DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal", 15, "Decimal of a=", "b", BinaryToDecimalFunc) -fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) -intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) -areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) -doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) -midPointOfTwoPoint = Generator("Midpoint of the two point", 20, "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) -factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) -thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3",systemOfEquationsFunc) -distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) -pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) # This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) -fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects", 30, "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) +decimalToBinary = Generator("Decimal to Binary", 14, + "Binary of a=", "b", DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15, + "Decimal of a=", "b", BinaryToDecimalFunc) +fractionDivision = Generator( + "Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) +intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", + 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) +areaOfTriangle = Generator( + "Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) +doesTriangleExist = Generator("Triangle exists check", 19, + "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) +midPointOfTwoPoint = Generator("Midpoint of the two point", 20, + "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) +factoring = Generator("Factoring Quadratic", 21, + "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, + "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, + "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) +distance2Point = Generator("Distance between 2 points", 24, + "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) +pythagoreanTheorem = Generator( + "Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) +# This has multiple variables whereas #23 has only x and y +linearEquations = Generator( + "Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) +primeFactors = Generator("Prime Factorisation", 27, + "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) +fractionMultiplication = Generator( + "Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) +angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, + "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) +combinations = Generator("Combinations of Objects", 30, + "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) -surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) -surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) -volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) -volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) -surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) -volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) -commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) -intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -permutations = Generator("Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) -vectorCross = Generator("Cross Product of 2 Vectors", 43, "a X b = ", "c", vectorCrossFunc) -compareFractions = Generator("Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) -simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) -powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) -quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) -hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) -diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) -exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) -confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) -surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) -basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) -dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) -volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +surfaceAreaCubeGen = Generator( + "Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator( + "Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator( + "Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator( + "Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) +volumeCuboidGen = Generator( + "Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) +volumeCylinderGen = Generator( + "Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) +surfaceAreaConeGen = Generator( + "Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) +volumeConeGen = Generator( + "Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) +commonFactors = Generator( + "Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) +intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, + "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +permutations = Generator( + "Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) +vectorCross = Generator("Cross Product of 2 Vectors", + 43, "a X b = ", "c", vectorCrossFunc) +compareFractions = Generator( + "Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) +simpleInterest = Generator( + "Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) +matrixMultiplication = Generator("Multiplication of two matrices", + 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) +CubeRoot = Generator( + "Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) +powerRuleIntegration = Generator( + "Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, + "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) +quadraticEquationSolve = Generator( + "Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) +hcf = Generator("HCF (Highest Common Factor)", 51, + "HCF of a and b = ", "c", hcfFunc) +diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice", + 52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) +exponentiation = Generator( + "Exponentiation", 53, "a^b = ", "c", exponentiationFunc) +confidenceInterval = Generator("Confidence interval For sample S", + 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) +surdsComparison = Generator( + "Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) +fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers", + "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) +basicTrigonometry = Generator( + "Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, + "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +dataSummary = Generator("Mean,Standard Deviation,Variance", + 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) +surfaceAreaSphereGen = Generator( + "Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) +volumeSphere = Generator("Volume of Sphere", 60, + "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) From e1c50c5fd68caa11ab452d590ede0d1a791da815 Mon Sep 17 00:00:00 2001 From: ieshaan12 <ieshaan1999@gmail.com> Date: Sun, 18 Oct 2020 14:26:13 +0530 Subject: [PATCH 79/84] nth Fibonacci number --- mathgenerator/mathgen.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..d632bef 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -3,7 +3,7 @@ import math import fractions genList = [] - +GOLDEN_RATIO = (1 + math.sqrt(5))/2 # || Generator class class Generator: @@ -920,6 +920,16 @@ def volumeSphereFunc(maxRadius = 100): ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + +def nthFibonacciNumber(maxN = 100): + n = random.randint(1,maxN) + problem = f"What is the {n}th Fibonacci number?" + ans = round((math.pow(GOLDEN_RATIO,n) - math.pow(-GOLDEN_RATIO,-n))/(math.sqrt(5))) + solution = f"{ans}" + return problem, solution + + + # || Class Instances # Format is: @@ -986,3 +996,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumber) \ No newline at end of file From 5d787161f1a87f47b89de88a8763c41bd84b8604 Mon Sep 17 00:00:00 2001 From: "sakshi.kst" <sakshi.kst@gmail.com> Date: Sun, 18 Oct 2020 22:01:42 +0530 Subject: [PATCH 80/84] Profit/ Loss Percentage calculator function added --- mathgenerator/mathgen.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..4c8fa6d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -914,12 +914,27 @@ def surfaceAreaSphere(maxSide = 20, unit = 'm'): ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution + def volumeSphereFunc(maxRadius = 100): r=random.randint(1,maxRadius) problem=f"Volume of sphere with radius {r} m = " ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + +def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): + cP = random.randint(1, maxCP) + sP = random.randint(1, maxSP) + diff = abs(sP-cP) + if (sP-cP >= 0): + profitOrLoss = "Profit" + else: + profitOrLoss = "Loss" + percent = diff/cP * 100 + problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " + solution = percent + return problem, solution + # || Class Instances # Format is: @@ -986,3 +1001,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +profitLossPercent = Generator("Profit or Loss Percent", 61, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) From 26c43e9f16589855261e207db21bb5850f46dd2d Mon Sep 17 00:00:00 2001 From: William Welch <wwelch@ctcd.edu> Date: Sun, 18 Oct 2020 18:28:30 -0500 Subject: [PATCH 81/84] Added function binarytoHex() --- driver.py | 12 ++++++++++++ mathgenerator/mathgen.py | 11 +++++++++++ 2 files changed, 23 insertions(+) create mode 100644 driver.py diff --git a/driver.py b/driver.py new file mode 100644 index 0000000..2063399 --- /dev/null +++ b/driver.py @@ -0,0 +1,12 @@ +# First test to run mathgenerator +# 19 Oct 2020 + +from mathgenerator import mathgen + +problem, solution = mathgen.addition() +print(problem) +print(solution) + +problem, solution = mathgen.binarytohex() +print(problem) +print(solution) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..1736318 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -920,6 +920,16 @@ def volumeSphereFunc(maxRadius = 100): ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + +def BinaryToHexFunc(max_dig=10): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = hex(int(problem, 2)) + return problem, solution + # || Class Instances # Format is: @@ -986,3 +996,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +binaryToHex = Generator("Binary to Hexidecimal", 61, "Hexidecimal of a=", "b", BinaryToHexFunc) From f17b0e7fd5484b3a99036787584bdec695d43496 Mon Sep 17 00:00:00 2001 From: Thromax <thromax@gmail.com> Date: Mon, 19 Oct 2020 02:27:00 +0200 Subject: [PATCH 82/84] Fixed README.md --- README.md | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 7643a53..6777b5c 100644 --- a/README.md +++ b/README.md @@ -77,31 +77,7 @@ problem, solution = mathgen.genById(0) | 43 | Cross Product of 2 Vectors | [-19, -3, 2] X [-15, -12, 7] = | [3, 103, 183] | vectorCross | | 44 | Compare Fractions | Which symbol represents the comparison between 8/6 and 3/1? | < | compareFractions | | 45 | Simple Interest | Simple interest for a principle amount of 9862 dollars, 4% rate of interest and for a time period of 1 years is = | 394.48 | simpleInterest | -| 46 | Multiplication of two matrices | Multiply - -50 36 7 -26 -2 63 - 88 -37 60 -19 61 -56 - 48 -5 69 -87 -64 -92 - -84 -50 -79 -19 86 -13 - 0 28 12 -14 73 -49 - 94 -90 2 26 -38 19 - 2 -11 79 -77 98 -77 - -87 70 72 -32 64 -99 - - and - - 34 32 -6 -32 46 -23 78 -81 -18 - -17 24 49 -62 -50 77 38 -98 -64 - -23 -78 43 5 -83 -5 4 -92 -16 - 46 -47 -92 52 -25 -37 44 51 -7 - 20 26 70 37 96 -73 49 84 42 - -72 -15 -80 -24 58 -47 -41 45 -69 | -8245 -1057 -423 -3535 -569 2034 -6329 1219 -5765 - 6619 567 10737 2391 4001 -6291 10147 -7387 6383 - 1472 -161 13318 -5565 -12574 10381 638 -23699 2621 - 1593 5598 3465 7899 13170 -6487 -4857 24642 10618 - 3592 3027 12206 1473 2120 -412 6082 -635 4561 - 3748 -1803 -11460 2072 5462 -8183 2423 11 947 - 2400 960 22950 2483 952 -1974 4625 -5512 9372 - 1132 -2067 22392 1884 -12276 8196 1949 -7148 5677 | matrixMultiplication | +| 46 | Multiplication of two matrices | Multiply <table><tr><td>-50</td><td>36</td><td>7</td><td>-26</td><td>-2</td><td>63</td></tr><tr><td>88</td><td>-37</td><td>60</td><td>-19</td><td>61</td><td>-56</td></tr><tr><td>48</td><td>-5</td><td>69</td><td>-87</td><td>-64</td><td>-92</td></tr><tr><td>-84</td><td>-50</td><td>-79</td><td>-19</td><td>86</td><td>-13</td></tr><tr><td>0</td><td>28</td><td>12</td><td>-14</td><td>73</td><td>-49</td></tr><tr><td>94</td><td>-90</td><td>2</td><td>26</td><td>-38</td><td>19</td></tr><tr><td>2</td><td>-11</td><td>79</td><td>-77</td><td>98</td><td>-77</td></tr><tr><td>-87</td><td>70</td><td>72</td><td>-32</td><td>64</td><td>-99</td></tr></table> and <table><tr><td>34</td><td>32</td><td>-6</td><td>-32</td><td>46</td><td>-23</td><td>78</td><td>-81</td><td>-18</td></tr><tr><td>-17</td><td>24</td><td>49</td><td>-62</td><td>-50</td><td>77</td><td>38</td><td>-98</td><td>-64</td></tr><tr><td>-23</td><td>-78</td><td>43</td><td> 5</td><td>-83</td><td>-5</td><td> 4</td><td>-92</td><td>-16</td></tr><tr><td> 46</td><td>-47</td><td>-92</td><td>52</td><td>-25</td><td>-37</td><td>44</td><td>51</td><td>-7</td></tr><tr><td> 20</td><td>26</td><td>70</td><td>37</td><td>96</td><td>-73</td><td>49</td><td>84</td><td>42</td></tr><tr><td>-72</td><td>-15</td><td>-80</td><td>-24</td><td>58</td><td>-47</td><td>-41</td><td>45</td><td>-69</td></tr></table>| <table><tr><td>-8245</td><td>-1057</td><td>-423</td><td>-3535</td><td>-569</td><td>2034</td><td>-6329</td><td>1219</td><td>-5765</td></tr><tr><td>6619</td><td> 567</td><td>10737</td><td>2391</td><td>4001</td><td>-6291</td><td>10147</td><td>-7387</td><td>6383</td></tr><tr><td>1472</td><td>-161</td><td>13318</td><td>-5565<td>-12574</td><td>10381</td><td> 638<td>-23699</td><td>2621</td></tr><tr><td>1593</td><td>5598</td><td>3465</td><td>7899</td><td>13170</td><td>-6487</td><td>-4857</td><td>24642</td><td>10618</td></tr><tr><td>3592</td><td>3027</td><td>12206</td><td>1473</td><td>2120</td><td>-412</td><td>6082</td><td>-635</td><td>4561</td></tr><tr><td>3748</td><td>-1803<td>-11460</td><td>2072</td><td>5462</td><td>-8183</td><td>2423</td><td>11</td><td> 947</td></tr><tr><td>2400</td><td> 960</td><td>22950</td><td>2483</td><td> 952</td><td>-1974</td><td>4625</td><td>-5512</td><td>9372</td></tr><tr><td>1132</td><td>-2067</td><td>22392</td><td>1884<td>-12276</td><td>8196</td><td>1949</td><td>-7148</td><td>5677</td></tr></table> | matrixMultiplication | | 47 | Cube Root | cuberoot of 771 upto 2 decimal places is: | 9.17 | CubeRoot | | 48 | Power Rule Integration | 1x^3 + 8x^8 + 10x^10 | (1/3)x^4 + (8/8)x^9 + (10/10)x^11 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 52 , 84, 154 = | 70 | fourthAngleOfQuadrilateral | @@ -116,4 +92,4 @@ problem, solution = mathgen.genById(0) | 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | | 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | | 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | -| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | +| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | \ No newline at end of file From 8472e8d577abb4c1fe1676d8faa6f256675e24c3 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 22:31:01 -0400 Subject: [PATCH 83/84] Delete driver.py --- driver.py | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 driver.py diff --git a/driver.py b/driver.py deleted file mode 100644 index 2063399..0000000 --- a/driver.py +++ /dev/null @@ -1,12 +0,0 @@ -# First test to run mathgenerator -# 19 Oct 2020 - -from mathgenerator import mathgen - -problem, solution = mathgen.addition() -print(problem) -print(solution) - -problem, solution = mathgen.binarytohex() -print(problem) -print(solution) From 127b73abe86b9b21946006b1d37fa2f6ac7b3233 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 22:38:28 -0400 Subject: [PATCH 84/84] Made GOLDEN_RATIO local --- mathgenerator/mathgen.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index d632bef..282ae41 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -3,7 +3,6 @@ import math import fractions genList = [] -GOLDEN_RATIO = (1 + math.sqrt(5))/2 # || Generator class class Generator: @@ -922,9 +921,10 @@ def volumeSphereFunc(maxRadius = 100): return problem,solution def nthFibonacciNumber(maxN = 100): + golden_ratio = (1 + math.sqrt(5))/2 n = random.randint(1,maxN) problem = f"What is the {n}th Fibonacci number?" - ans = round((math.pow(GOLDEN_RATIO,n) - math.pow(-GOLDEN_RATIO,-n))/(math.sqrt(5))) + ans = round((math.pow(golden_ratio,n) - math.pow(-golden_ratio,-n))/(math.sqrt(5))) solution = f"{ans}" return problem, solution @@ -996,4 +996,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) -nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumber) \ No newline at end of file +nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumber)