From 24eac9596ca016da959d623a2d218ae715342106 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Thu, 15 Oct 2020 11:20:08 -0400 Subject: [PATCH 01/55] Release number change --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e2e36d7..e07aa01 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='mathgenerator', - version='1.1.0', + version='1.1.1', description='An open source solution for generating math problems', url='https://github.com/todarith/mathgenerator', author='Luke Weiler', From 85185a837661a1e214d40d5ed5508f398a67dc65 Mon Sep 17 00:00:00 2001 From: ieshaan12 Date: Thu, 15 Oct 2020 23:10:36 +0530 Subject: [PATCH 02/55] Integer Multiplication with 2x2 Matrix --- mathgenerator/mathgen.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index a7063b2..e9987ad 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -206,6 +206,17 @@ def divideFractionsFunc(maxVal=10): solution = x return problem, solution +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))) + problem = f"{constant} * [[{a}, {b}], [{c}, {d}]] = " + solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" + return problem, solution + + # || Class Instances #Format is: @@ -227,3 +238,4 @@ 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 From d2830507cfdeb209aa1848f88b98c11a6e90c726 Mon Sep 17 00:00:00 2001 From: Aditya Mahimkar Date: Thu, 15 Oct 2020 23:38:32 +0530 Subject: [PATCH 03/55] Update mathgen.py --- mathgenerator/mathgen.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index a7063b2..54943b1 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -206,6 +206,16 @@ def divideFractionsFunc(maxVal=10): solution = x 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 + # || Class Instances #Format is: @@ -227,3 +237,4 @@ 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) +areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) From 734dd662c5af557a86f9de4b2cfbdf375af8e2ee Mon Sep 17 00:00:00 2001 From: ieshaan12 Date: Thu, 15 Oct 2020 23:57:19 +0530 Subject: [PATCH 04/55] Triangle exists check --- mathgenerator/mathgen.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e9987ad..c962df1 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -216,6 +216,19 @@ def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" return problem, solution +def isTriangleValid(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]) + problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" + if exists: + solution = "Yes" + return problem, solution + solution = "No" + return problem, solution # || Class Instances @@ -238,4 +251,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) +doesTriangleExist = Generator("Triangle exists check", 18, "Does triangle with sides a, b and c exist?","Yes/No", isTriangleValid) From 137cb81bef305533841ffdf55f3046741ffbdd3e Mon Sep 17 00:00:00 2001 From: Karol Dobiczek <32435586+drobiu@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:40:11 +0200 Subject: [PATCH 05/55] Add factoring func --- mathgenerator/mathgen.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e9987ad..3e2e5b6 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -216,6 +216,28 @@ def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" 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(int): + if (int == 0): + return "" + if (int > 0): + return "+" + str(int) + if (int < 0): + return "-" + str(abs(int)) + + b = intParser(x1 + x2) + c = intParser(x1 * x2) + + if (b == ""): + b = "+" + + problem = f"x^2{b}x{c}" + x1 = intParser(x1) + x2 = intParser(x2) + solution = f"(x{x1})(x{x2})" + return problem, solution # || Class Instances @@ -238,4 +260,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) +factoring = Generator("Subtraction", 18, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2", factoringFunc) From fabd4dc33dca83395d4c69cf9c02069554624e45 Mon Sep 17 00:00:00 2001 From: 0xNetcat Date: Thu, 15 Oct 2020 21:34:55 +0200 Subject: [PATCH 06/55] updated README.md --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 94f68c3..541ea18 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,28 @@ # mathgenerator + A math problem generator, created for the purpose of giving self-studying students and teaching organizations the means to easily get access to random math problems to suit their needs. -To try out generators, go to https://todarith.ml/generate/ +To try out generators, go to If you have an idea for a generator, please add it as an issue and tag it with the "New Generator" label. ## Usage + The project can be install via pip -``` + +```bash pip install mathgenerator ``` + Here is an example of how you would generate an addition problem: -``` + +```python from mathgenerator import mathgen #generate an addition problem problem, solution = mathgen.addition() ``` + ## List of Generators | Id | Skill | Example problem | Example Solution | Function Name | @@ -35,3 +41,7 @@ problem, solution = mathgen.addition() | 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 | Fraction Division | k * [[a,b],[c,d]]= | [[k*a,k*b],[k*c,k*d]] | intMatrix22Multiplication| From dc45a4be8d9dc4a26f98bf51a337d1d3016002a0 Mon Sep 17 00:00:00 2001 From: Akash verma <42277681+lusifer65@users.noreply.github.com> Date: Thu, 15 Oct 2020 15:40:50 -0400 Subject: [PATCH 07/55] Update mathgen.py midPointOfTwoPoint=Generator("Midpoint of the two point",18,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPoint) --- mathgenerator/mathgen.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e9987ad..e17b369 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -215,6 +215,14 @@ def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): problem = f"{constant} * [[{a}, {b}], [{c}, {d}]] = " solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" return problem, solution +def MidPointOfTwoPoint(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 # || Class Instances @@ -238,4 +246,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) +midPointOfTwoPoint=Generator("Midpoint of the two point",18,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPoint) From 02ca66cf91d5ca7fd0b52555822f25c83107482e Mon Sep 17 00:00:00 2001 From: - Date: Thu, 15 Oct 2020 23:32:38 +0200 Subject: [PATCH 08/55] 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 9397a919d3b4385e036f8fa049517a8cee598026 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Thu, 15 Oct 2020 19:57:02 -0400 Subject: [PATCH 09/55] Update README.md --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 541ea18..8ac09dd 100644 --- a/README.md +++ b/README.md @@ -25,23 +25,23 @@ problem, solution = mathgen.addition() ## List of Generators -| 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 | Fraction Division | k * [[a,b],[c,d]]= | [[k*a,k*b],[k*c,k*d]] | intMatrix22Multiplication| +| 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| From 3a19cdd8fde782d248cfad41996763a7235c9861 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Thu, 15 Oct 2020 20:02:40 -0400 Subject: [PATCH 10/55] Fixed accidentally removed + sign --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index bb99aae..f5a367d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -222,7 +222,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 @@ -272,4 +272,4 @@ fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", div 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) \ No newline at end of file +midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) From cc78098b4a983b19382d43baaf433e9f1b6d9427 Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Thu, 15 Oct 2020 21:35:07 -0400 Subject: [PATCH 11/55] Fixed error with second term of problem --- mathgenerator/mathgen.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 751c112..f13653d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -254,10 +254,14 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): b = intParser(x1 + x2) c = intParser(x1 * x2) + if (b == "+1"): + b = "+" + if (b == ""): - b = "+" + problem = f"x^2{c}" + else: + problem = f"x^2{b}x{c}" - problem = f"x^2{b}x{c}" x1 = intParser(x1) x2 = intParser(x2) solution = f"(x{x1})(x{x2})" From c767d09ac806521309088872c15f3134f1954161 Mon Sep 17 00:00:00 2001 From: ElRoberto13 Date: Thu, 15 Oct 2020 23:23:24 -0400 Subject: [PATCH 12/55] Simplify Radical, Issue #68 This adds the simplifyRadical generator, which simplifies a radical to its simplest form --- mathgenerator/mathgen.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 9918cd0..a23a761 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,6 +276,26 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution +def simplifyRadicalFunc(range_x = 100): + x = random.randint(0, range_x) + if x == 1 or x == 0: + return f"sqrt({x})", str(x) + inside = x + outside = 1 + factor = 2 + while factor * factor <= inside: + if inside % (factor * factor) == 0: + # move factor^2 from inside to outside + inside //= (factor * factor) + outside *= factor + else: + factor += 1 + problem = f"sqrt({x})" + # exclude redundant multiplications by 1 + solution = str(outside if outside != 1 else '') + \ + (f"sqrt({inside})" if inside != 1 else "") + return problem, solution + # || Class Instances #Format is: @@ -301,4 +321,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) +simplifyRadical = Generator("Simplify a Radical", 22, "sqrt(72)", "6sqrt(2)", simplifyRadicalFunc) \ No newline at end of file From 4505fc897431c874c5dff1d0d6190d19b7d019b4 Mon Sep 17 00:00:00 2001 From: ElRoberto13 Date: Fri, 16 Oct 2020 01:27:03 -0400 Subject: [PATCH 13/55] Solves a system of equations Issue #67. Solves a system of equations of two variables (R^2) --- mathgenerator/mathgen.py | 49 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index a23a761..81e95ff 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -296,6 +296,51 @@ def simplifyRadicalFunc(range_x = 100): (f"sqrt({inside})" if inside != 1 else "") 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) + y = random.randint(-range_y, range_y) + # Start from reduced echelon form (coeffs 1) + c1 = [1, 0, x] + c2 = [0, 1, y] + + def randNonZero(): + return random.choice([i for i in range(-coeff_mult_range, coeff_mult_range) + if i != 0]) + # Add random (non-zero) multiple of equations (rows) to each other + c1_mult = randNonZero() + c2_mult = randNonZero() + new_c1 = [c1[i] + c1_mult * c2[i] for i in range(len(c1))] + new_c2 = [c2[i] + c2_mult * c1[i] for i in range(len(c2))] + + # For extra randomness, now add random (non-zero) multiples of original rows + # to themselves + c1_mult = randNonZero() + c2_mult = randNonZero() + new_c1 = [new_c1[i] + c1_mult * c1[i] for i in range(len(c1))] + new_c2 = [new_c2[i] + c2_mult * c2[i] for i in range(len(c2))] + + def coeffToFuncString(coeffs): + # lots of edge cases for perfect formatting! + x_sign = '-' if coeffs[0] < 0 else '' + # No redundant 1s + x_coeff = str(abs(coeffs[0])) if abs(coeffs[0]) != 1 else '' + # If x coeff is 0, dont include x + x_str = f'{x_sign}{x_coeff}x' if coeffs[0] != 0 else '' + # if x isn't included and y is positive, dont include operator + op = ' - ' if coeffs[1] < 0 else (' + ' if x_str != '' else '') + # 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') + return f'{x_str}{op}{y_str} = {coeffs[2]}' + + problem = f"{coeffToFuncString(new_c1)}, {coeffToFuncString(new_c2)}" + solution = f"x = {x}, y = {y}" + return problem, solution + + # Add random (non-zero) multiple of equations to each other + # || Class Instances #Format is: @@ -322,4 +367,6 @@ areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side l 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) -simplifyRadical = Generator("Simplify a Radical", 22, "sqrt(72)", "6sqrt(2)", simplifyRadicalFunc) \ No newline at end of file +simplifyRadical = Generator("Simplify a Radical", 22, "sqrt(72)", "6sqrt(2)", simplifyRadicalFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", + systemOfEquationsFunc) \ No newline at end of file From 642574148653ff1d743b339791e6281ce3092e55 Mon Sep 17 00:00:00 2001 From: ElRoberto13 Date: Fri, 16 Oct 2020 01:32:46 -0400 Subject: [PATCH 14/55] Remove radical function from branch --- mathgenerator/mathgen.py | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 81e95ff..e7ca613 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,26 +276,6 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution -def simplifyRadicalFunc(range_x = 100): - x = random.randint(0, range_x) - if x == 1 or x == 0: - return f"sqrt({x})", str(x) - inside = x - outside = 1 - factor = 2 - while factor * factor <= inside: - if inside % (factor * factor) == 0: - # move factor^2 from inside to outside - inside //= (factor * factor) - outside *= factor - else: - factor += 1 - problem = f"sqrt({x})" - # exclude redundant multiplications by 1 - solution = str(outside if outside != 1 else '') + \ - (f"sqrt({inside})" if inside != 1 else "") - 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) @@ -367,6 +347,5 @@ areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side l 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) -simplifyRadical = Generator("Simplify a Radical", 22, "sqrt(72)", "6sqrt(2)", simplifyRadicalFunc) systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) \ No newline at end of file From 6ccb1a9bc7fa3bad872947be65f853136ba84928 Mon Sep 17 00:00:00 2001 From: Aditya Mahimkar Date: Fri, 16 Oct 2020 11:11:42 +0530 Subject: [PATCH 15/55] Update mathgen.py --- mathgenerator/mathgen.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 9918cd0..7a7205e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,6 +276,13 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution +def thirdAngleOfTriangle(maxAngle=180): + angle1 = random.randint(1, maxAngle) + x1 = random.randint(1, maxAngle) + angle3 = 180 - (angle1 + angle2) + problem = "Third angle = " + + # || Class Instances #Format is: @@ -301,4 +308,4 @@ 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) From f73df71c23adc3de39674b04b79e614dad42bde1 Mon Sep 17 00:00:00 2001 From: Aditya Mahimkar Date: Fri, 16 Oct 2020 11:56:03 +0530 Subject: [PATCH 16/55] Update mathgen.py --- mathgenerator/mathgen.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 7a7205e..e74000a 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,12 +276,13 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution -def thirdAngleOfTriangle(maxAngle=180): +def thirdAngleOfTriangleFunc(maxAngle=180): angle1 = random.randint(1, maxAngle) x1 = random.randint(1, maxAngle) angle3 = 180 - (angle1 + angle2) problem = "Third angle = " - + solution = angle3 + return problem, solution # || Class Instances @@ -309,3 +310,4 @@ areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side l 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) +thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) From 6248336226d4297aa68452a3f154d3ff958c39f5 Mon Sep 17 00:00:00 2001 From: Aditya Mahimkar Date: Fri, 16 Oct 2020 12:06:50 +0530 Subject: [PATCH 17/55] Update mathgen.py --- mathgenerator/mathgen.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e74000a..226d8a9 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,11 +276,11 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution -def thirdAngleOfTriangleFunc(maxAngle=180): +def thirdAngleOfTriangleFunc(maxAngle=89): angle1 = random.randint(1, maxAngle) - x1 = random.randint(1, maxAngle) + angle2 = random.randint(1, maxAngle) angle3 = 180 - (angle1 + angle2) - problem = "Third angle = " + problem = "Third angle of triangle = " solution = angle3 return problem, solution From 1bedf32949e0e378533b12dc30ea3d47b4fef4fd Mon Sep 17 00:00:00 2001 From: ieshaan12 Date: Fri, 16 Oct 2020 12:24:30 +0530 Subject: [PATCH 18/55] Two Point distance --- mathgenerator/mathgen.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 9918cd0..e6b529a 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -276,6 +276,16 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): solution = f"(x{x1})(x{x2})" return problem, solution +def distanceTwoPoints(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 + # || Class Instances #Format is: @@ -301,4 +311,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) +distance2Point = Generator("Distance between 2 points", 22, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPoints) \ 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 19/55] 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 20/55] 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 21/55] 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 22/55] 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 23/55] 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 24/55] 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 25/55] 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 26/55] 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 27/55] 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 28/55] 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 29/55] 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 30/55] 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 31/55] 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 32/55] 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 33/55] 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 34/55] 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 35/55] 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 36/55] 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 37/55] 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 38/55] 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 39/55] 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 40/55] 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 41/55] 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 e2dddff7ece1dd12d7d1668dacc9406488ea3709 Mon Sep 17 00:00:00 2001 From: Akash Saravanan Date: Fri, 16 Oct 2020 23:58:34 +0530 Subject: [PATCH 42/55] 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 43/55] 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 44/55] 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 45/55] 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 46/55] 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 47/55] 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 48/55] 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 49/55] 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 50/55] 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 51/55] 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 52/55] 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 53/55] 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 54/55] 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 55/55] 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)