From c4f21014d023dc926f40260fc96669f35d27947f Mon Sep 17 00:00:00 2001 From: razinc Date: Fri, 16 Oct 2020 22:43:40 +0800 Subject: [PATCH 001/116] multiply complex numbers issue number #75 --- mathgenerator/mathgen.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 94631b7..a2b81fc 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -339,6 +339,13 @@ def distanceTwoPointsFunc(maxValXY = 20, minValXY=-20): problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" return problem, solution +def multiplyComplexNumbersFunc(minRealImaginaryNum = -20, maxRealImaginaryNum = 20): + num1 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + num2 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + problem = f"{num1} * {num2} = " + solution = num1 * num2 + return problem, solution + # || Class Instances #Format is: @@ -368,4 +375,5 @@ factoring = Generator("Subtraction", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", fa 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) \ No newline at end of file +distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) +ComplexNumMultiply = Generator("Multiplication of 2 complex numbers", 25, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) From bac53548085b8fac4375ca93fb614f74489eaa5c Mon Sep 17 00:00:00 2001 From: Shiven Tripathi <58358532+ShivenTripathi@users.noreply.github.com> Date: Fri, 16 Oct 2020 23:56:22 +0530 Subject: [PATCH 002/116] add problem to find roots of quadratic equation --- mathgenerator/mathgen.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 917fccc..90cd1ac 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -531,6 +531,15 @@ def commonFactorsFunc(maxVal=100): problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution + +def quadraticEquation(maxVal=100): + a = random.randint(1,maxVal) + c = random.randint(1,maxVal) + b = random.randint(4*a*c,4*maxVal*maxVal) + + problem = "Zeros of the Quadratic Equation {a}x^2+{b}x+{c}=0".format(a,b,c) + solution = str[(-b+sqrt(b^2-4*a*c))/2*a,(-b-sqrt(b^2-4*a*c))/2*a] + return problem,solution # || Class Instances #Format is: @@ -577,3 +586,4 @@ volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) +quadraticEquationSolve = Generator("Quadratic Equation", 41, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) From 61ba85f4b0fcca1872843f90f1b45f2cfa08ad5b Mon Sep 17 00:00:00 2001 From: lukew3 Date: Fri, 16 Oct 2020 20:53:33 -0400 Subject: [PATCH 003/116] makeReadme.py added and generators with newloine chars fixed --- README.md | 69 +++++++++++++++++++++++++++++----------- makeReadme.py | 25 +++++++++++++++ mathgenerator/mathgen.py | 65 +++++++++++++++++++++++++------------ 3 files changed, 121 insertions(+), 38 deletions(-) create mode 100644 makeReadme.py diff --git a/README.md b/README.md index 45ffcec..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -30,21 +30,54 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 1+5= | 6 | addition | -| 1 | Subtraction | 9-4= | 5 | subtraction | -| 2 | Multiplication | 4*6= | 24 | multiplication | -| 3 | Division | 4/3= | 1.33333333 | division | -| 4 | Binary Complement 1s | 1010= | 0101 | binaryComplement1s | -| 5 | Modulo Division | 10%3= | 1 | moduloDivision | -| 6 | Square Root | sqrt(25)= | 5 | squareRootFunction | -| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | -| 8 | Square | 4^2 | 16 | square | -| 9 | LCM (Least Common Multiple) | LCM of 14 and 9 = | 126 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 18 and 18 = | 18 | gcd | -| 11 | Basic Algebra | 9x + 7 = 10 | 1/3 | basicAlgebra | -| 12 | Logarithm | log3(3) | 1 | log | -| 13 | Easy Division | 270/15 = | 18 | intDivision | -| 14 | Decimal to Binary | Binary of a= | b | decimalToBinary | -| 15 | Binary to Decimal | Decimal of a= | b | binaryToDecimal | -| 16 | Fraction Division | (a/b)/(c/d)= | x/y | fractionDivision | -| 17 | Int 2x2 Matrix Multiplication | k * [[a,b],[c,d]]= | [[k*a,k*b],[k*c,k*d]] | intMatrix22Multiplication| +| 0 | Addition | 29+33= | 62 | addition | +| 1 | Subtraction | 62-7= | 55 | subtraction | +| 2 | Multiplication | 93*1= | 93 | multiplication | +| 3 | Division | 59/47= | 1.2553191489361701 | division | +| 4 | Binary Complement 1s | 001110000 | 110001111 | binaryComplement1s | +| 5 | Modulo Division | 89%34= | 21 | moduloDivision | +| 6 | Square Root | sqrt(16)= | 4 | squareRoot | +| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | +| 8 | Square | 12^2= | 144 | square | +| 9 | LCM (Least Common Multiple) | LCM of 10 and 1 = | 10 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 12 and 5 = | 1 | gcd | +| 11 | Basic Algebra | 8x + 7 = 10 | 3/8 | basicAlgebra | +| 12 | Logarithm | log3(729) | 6 | log | +| 13 | Easy Division | 378/21 = | 18 | intDivision | +| 14 | Decimal to Binary | Binary of 4= | 100 | decimalToBinary | +| 15 | Binary to Decimal | 10011 | 19 | binaryToDecimal | +| 16 | Fraction Division | (1/2)/(4/3) | 3/8 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 2 * [[0, 7], [7, 7]] = | [[0,14],[14,14]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 9 14 15 = | 61.644140029689765 | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 33, 6 and 43 exist? | No | doesTriangleExist | +| 20 | Midpoint of the two point | (-15,-10),(-5,2)= | (-10.0,-4.0) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-17x+72 | (x-9)(x-8) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 4 and 31 = | 145 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | +| 26 | Linear Equations | -11x + -16y = -302 +1x + 20y = 250 | x = 10, y = 12 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | +| 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 13 objects picked 1 at a time | 13 | combinations | +| 31 | Factorial | 2! = | 2 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 13m is | 1014 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 5m, 3m, 7m is | 142 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 15m and radius = 7m is | 967 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 11m is | 1331 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 6m, 1m, 10m is | 60 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 26m and radius = 15m is | 18378 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 46m and radius = 14m is | 2730 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 7m and radius = 11m is | 886 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 91 and 51 = | [1] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 6/4x + 5 and y = -7/2x + 3 | (-2/5, 22/5) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 13 objects picked 4 at a time = | 17160 | permutations | +| 43 | Cross Product of 2 Vectors | [-14, 13, 20] X [-5, -18, 19] = | [607, 166, 317] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 8/3 and 6/7? | > | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | +| 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | +| 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | +| 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | diff --git a/makeReadme.py b/makeReadme.py new file mode 100644 index 0000000..7ca8f2c --- /dev/null +++ b/makeReadme.py @@ -0,0 +1,25 @@ +#To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py + +wList = getGenList() +allRows = [] +f=open('mathgen.py') +lines=f.readlines() +line = 720 #This has to be changed depending on which line the first generator appears on +for item in wList: + myGen = item[2] + prob, sol = myGen() + prob = str(prob).rstrip("\n") + sol = str(sol).rstrip("\n") + instName = lines[line] + def_name = instName[:instName.find('=')].strip() + row = [myGen.id, myGen.title, prob, sol, def_name] + line+=1 + allRows.append(row) + +g=open('../README.md', "a") +for row in allRows: + tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" + g.write(tableLine) +g.close() + +print("New README.md table generated") diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..d00ea30 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -224,7 +224,7 @@ def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): c = random.randint(1, maxC) s = (a+b+c)/2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 - problem = "Area of triangle with side lengths: "+ str(a) +" "+ str(b) +" "+ str(c) + " = " + problem = "Area of triangle with side lengths: "+ str(a) +" "+ str(b) +" "+ str(c) + " = " solution = area return problem, solution @@ -234,7 +234,7 @@ def isTriangleValidFunc(maxSideLength = 50): sideC = random.randint(1, maxSideLength) sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: solution = "Yes" @@ -267,7 +267,7 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): if (b == "+1"): b = "+" - + if (b == ""): problem = f"x^2{c}" else: @@ -277,7 +277,7 @@ def factoringFunc(range_x1 = 10, range_x2 = 10): x2 = intParser(x2) solution = f"(x{x1})(x{x2})" return problem, solution - + def thirdAngleOfTriangleFunc(maxAngle=89): angle1 = random.randint(1, maxAngle) angle2 = random.randint(1, maxAngle) @@ -362,13 +362,13 @@ def linearEquationsFunc(n = 2, varRange = 20, coeffRange = 20): for _ in range(n): coeff = [ random.randint(-coeffRange, coeffRange) for i in range(n) ] res = sum([ coeff[i] * soln[i] for i in range(n)]) - + prob = ["{}{}".format(coeff[i], vars[i]) if coeff[i] != 0 else "" for i in range(n)] while "" in prob: prob.remove("") prob = " + ".join(prob) + " = " + str(res) problem.append(prob) - + problem = "\n".join(problem) return problem, solution @@ -417,8 +417,8 @@ def regularPolygonAngleFunc(minVal = 3,maxVal = 20): problem = f"Find the angle of a regular polygon with {sideNum} sides" exteriorAngle = round((360/sideNum),2) solution = 180 - exteriorAngle - return problem, solution - + return problem, solution + def combinationsFunc(maxlength=20): def factorial(a): @@ -434,9 +434,9 @@ def combinationsFunc(maxlength=20): solution= int(factorial(a)/(factorial(b)*factorial(a-b))) problem= "Number of combinations from {} objects picked {} at a time ".format(a,b) - + return problem, solution - + def factorialFunc(maxInput = 6): a = random.randint(0, maxInput) n = a @@ -470,7 +470,7 @@ def surfaceAreaCuboid(maxSide = 20, unit = 'm'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) - + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" ans = 2 * (a*b + b*c + c*a) solution = f"{ans} {unit}^2" @@ -567,7 +567,7 @@ def intersectionOfTwoLinesFunc( else: x = f"{x.numerator}/{x.denominator}" return x - + m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) @@ -625,7 +625,7 @@ def compareFractionsFunc(maxVal=10): solution="<" else: solution="=" - + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" return problem,solution @@ -648,7 +648,7 @@ def matrixMultiplicationFunc(maxVal=100): a.append([]) for c in range(n): a[r].append(random.randint(-maxVal,maxVal)) - + b=[] for r in range(n): b.append([]) @@ -666,8 +666,8 @@ def matrixMultiplicationFunc(maxVal=100): for t in range(n): temp+=a[r][t]*b[t][c] res[r].append(temp) - problem= f"Multiply \n{a_string}\n and \n\n{b_string}" #consider using a, b instead of a_string, b_string if the problem doesn't look right - solution= matrixMultiplicationFuncHelper(res) + problem= f"Multiply {a} and {b}" #consider using a, b instead of a_string, b_string if the problem doesn't look right + solution= res#matrixMultiplicationFuncHelper(res) return problem, solution def matrixMultiplicationFuncHelper(inp): @@ -703,7 +703,7 @@ def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): solution = solution + " + c" return problem, solution - + def fourthAngleOfQuadriFunc(maxAngle = 180): angle1 = random.randint(1, maxAngle) angle2 = random.randint(1, 240-angle1) @@ -741,8 +741,7 @@ doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with s midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", - systemOfEquationsFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y @@ -754,7 +753,7 @@ factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is","b units^2", surfaceAreaCube) surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is","d units^2", surfaceAreaCuboid) surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is","c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) +volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is","d units^3", volumeCuboid) volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is","c units^3", volumeCylinder) surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) @@ -769,3 +768,29 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) + +wList = getGenList() +#print(wList) +allRows = [] +f=open('mathgen.py') +lines=f.readlines() +line = 720 +for item in wList: + myGen = item[2] + prob, sol = myGen() + prob = str(prob).rstrip("\n") + sol = str(sol).rstrip("\n") + instName = lines[line] + def_name = instName[:instName.find('=')].strip() + print(def_name) + row = [myGen.id, myGen.title, prob, sol, def_name] + print(row) + line+=1 + allRows.append(row) + +g=open('../README.md', "a") +for row in allRows: + tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" + g.write(tableLine) + #print(tableLine) +g.close() From 1572bd616c473906914c2e72f7fcff6b9971600f Mon Sep 17 00:00:00 2001 From: c0d3nh4ck <50226641+c0d3nh4ck@users.noreply.github.com> Date: Sat, 17 Oct 2020 08:01:21 +0530 Subject: [PATCH 004/116] added HCF function --- mathgenerator/mathgen.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..660a961 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,17 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution + +def hcfFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + while(y): + x, y = y, x % y + problem = f"HCF of {a} and {b} = " + solution = str(x) + return problem, solution + # || Class Instances #Format is: @@ -769,3 +780,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +hcf = Generator("HCF (Highest Common Factor)", 50, "HCF of a and b = ", "c", hcfFunc) From dedbb7027e1f53cad75608991fdd6d50de75589d Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 11:47:30 +0530 Subject: [PATCH 005/116] Probability Function for Sum on dice faces --- mathgenerator/mathgen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..866a2f2 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,27 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def DiceSumProbFunc(maxDice=3): + a = random.randint(1,maxDice) + b = random.randint(a,6*a) + count=0 + for i in [1,2,3,4,5,6]: + if a==1: + if i==b: + count=count+1 + elif a==2: + for j in [1,2,3,4,5,6]: + if i+j==b: + count=count+1 + elif a==3: + for j in [1,2,3,4,5,6]: + for k in [1,2,3,4,5,6]: + if i+j+k==b: + count=count+1 + problem = "If {} dices rolled at the same time, Probability of getting a sum of {} =".format(a,b) + solution="{}/{}".format(count, 6**a) + return problem, solution + # || Class Instances #Format is: @@ -769,3 +790,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +DiceSumProbability=Generator("Probability of a certain sum appearing on faces of dice",50,"If n dices are rolled then probabilty of getting sum of x is", DiceSumProbFunc) From e3834b2c8951be2670dc6a8a3ea64c7eca81725a Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 11:54:50 +0530 Subject: [PATCH 006/116] Update mathgen.py --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 866a2f2..a5164a1 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -790,4 +790,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) -DiceSumProbability=Generator("Probability of a certain sum appearing on faces of dice",50,"If n dices are rolled then probabilty of getting sum of x is", DiceSumProbFunc) +DiceSumProbability=Generator("Probability of a certain sum appearing on faces of dice",50,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) From 91b42f8ab6287219c767ed38937db1508f853414 Mon Sep 17 00:00:00 2001 From: palmcm Date: Sat, 17 Oct 2020 13:38:19 +0700 Subject: [PATCH 007/116] Add exponentiation function --- mathgenerator/mathgen.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..0722c35 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,12 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def exponentiationFunc(maxBase = 20,maxExpo = 10): + base = random.randint(1, maxBase) + expo = random.randint(1, maxExpo) + problem = f"{base}^{expo} =" + solution = str(base ** expo) + return problem, solution # || Class Instances #Format is: @@ -769,3 +775,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +exponentiation = Generator("Exponentiation",50,"a^b = ","c",exponentiationFunc) \ No newline at end of file From efc3df0b275784b1cce4fa3e182b4f974317e427 Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 13:22:26 +0530 Subject: [PATCH 008/116] Confidence Interval Problem Generator --- mathgenerator/mathgen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..e7da9a6 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -713,6 +713,27 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution +def confidenceIntervalFunc(): + n=random.randint(20,40) + j=random.randint(1,4) + lst=random.sample(range(200,300),n) + lst_per=[80 ,90, 95, 99] + lst_t = [1.282, 1.645, 1.960, 2.576] + mean=0 + sd=0 + for i in lst: + count= i + mean + mean=count + mean = mean/n + for i in lst: + x=(i-mean)**2+sd + sd=x + sd=sd/n + standard_error = lst_t[j]*math.sqrt(sd/n) + problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) + solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + return problem, solution + # || Class Instances @@ -769,3 +790,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +ConfidenceInterval = Generator("Confidence interval For sample S", 51, "With X% confidence", "is (A,B)", confidenceIntervalFunc) From 6651379fb82862edd1b970fec65ddbebbd3c7549 Mon Sep 17 00:00:00 2001 From: MaxwellJpg <70202524+MaxwellJpg@users.noreply.github.com> Date: Sat, 17 Oct 2020 10:26:46 +0100 Subject: [PATCH 009/116] Update README.md correct row 26 of table --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index dfc7d41..3f3ab03 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,7 @@ problem, solution = mathgen.genById(0) | 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | | 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | | 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | -| 26 | Linear Equations | -11x + -16y = -302 -1x + 20y = 250 | x = 10, y = 12 | linearEquations | +| 26 | Linear Equations | -11x + -16y = -302 , 1x + 20y = 250 | x = 10, y = 12 | linearEquations | | 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | | 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | | 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | From b1a06816dd44432f51c39059d2c7379a069a1252 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Sat, 17 Oct 2020 15:11:18 +0530 Subject: [PATCH 010/116] Update mathgen.py Compound Interest added --- mathgenerator/mathgen.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..f986d76 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -637,6 +637,15 @@ def simpleInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10): problem = "Simple interest for a principle amount of " + str(a) +" dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " solution = round(d, 2) return problem, solution +def compoundInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10, maxPeriod = ): + p = random.randint(100, maxPrinciple) + r = random.randint(1, maxRate) + t = random.randint(1, maxTime) + n = random.randint(1, maxPeriod) + A = p * ((1 + (r/(100*n))**(n*t))) + problem = "Compound Interest for a principle amount of " + str(p) + " dollars, " + str(r) + "% rate of interest and for a time period of " + str(t) + " compounded monthly is = " + solution = round(A, 2) + return problem, solution def matrixMultiplicationFunc(maxVal=100): m= random.randint(2, 10) From e2857e8f18aff94aee4fb02265842d6d075374d8 Mon Sep 17 00:00:00 2001 From: MaxwellJpg Date: Sat, 17 Oct 2020 12:26:10 +0100 Subject: [PATCH 011/116] correct int powerRuleIntegrationFunc --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..3c67452 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -699,7 +699,7 @@ def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "("+str(coefficient) +"/"+str(exponent) +")x^" + str(exponent +1) + solution += "("+str(coefficient) +"/"+str(exponent + 1) +")x^" + str(exponent +1) solution = solution + " + c" return problem, solution @@ -767,5 +767,5 @@ compareFractions=Generator("Compare Fractions",44,"Which symbol represents the c simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) -powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m+1)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) From 7bbfec529ff49cdfb7b61f46067df81eb09cf399 Mon Sep 17 00:00:00 2001 From: ieshaan12 Date: Sat, 17 Oct 2020 17:24:23 +0530 Subject: [PATCH 012/116] Surds comparison --- README.md | 1 + mathgenerator/mathgen.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/README.md b/README.md index dfc7d41..621b2a4 100644 --- a/README.md +++ b/README.md @@ -81,3 +81,4 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | +| 50 | Surd Comparison | 25^(1/3) _ 37^(1/2) | < | surdsComparisonGen | diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..fb435d2 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,20 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def surdsComparison(maxValue = 100, maxRoot = 10): + radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) + degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) + problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" + first = math.pow(radicand1, 1/degree1) + second = math.pow(radicand2, 1/degree2) + solution = "=" + if first > second: + solution = ">" + elif first < second: + solution = "<" + return problem, solution + + # || Class Instances #Format is: @@ -769,3 +783,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +surdsComparisonGen = Generator("Comparing surds", 50, "Fill in the blanks a^(1/b) _ c^(1/d)", "/=", surdsComparison) From b8a5741ecd424ce57bf76d23dd6380fb91f33020 Mon Sep 17 00:00:00 2001 From: vishnudk Date: Sat, 17 Oct 2020 17:31:20 +0530 Subject: [PATCH 013/116] add a --- mathgenerator/mathgen.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..0791512 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -713,6 +713,22 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution +def createFibList(n): + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l + +def fibonacciSeriesFunc(minNo=1): + n = random.randint(minNo,20) + fibList=createFibList(n) + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + solution = fibList + return problem,solution # || Class Instances @@ -769,3 +785,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +fibonacciSeries = Generator("Fibonacci Series",50,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) \ No newline at end of file From 783f0ce953c3bc844341ca79f6a7bf2f2c9191b0 Mon Sep 17 00:00:00 2001 From: Dark Prince Date: Sat, 17 Oct 2020 17:42:43 +0530 Subject: [PATCH 014/116] Added Trigonometric Values Generator for Standard Angles in Degrees --- .../__pycache__/mathgen.cpython-37.pyc | Bin 19103 -> 29724 bytes mathgenerator/mathgen.py | 13 +++++++++++++ 2 files changed, 13 insertions(+) diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc index 418e0a56baea2c94655d34c4eac76225870c1ea8..82bcec4b454f2a62c9cf0b2088c33baea54dfaef 100644 GIT binary patch delta 13355 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 W{9Hm@vXc)Kt4zL7%r*H*u^0fiPjV#y diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..1306a95 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,18 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): + angle=random.choice(angles) + function=random.choice(functions) + + problem=f"What is {function}({angle})?\n" + expression='math.'+function+'(math.radians(angle))' + result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} + + solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition + + return problem,solution + # || Class Instances #Format is: @@ -769,3 +781,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +basicTrigonometry=Generator("Trigonometric Values",50,"What is sin(X)?","ans",basicTrigonometryFunc) From 2b5a8135dc47f1209103fbbb75804ffb3a82bd09 Mon Sep 17 00:00:00 2001 From: Shiven Tripathi <58358532+ShivenTripathi@users.noreply.github.com> Date: Sat, 17 Oct 2020 18:22:20 +0530 Subject: [PATCH 015/116] debug, tested --- mathgenerator/mathgen.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 90cd1ac..fda0d0e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -535,10 +535,13 @@ def commonFactorsFunc(maxVal=100): def quadraticEquation(maxVal=100): a = random.randint(1,maxVal) c = random.randint(1,maxVal) - b = random.randint(4*a*c,4*maxVal*maxVal) + b = random.randint(round(math.sqrt(4*a*c))+1,round(math.sqrt(4*maxVal*maxVal))) - problem = "Zeros of the Quadratic Equation {a}x^2+{b}x+{c}=0".format(a,b,c) - solution = str[(-b+sqrt(b^2-4*a*c))/2*a,(-b-sqrt(b^2-4*a*c))/2*a] + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a,b,c) + + D = math.sqrt(b*b-4*a*c) + + solution = str([(-b+D)/(2*a),(-b-D)/(2*a)]) return problem,solution # || Class Instances From 7e9f8a4d2b19e5ed168cca1498a6c26958d5123d Mon Sep 17 00:00:00 2001 From: "sakshi.kst" Date: Sat, 17 Oct 2020 18:30:57 +0530 Subject: [PATCH 016/116] Sum of Angles of Polygon function added --- README.md | 1 + mathgenerator/mathgen.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index dfc7d41..d39ce06 100644 --- a/README.md +++ b/README.md @@ -81,3 +81,4 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | +| 50 | Sum of Angles of Polygon | Sum of angles of polygon with 4 sides = | 360 | sumOfAnglesOfPolygon | \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1041a55..52ee492 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -714,6 +714,13 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): solution = angle4 return problem, solution +def sumOfAnglesOfPolygonFunc(maxSides = 12): + side = random.randint(3, maxSides) + sum = (side - 2) * 180 + problem = f"Sum of angles of polygon with {side} sides = " + solution = sum + return problem, solution + # || Class Instances #Format is: @@ -769,3 +776,4 @@ matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multipl CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 50, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) From e2bbbee7c6957ac6276c9b95dad579fcc93745ac Mon Sep 17 00:00:00 2001 From: Luke Weiler Date: Sat, 17 Oct 2020 12:54:30 -0400 Subject: [PATCH 017/116] Rounded solution --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 3a44119..72eb108 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -723,7 +723,7 @@ def quadraticEquation(maxVal=100): D = math.sqrt(b*b-4*a*c) - solution = str([(-b+D)/(2*a),(-b-D)/(2*a)]) + solution = str([round((-b+D)/(2*a), 2),round((-b-D)/(2*a), 2)]) return problem,solution # || Class Instances From 08fc9d0663e90b96ee9d7cb7451aa3ee5c212576 Mon Sep 17 00:00:00 2001 From: YuvalG Date: Sat, 17 Oct 2020 20:05:47 +0300 Subject: [PATCH 018/116] Add flake8 as linter --- .github/workflows/tests.yaml | 44 +- Makefile | 9 +- dev-requirements.txt | 5 +- .../__pycache__/__init__.cpython-37.pyc | Bin 164 -> 0 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 19103 -> 0 bytes mathgenerator/mathgen.py | 500 ++++++++++-------- tests/test_mathgen.py | 92 ++-- 7 files changed, 358 insertions(+), 292 deletions(-) delete mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc delete mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 3252576..cc6cf9d 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,21 +1,23 @@ -name: Run tests - -on: [push, pull_request] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install -U pip - python -m pip install -r dev-requirements.txt - - name: Test - run: make test +name: Run tests + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install -U pip + python -m pip install -r dev-requirements.txt + - name: Linter + run: make lint + - name: Test + run: make test diff --git a/Makefile b/Makefile index dbf1f17..bd04e35 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,7 @@ -test: - python -m pytest --verbose -s tests +FLAKE_FLAGS = --ignore=E501,F401,F403,F405 + +lint: + python -m flake8 $(FLAKE_FLAGS) + +test: + python -m pytest --verbose -s tests diff --git a/dev-requirements.txt b/dev-requirements.txt index a965899..6e46af4 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,2 +1,3 @@ -pytest -hypothesis \ No newline at end of file +pytest +hypothesis +flake8 \ No newline at end of file diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 893336fc37f23c5d8be2b5e049b532e5ed6e2ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 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 diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 7bf36d8..b8d9033 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -4,6 +4,7 @@ import fractions genList = [] + # || Generator class class Generator: def __init__(self, title, id, generalProb, generalSol, func): @@ -20,52 +21,59 @@ class Generator: def __call__(self, **kwargs): return self.func(**kwargs) + # || Non-generator Functions def genById(id): generator = genList[id][2] return(generator()) + def getGenList(): return(genList) # || Generator Functions -def additionFunc(maxSum = 99, maxAddend = 50): + +def additionFunc(maxSum=99, maxAddend=50): a = random.randint(0, maxAddend) - b = random.randint(0, min((maxSum-a), maxAddend)) #The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well - c = a+b + b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + c = a + b problem = str(a) + "+" + str(b) + "=" solution = str(c) return problem, solution -def subtractionFunc(maxMinuend = 99, maxDiff = 99): + +def subtractionFunc(maxMinuend=99, maxDiff=99): a = random.randint(0, maxMinuend) - b = random.randint(max(0, (a-maxDiff)), a) - c = a-b + b = random.randint(max(0, (a - maxDiff)), a) + c = a - b problem = str(a) + "-" + str(b) + "=" solution = str(c) return problem, solution -def multiplicationFunc(maxRes = 99, maxMulti = 99): + +def multiplicationFunc(maxRes=99, maxMulti=99): a = random.randint(0, maxMulti) - b = random.randint(0, min(int(maxMulti/a), maxRes)) - c = a*b + b = random.randint(0, min(int(maxMulti / a), maxRes)) + c = a * b problem = str(a) + "*" + str(b) + "=" solution = str(c) return problem, solution -def divisionFunc(maxRes = 99, maxDivid = 99): + +def divisionFunc(maxRes=99, maxDivid=99): a = random.randint(0, maxDivid) b = random.randint(0, min(maxRes, maxDivid)) - c = a/b + c = a / b problem = str(a) + "/" + str(b) + "=" solution = str(c) return problem, solution -def binaryComplement1sFunc(maxDigits = 10): + +def binaryComplement1sFunc(maxDigits=10): question = '' answer = '' - for i in range(random.randint(1,maxDigits)): + for i in range(random.randint(1, maxDigits)): temp = str(random.randint(0, 1)) question += temp answer += "0" if temp == "1" else "1" @@ -74,22 +82,25 @@ def binaryComplement1sFunc(maxDigits = 10): solution = answer return problem, solution -def moduloFunc(maxRes = 99, maxModulo= 99): + +def moduloFunc(maxRes=99, maxModulo=99): a = random.randint(0, maxModulo) b = random.randint(0, min(maxRes, maxModulo)) - c = a%b + c = a % b problem = str(a) + "%" + str(b) + "=" solution = str(c) return problem, solution -def squareRootFunc(minNo = 1, maxNo = 12): + +def squareRootFunc(minNo=1, maxNo=12): b = random.randint(minNo, maxNo) - a = b*b + a = b * b problem = "sqrt(" + str(a) + ")=" solution = str(b) return problem, solution -def powerRuleDifferentiationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): + +def powerRuleDifferentiationFunc(maxCoef=10, maxExp=10, maxTerms=5): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -103,23 +114,26 @@ def powerRuleDifferentiationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): solution += str(coefficient * exponent) + "x^" + str(exponent - 1) return problem, solution -def squareFunc(maxSquareNum = 20): + +def squareFunc(maxSquareNum=20): a = random.randint(1, maxSquareNum) b = a * a problem = str(a) + "^2" + "=" solution = str(b) return problem, solution + def gcdFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) x, y = a, b while(y): - x, y = y, x % y + x, y = y, x % y problem = f"GCD of {a} and {b} = " solution = str(x) return problem, solution + def lcmFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -132,11 +146,13 @@ def lcmFunc(maxVal=20): solution = str(d) return problem, solution -def basicAlgebraFunc(maxVariable = 10): + +def basicAlgebraFunc(maxVariable=10): a = random.randint(1, maxVariable) b = random.randint(1, maxVariable) c = random.randint(b, maxVariable) # calculate gcd + def calculate_gcd(x, y): while(y): x, y = y, x % y @@ -145,44 +161,49 @@ def basicAlgebraFunc(maxVariable = 10): x = f"{(c - b)//i}/{a//i}" if (c - b == 0): x = "0" - elif a == 1 or a == i : + elif a == 1 or a == i: x = f"{c - b}" problem = f"{a}x + {b} = {c}" solution = x return problem, solution + def logFunc(maxBase=3, maxVal=8): a = random.randint(1, maxVal) b = random.randint(2, maxBase) - c = pow(b,a) - problem = "log"+str(b)+"("+str(c)+")" + c = pow(b, a) + problem = "log" + str(b) + "(" + str(c) + ")" solution = str(a) return problem, solution + def divisionToIntFunc(maxA=25, maxB=25): - a = random.randint(1,maxA) - b = random.randint(1,maxB) - divisor = a*b - dividend=random.choice([a,b]) + a = random.randint(1, maxA) + b = random.randint(1, maxB) + divisor = a * b + dividend = random.choice([a, b]) problem = f"{divisor}/{dividend} = " - solution=int(divisor/dividend) - return problem,solution + solution = int(divisor / dividend) + return problem, solution + def DecimalToBinaryFunc(max_dec=99): a = random.randint(1, max_dec) b = bin(a).replace("0b", "") - problem = "Binary of "+str(a)+"=" + problem = "Binary of " + str(a) + "=" solution = str(b) return problem, solution -def BinaryToDecimalFunc(max_dig=10): - problem='' - for i in range(random.randint(1,max_dig)): - temp = str(random.randint(0, 1)) - problem += temp - solution=int(problem, 2); - return problem, solution +def BinaryToDecimalFunc(max_dig=10): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = int(problem, 2) + return problem, solution + def divideFractionsFunc(maxVal=10): a = random.randint(1, maxVal) @@ -193,6 +214,7 @@ def divideFractionsFunc(maxVal=10): d = random.randint(1, maxVal) while (c == d): d = random.randint(1, maxVal) + def calculate_gcd(x, y): while(y): x, y = y, x % y @@ -208,33 +230,36 @@ def divideFractionsFunc(maxVal=10): solution = x return problem, solution -def multiplyIntToMatrix22(maxMatrixVal = 10, maxRes = 100): + +def multiplyIntToMatrix22(maxMatrixVal=10, maxRes=100): a = random.randint(0, maxMatrixVal) b = random.randint(0, maxMatrixVal) c = random.randint(0, maxMatrixVal) d = random.randint(0, maxMatrixVal) - constant = random.randint(0, int(maxRes/max(a,b,c,d))) + constant = random.randint(0, int(maxRes / max(a, b, c, d))) problem = f"{constant} * [[{a}, {b}], [{c}, {d}]] = " solution = f"[[{a*constant},{b*constant}],[{c*constant},{d*constant}]]" return problem, solution -def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): - a = random.randint(1, maxA) - b = random.randint(1, maxB) - c = random.randint(1, maxC) - s = (a+b+c)/2 - area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 - problem = "Area of triangle with side lengths: "+ str(a) +" "+ str(b) +" "+ str(c) + " = " - solution = area - return problem, solution -def isTriangleValidFunc(maxSideLength = 50): +def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): + a = random.randint(1, maxA) + b = random.randint(1, maxB) + c = random.randint(1, maxC) + s = (a + b + c) / 2 + area = (s * (s - a) * (s - b) * (s - c)) ** 0.5 + problem = "Area of triangle with side lengths: " + str(a) + " " + str(b) + " " + str(c) + " = " + solution = area + return problem, solution + + +def isTriangleValidFunc(maxSideLength=50): sideA = random.randint(1, maxSideLength) sideB = random.randint(1, maxSideLength) sideC = random.randint(1, maxSideLength) sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: solution = "Yes" @@ -242,51 +267,56 @@ def isTriangleValidFunc(maxSideLength = 50): solution = "No" return problem, solution + def MidPointOfTwoPointFunc(maxValue=20): - x1=random.randint(-20,maxValue) - y1=random.randint(-20,maxValue) - x2=random.randint(-20,maxValue) - y2=random.randint(-20,maxValue) - problem=f"({x1},{y1}),({x2},{y2})=" - solution=f"({(x1+x2)/2},{(y1+y2)/2})" - return problem,solution + x1 = random.randint(-20, maxValue) + y1 = random.randint(-20, maxValue) + x2 = random.randint(-20, maxValue) + y2 = random.randint(-20, maxValue) + problem = f"({x1},{y1}),({x2},{y2})=" + solution = f"({(x1+x2)/2},{(y1+y2)/2})" + return problem, solution -def factoringFunc(range_x1 = 10, range_x2 = 10): - x1 = random.randint(-range_x1, range_x1) - x2 = random.randint(-range_x2, range_x2) - def intParser(z): - if (z == 0): - return "" - if (z > 0): - return "+" + str(z) - if (z < 0): - return "-" + str(abs(z)) - b = intParser(x1 + x2) - c = intParser(x1 * x2) +def factoringFunc(range_x1=10, range_x2=10): + x1 = random.randint(-range_x1, range_x1) + x2 = random.randint(-range_x2, range_x2) + + def intParser(z): + if (z == 0): + return "" + if (z > 0): + return "+" + str(z) + if (z < 0): + return "-" + str(abs(z)) + + b = intParser(x1 + x2) + c = intParser(x1 * x2) + + if (b == "+1"): + b = "+" + + if (b == ""): + problem = f"x^2{c}" + else: + problem = f"x^2{b}x{c}" + + x1 = intParser(x1) + x2 = intParser(x2) + solution = f"(x{x1})(x{x2})" + return problem, solution - if (b == "+1"): - b = "+" - - if (b == ""): - problem = f"x^2{c}" - else: - problem = f"x^2{b}x{c}" - x1 = intParser(x1) - x2 = intParser(x2) - solution = f"(x{x1})(x{x2})" - return problem, solution - def thirdAngleOfTriangleFunc(maxAngle=89): - angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, maxAngle) - angle3 = 180 - (angle1 + angle2) - problem = f"Third angle of triangle with angles {angle1} and {angle2} = " - solution = angle3 - return problem, solution + angle1 = random.randint(1, maxAngle) + angle2 = random.randint(1, maxAngle) + angle3 = 180 - (angle1 + angle2) + problem = f"Third angle of triangle with angles {angle1} and {angle2} = " + solution = angle3 + return problem, solution -def systemOfEquationsFunc(range_x = 10, range_y = 10, coeff_mult_range=10): + +def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): # Generate solution point first x = random.randint(-range_x, range_x) y = random.randint(-range_y, range_y) @@ -331,17 +361,19 @@ def systemOfEquationsFunc(range_x = 10, range_y = 10, coeff_mult_range=10): # Add random (non-zero) multiple of equations to each other -def distanceTwoPointsFunc(maxValXY = 20, minValXY=-20): - point1X = random.randint(minValXY, maxValXY+1) - point1Y = random.randint(minValXY, maxValXY+1) - point2X = random.randint(minValXY, maxValXY+1) - point2Y = random.randint(minValXY, maxValXY+1) + +def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): + point1X = random.randint(minValXY, maxValXY + 1) + point1Y = random.randint(minValXY, maxValXY + 1) + point2X = random.randint(minValXY, maxValXY + 1) + point2Y = random.randint(minValXY, maxValXY + 1) distanceSq = (point1X - point2X) ** 2 + (point1Y - point2Y) ** 2 solution = f"sqrt({distanceSq})" problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" return problem, solution -def pythagoreanTheoremFunc(maxLength = 20): + +def pythagoreanTheoremFunc(maxLength=20): a = random.randint(1, maxLength) b = random.randint(1, maxLength) c = (a**2 + b**2)**0.5 @@ -349,29 +381,31 @@ def pythagoreanTheoremFunc(maxLength = 20): solution = f"{c:.0f}" if c.is_integer() else f"{c:.2f}" return problem, solution -def linearEquationsFunc(n = 2, varRange = 20, coeffRange = 20): + +def linearEquationsFunc(n=2, varRange=20, coeffRange=20): if n > 10: print("[!] n cannot be greater than 10") return None, None vars = ['x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g'][:n] - soln = [ random.randint(-varRange, varRange) for i in range(n) ] + soln = [random.randint(-varRange, varRange) for i in range(n)] problem = list() solution = ", ".join(["{} = {}".format(vars[i], soln[i]) for i in range(n)]) for _ in range(n): - coeff = [ random.randint(-coeffRange, coeffRange) for i in range(n) ] - res = sum([ coeff[i] * soln[i] for i in range(n)]) - + coeff = [random.randint(-coeffRange, coeffRange) for i in range(n)] + res = sum([coeff[i] * soln[i] for i in range(n)]) + prob = ["{}{}".format(coeff[i], vars[i]) if coeff[i] != 0 else "" for i in range(n)] while "" in prob: prob.remove("") prob = " + ".join(prob) + " = " + str(res) problem.append(prob) - + problem = "\n".join(problem) return problem, solution + def primeFactorsFunc(minVal=1, maxVal=200): a = random.randint(minVal, maxVal) n = a @@ -389,6 +423,7 @@ def primeFactorsFunc(minVal=1, maxVal=200): solution = f"{factors}" return problem, solution + def multiplyFractionsFunc(maxVal=10): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -398,6 +433,7 @@ def multiplyFractionsFunc(maxVal=10): b = random.randint(1, maxVal) while (c == d): d = random.randint(1, maxVal) + def calculate_gcd(x, y): while(y): x, y = y, x % y @@ -412,32 +448,33 @@ def multiplyFractionsFunc(maxVal=10): solution = x return problem, solution -def regularPolygonAngleFunc(minVal = 3,maxVal = 20): + +def regularPolygonAngleFunc(minVal=3, maxVal=20): sideNum = random.randint(minVal, maxVal) problem = f"Find the angle of a regular polygon with {sideNum} sides" - exteriorAngle = round((360/sideNum),2) + exteriorAngle = round((360 / sideNum), 2) solution = 180 - exteriorAngle - return problem, solution - + return problem, solution + + def combinationsFunc(maxlength=20): def factorial(a): - d=1 + d = 1 for i in range(a): - a=(i+1)*d - d=a + a = (i + 1) * d + d = a return d - a= random.randint(10,maxlength) - b=random.randint(0,9) + a = random.randint(10, maxlength) + b = random.randint(0, 9) + solution = int(factorial(a) / (factorial(b) * factorial(a - b))) + problem = "Number of combinations from {} objects picked {} at a time ".format(a, b) - - solution= int(factorial(a)/(factorial(b)*factorial(a-b))) - problem= "Number of combinations from {} objects picked {} at a time ".format(a,b) - return problem, solution - -def factorialFunc(maxInput = 6): + + +def factorialFunc(maxInput=6): a = random.randint(0, maxInput) n = a problem = str(a) + "! = " @@ -452,31 +489,35 @@ def factorialFunc(maxInput = 6): solution = str(b) return problem, solution -def surfaceAreaCube(maxSide = 20, unit = 'm'): + +def surfaceAreaCube(maxSide=20, unit='m'): a = random.randint(1, maxSide) problem = f"Surface area of cube with side = {a}{unit} is" ans = 6 * a * a solution = f"{ans} {unit}^2" return problem, solution -def volumeCube(maxSide = 20, unit = 'm'): + +def volumeCube(maxSide=20, unit='m'): a = random.randint(1, maxSide) problem = f"Volume of cube with side = {a}{unit} is" ans = a * a * a solution = f"{ans} {unit}^3" return problem, solution -def surfaceAreaCuboid(maxSide = 20, unit = 'm'): + +def surfaceAreaCuboid(maxSide=20, unit='m'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) - + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" - ans = 2 * (a*b + b*c + c*a) + ans = 2 * (a * b + b * c + c * a) solution = f"{ans} {unit}^2" return problem, solution -def volumeCuboid(maxSide = 20, unit = 'm'): + +def volumeCuboid(maxSide=20, unit='m'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) @@ -485,7 +526,8 @@ def volumeCuboid(maxSide = 20, unit = 'm'): solution = f"{ans} {unit}^3" return problem, solution -def surfaceAreaCylinder(maxRadius = 20, maxHeight = 50,unit = 'm'): + +def surfaceAreaCylinder(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) problem = f"Surface area of cylinder with height = {a}{unit} and radius = {b}{unit} is" @@ -493,7 +535,8 @@ def surfaceAreaCylinder(maxRadius = 20, maxHeight = 50,unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution -def volumeCylinder(maxRadius = 20, maxHeight = 50, unit = 'm'): + +def volumeCylinder(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) problem = f"Volume of cylinder with height = {a}{unit} and radius = {b}{unit} is" @@ -501,7 +544,8 @@ def volumeCylinder(maxRadius = 20, maxHeight = 50, unit = 'm'): solution = f"{ans} {unit}^3" return problem, solution -def surfaceAreaCone(maxRadius = 20, maxHeight = 50,unit = 'm'): + +def surfaceAreaCone(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) slopingHeight = math.sqrt(a**2 + b**2) @@ -510,14 +554,16 @@ def surfaceAreaCone(maxRadius = 20, maxHeight = 50,unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution -def volumeCone(maxRadius = 20, maxHeight = 50, unit = 'm'): + +def volumeCone(maxRadius=20, maxHeight=50, unit='m'): a = random.randint(1, maxHeight) b = random.randint(1, maxRadius) problem = f"Volume of cone with height = {a}{unit} and radius = {b}{unit} is" - ans = int(math.pi * b * b * a * (1/3)) + ans = int(math.pi * b * b * a * (1 / 3)) solution = f"{ans} {unit}^3" return problem, solution + def commonFactorsFunc(maxVal=100): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -537,6 +583,7 @@ def commonFactorsFunc(maxVal=100): solution = arr return problem, solution + def intersectionOfTwoLinesFunc( minM=-10, maxM=10, minB=-10, maxB=10, minDenominator=1, maxDenominator=6 ): @@ -567,7 +614,7 @@ def intersectionOfTwoLinesFunc( else: x = f"{x.numerator}/{x.denominator}" return x - + m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) @@ -590,21 +637,24 @@ def intersectionOfTwoLinesFunc( solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" return problem, solution + def permutationFunc(maxlength=20): - a = random.randint(10,maxlength) - b = random.randint(0,9) - solution= int(math.factorial(a)/(math.factorial(a-b))) - problem= "Number of Permutations from {} objects picked {} at a time = ".format(a,b) + a = random.randint(10, maxlength) + b = random.randint(0, 9) + solution = int(math.factorial(a) / (math.factorial(a - b))) + problem = "Number of Permutations from {} objects picked {} at a time = ".format(a, b) return problem, solution + def vectorCrossFunc(minVal=-20, maxVal=20): a = [random.randint(minVal, maxVal) for i in range(3)] b = [random.randint(minVal, maxVal) for i in range(3)] - c = [a[1]*b[2] - a[2]*b[1], - a[2]*b[0] - a[0]*b[2], - a[0]*b[1] - a[1]*b[0]] + c = [a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0]] return str(a) + " X " + str(b) + " = ", str(c) + def compareFractionsFunc(maxVal=10): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -616,79 +666,84 @@ def compareFractionsFunc(maxVal=10): while (c == d): d = random.randint(1, maxVal) - first=a/b - second=c/d + first = a / b + second = c / d - if(first>second): - solution=">" - elif(first second): + solution = ">" + elif(first < second): + solution = "<" else: - solution="=" - - problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" - return problem,solution + solution = "=" + + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" + return problem, solution + + +def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): + a = random.randint(1000, maxPrinciple) + b = random.randint(1, maxRate) + c = random.randint(1, maxTime) + d = (a * b * c) / 100 + problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " + solution = round(d, 2) + return problem, solution -def simpleInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10): - a = random.randint(1000, maxPrinciple) - b = random.randint(1, maxRate) - c = random.randint(1, maxTime) - d = (a*b*c)/100 - problem = "Simple interest for a principle amount of " + str(a) +" dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " - solution = round(d, 2) - return problem, solution def matrixMultiplicationFunc(maxVal=100): - m= random.randint(2, 10) - n= random.randint(2, 10) - k= random.randint(2, 10) - #generate matrices a and b - a=[] + m = random.randint(2, 10) + n = random.randint(2, 10) + k = random.randint(2, 10) + # generate matrices a and b + a = [] for r in range(m): a.append([]) for c in range(n): - a[r].append(random.randint(-maxVal,maxVal)) - - b=[] + a[r].append(random.randint(-maxVal, maxVal)) + + b = [] for r in range(n): b.append([]) for c in range(k): b[r].append(random.randint(-maxVal, maxVal)) - res= [] - a_string= matrixMultiplicationFuncHelper(a) - b_string= matrixMultiplicationFuncHelper(b) + res = [] + a_string = matrixMultiplicationFuncHelper(a) + b_string = matrixMultiplicationFuncHelper(b) for r in range(m): res.append([]) for c in range(k): - temp= 0 + temp = 0 for t in range(n): - temp+=a[r][t]*b[t][c] + temp += a[r][t] * b[t][c] res[r].append(temp) - problem= f"Multiply \n{a_string}\n and \n\n{b_string}" #consider using a, b instead of a_string, b_string if the problem doesn't look right - solution= matrixMultiplicationFuncHelper(res) + problem = f"Multiply \n{a_string}\n and \n\n{b_string}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + solution = matrixMultiplicationFuncHelper(res) return problem, solution + def matrixMultiplicationFuncHelper(inp): - m= len(inp) - n= len(inp[0]) - string= "" + m = len(inp) + n = len(inp[0]) + string = "" for i in range(m): for j in range(n): - string+=f"{inp[i][j]: 6d}" - string+=" " - string+="\n" + string += f"{inp[i][j]: 6d}" + string += " " + string += "\n" return string -def cubeRootFunc(minNo = 1, maxNo = 1000): + +def cubeRootFunc(minNo=1, maxNo=1000): b = random.randint(minNo, maxNo) - a = b**(1/3) + a = b**(1 / 3) problem = "cuberoot of " + str(b) + " upto 2 decimal places is:" - solution = str(round(a,2)) + solution = str(round(a, 2)) return problem, solution -def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): + +def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -699,32 +754,33 @@ def powerRuleIntegrationFunc(maxCoef = 10, maxExp = 10, maxTerms = 5): coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "("+str(coefficient) +"/"+str(exponent) +")x^" + str(exponent +1) + solution += "(" + str(coefficient) + "/" + str(exponent) + ")x^" + str(exponent + 1) solution = solution + " + c" return problem, solution - -def fourthAngleOfQuadriFunc(maxAngle = 180): + +def fourthAngleOfQuadriFunc(maxAngle=180): angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, 240-angle1) - angle3 = random.randint(1, 340-(angle1 + angle2)) + angle2 = random.randint(1, 240 - angle1) + angle3 = random.randint(1, 340 - (angle1 + angle2)) sum_ = angle1 + angle2 + angle3 angle4 = 360 - sum_ problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution - -def quadraticEquation(maxVal=100): - a = random.randint(1,maxVal) - c = random.randint(1,maxVal) - b = random.randint(round(math.sqrt(4*a*c))+1,round(math.sqrt(4*maxVal*maxVal))) - - problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a,b,c) - D = math.sqrt(b*b-4*a*c) - - solution = str([round((-b+D)/(2*a), 2),round((-b-D)/(2*a), 2)]) - return problem,solution + +def quadraticEquation(maxVal=100): + a = random.randint(1, maxVal) + c = random.randint(1, maxVal) + b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) + + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) + + D = math.sqrt(b * b - 4 * a * c) + + solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + return problem, solution def hcfFunc(maxVal=20): @@ -732,15 +788,17 @@ def hcfFunc(maxVal=20): b = random.randint(1, maxVal) x, y = a, b while(y): - x, y = y, x % y + x, y = y, x % y problem = f"HCF of {a} and {b} = " solution = str(x) return problem, solution # || Class Instances -#Format is: -# = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) +# Format is: +# <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) + + addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) @@ -749,48 +807,48 @@ binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", binar moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) -square = Generator("Square", 8,"a^2", "b", squareFunc) +square = Generator("Square", 8, "a^2", "b", squareFunc) lcm = Generator("LCM (Least Common Multiple)", 9, "LCM of a and b = ", "c", lcmFunc) gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", "c", gcdFunc) basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) -intDivision = Generator("Easy Division", 13,"a/b=","c",divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary",14,"Binary of a=","b",DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal",15,"Decimal of a=","b",BinaryToDecimalFunc) +intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) +decimalToBinary = Generator("Decimal to Binary", 14, "Binary of a=", "b", DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15, "Decimal of a=", "b", BinaryToDecimalFunc) fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) -doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?","Yes/No", isTriangleValidFunc) -midPointOfTwoPoint=Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=","((X1+X2)/2,(Y1+Y2)/2)",MidPointOfTwoPointFunc) +doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) +midPointOfTwoPoint = Generator("Midpoint of the two point", 20, "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) -distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)","sqrt(distanceSquared)", distanceTwoPointsFunc) +distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) #This has multiple variables whereas #23 has only x and y +linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) # This has multiple variables whereas #23 has only x and y primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon",29,"Find the angle of a regular polygon with 6 sides","120",regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects",30, "Combinations available for picking 4 objects at a time from 6 distinct objects ="," 15", combinationsFunc) +angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) +combinations = Generator("Combinations of Objects", 30, "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is","b units^2", surfaceAreaCube) -surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is","d units^2", surfaceAreaCuboid) -surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is","c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is","b units^3", volumeCube) -volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is","d units^3", volumeCuboid) -volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is","c units^3", volumeCylinder) -surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is","c units^2", surfaceAreaCone) -volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is","c units^3", volumeCone) -commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ","[c, d, ...]",commonFactorsFunc) +surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) +volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) +volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) +surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) +volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) +commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -permutations= Generator("Permutations",42, "Total permutations of 4 objects at a time from 10 objects is","5040", permutationFunc) +permutations = Generator("Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) vectorCross = Generator("Cross Product of 2 Vectors", 43, "a X b = ", "c", vectorCrossFunc) -compareFractions=Generator("Compare Fractions",44,"Which symbol represents the comparison between a/b and c/d?",">/</=",compareFractionsFunc) +compareFractions = Generator("Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator("Cube Root",47,"Cuberoot of a upto 2 decimal places is","b",cubeRootFunc) +matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) +CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral",49,"Fourth angle of Quadrilateral with angles a,b,c =","angle4",fourthAngleOfQuadriFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index ace72a5..af38bff 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -1,46 +1,46 @@ -from math import sqrt -from mathgenerator.mathgen import * - -from hypothesis import strategies as st, given, assume - - -@given(maxSum=st.integers(min_value=1), maxAddend=st.integers(min_value=1)) -def test_additionFunc(maxSum, maxAddend): - assume(maxSum > maxAddend) - problem, solution = additionFunc(maxSum, maxAddend) - assert eval(problem[:-1]) == int(solution) - - -@given(maxMinuend=st.integers(min_value=1), maxDiff=st.integers(min_value=1)) -def test_subtractionFunc(maxMinuend, maxDiff): - assume(maxMinuend > maxDiff) - problem, solution = subtractionFunc(maxMinuend, maxDiff) - assert eval(problem[:-1]) == int(solution) - - -@given(maxRes=st.integers(min_value=1), maxMulti=st.integers(min_value=1)) -def test_multiplicationFunc(maxRes, maxMulti): - assume(maxRes > maxMulti) - problem, solution = multiplicationFunc(maxRes, maxMulti) - assert eval(problem[:-1]) == int(solution) - - -@given(maxRes=st.integers(min_value=1), maxDivid=st.integers(min_value=1)) -def test_divisionFunc(maxRes, maxDivid): - assume(maxRes > maxDivid) - problem, solution = divisionFunc(maxRes, maxDivid) - assert eval(problem[:-1]) == float(solution) - - -@given(maxRes=st.integers(min_value=1), maxModulo=st.integers(min_value=1)) -def test_moduloFunc(maxRes, maxModulo): - assume(maxRes > maxModulo) - problem, solution = moduloFunc(maxRes, maxModulo) - assert eval(problem[:-1]) == int(solution) - - -@given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) -def test_squareRootFunc(minNo, maxNo): - assume(maxNo > minNo) - problem, solution = squareRootFunc(minNo, maxNo) - assert eval(problem[:-1]) == float(solution) +from math import sqrt +from mathgenerator.mathgen import * + +from hypothesis import strategies as st, given, assume + + +@given(maxSum=st.integers(min_value=1), maxAddend=st.integers(min_value=1)) +def test_addition(maxSum, maxAddend): + assume(maxSum > maxAddend) + problem, solution = addition.func(maxSum, maxAddend) + assert eval(problem[:-1]) == int(solution) + + +@given(maxMinuend=st.integers(min_value=1), maxDiff=st.integers(min_value=1)) +def test_subtraction(maxMinuend, maxDiff): + assume(maxMinuend > maxDiff) + problem, solution = subtraction.func(maxMinuend, maxDiff) + assert eval(problem[:-1]) == int(solution) + + +@given(maxRes=st.integers(min_value=1), maxMulti=st.integers(min_value=1)) +def test_multiplication(maxRes, maxMulti): + assume(maxRes > maxMulti) + problem, solution = multiplication.func(maxRes, maxMulti) + assert eval(problem[:-1]) == int(solution) + + +@given(maxRes=st.integers(min_value=1), maxDivid=st.integers(min_value=1)) +def test_division(maxRes, maxDivid): + assume(maxRes > maxDivid) + problem, solution = division.func(maxRes, maxDivid) + assert eval(problem[:-1]) == float(solution) + + +@given(maxRes=st.integers(min_value=1), maxModulo=st.integers(min_value=1)) +def test_moduloDivision(maxRes, maxModulo): + assume(maxRes > maxModulo) + problem, solution = moduloDivision.func(maxRes, maxModulo) + assert eval(problem[:-1]) == int(solution) + + +@given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) +def test_squareRoot(minNo, maxNo): + assume(maxNo > minNo) + problem, solution = squareRoot.func(minNo, maxNo) + assert eval(problem[:-1]) == float(solution) From 8c326f827842044c719b7883aec392c58d144660 Mon Sep 17 00:00:00 2001 From: Ritu Raj <68614399+Ritu1611@users.noreply.github.com> Date: Sat, 17 Oct 2020 22:58:11 +0530 Subject: [PATCH 019/116] Update mathgen.py --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e7da9a6..2515683 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -715,7 +715,7 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): return problem, solution def confidenceIntervalFunc(): n=random.randint(20,40) - j=random.randint(1,4) + j=random.randint(0,3) lst=random.sample(range(200,300),n) lst_per=[80 ,90, 95, 99] lst_t = [1.282, 1.645, 1.960, 2.576] From ec10674a7923354579f0d26beb922c1b90ef224f Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 13:38:09 -0400 Subject: [PATCH 020/116] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 621b2a4..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -81,4 +81,3 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | -| 50 | Surd Comparison | 25^(1/3) _ 37^(1/2) | < | surdsComparisonGen | From 801ac79b00f757f2e66650f133463ef98a70917b Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 13:54:51 -0400 Subject: [PATCH 021/116] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index d39ce06..dfc7d41 100644 --- a/README.md +++ b/README.md @@ -81,4 +81,3 @@ problem, solution = mathgen.genById(0) | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | | 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | -| 50 | Sum of Angles of Polygon | Sum of angles of polygon with 4 sides = | 360 | sumOfAnglesOfPolygon | \ No newline at end of file From 74c3cab7db1d040d6975e6dcbc8a08029c55f6be Mon Sep 17 00:00:00 2001 From: MaxwellJpg <70202524+MaxwellJpg@users.noreply.github.com> Date: Sat, 17 Oct 2020 19:00:21 +0100 Subject: [PATCH 022/116] Update README.md corrected line 81, function id 48. Integrated denominator should be power + 1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f3ab03..a8c09dc 100644 --- a/README.md +++ b/README.md @@ -78,5 +78,5 @@ problem, solution = mathgen.genById(0) | 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | | 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | | 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | -| 48 | Power Rule Integration | 3x^1 | (3/1)x^2 + c | powerRuleIntegration | +| 48 | Power Rule Integration | 3x^1 | (3/2)x^2 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | From 49ed99a3f9d042352ba8fb2b738e0c3da56a817f Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 14:06:00 -0400 Subject: [PATCH 023/116] Fixed createFibList indentation error --- mathgenerator/mathgen.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 3c91834..02b4c1d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -713,16 +713,16 @@ def fourthAngleOfQuadriFunc(maxAngle = 180): problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution - + def quadraticEquation(maxVal=100): a = random.randint(1,maxVal) c = random.randint(1,maxVal) b = random.randint(round(math.sqrt(4*a*c))+1,round(math.sqrt(4*maxVal*maxVal))) - + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a,b,c) D = math.sqrt(b*b-4*a*c) - + solution = str([round((-b+D)/(2*a), 2),round((-b-D)/(2*a), 2)]) return problem,solution @@ -797,18 +797,18 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): elif first < second: solution = "<" return problem, solution - + def fibonacciSeriesFunc(minNo=1): n = random.randint(minNo,20) def createFibList(n): - l=[] - for i in range(n): - if i<2: - l.append(i) - else: - val = l[i-1]+l[i-2] - l.append(val) - return l + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l fibList=createFibList(n) problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" solution = fibList @@ -821,7 +821,7 @@ def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): problem=f"What is {function}({angle})?" expression='math.'+function+'(math.radians(angle))' result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} - + solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition return problem,solution @@ -895,4 +895,4 @@ confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) \ No newline at end of file +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) From f323be51ae5281ad142095782177bc9d08ff52cc Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 14:14:57 -0400 Subject: [PATCH 024/116] remove pycache --- .../__pycache__/__init__.cpython-37.pyc | Bin 164 -> 0 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 29724 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc delete mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 893336fc37f23c5d8be2b5e049b532e5ed6e2ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmZ?b<>g{vU|`t!q%$5wKL!yn%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_`8r$0 zgche36~_cP$GD^xXP4v`!~_)OXQd{W6vqS<B_@|-Ca1>aCYEHRr{<*=C6?qDq4DD5 dGxIV_;^XxSDsOSv<mRW8=A_zztoaOb3ILz#EKdLc diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc deleted file mode 100644 index 82bcec4b454f2a62c9cf0b2088c33baea54dfaef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29724 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 E0A7mq+5i9m From c0a213b90c45bb321aa25c1c2690c62743b20963 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 00:05:05 +0530 Subject: [PATCH 025/116] data_mean function --- .../__pycache__/__init__.cpython-37.pyc | Bin 164 -> 160 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 29724 -> 33916 bytes mathgenerator/mathgen.py | 56 +++++++++++++----- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc index 893336fc37f23c5d8be2b5e049b532e5ed6e2ea6..8b0d08300961a9cf36125e988780744bcb4225b9 100644 GIT binary patch delta 57 zcmZ3&xPXz{iI<m)fq{YHsY&-lZVM$(XRDad;?$zz7>|G$m(=3ylKg@gkHqBclKiC9 MqO{cFl8Kqt0L~v0h5!Hn delta 61 zcmZ3$xP+10iI<m)fq{Wx=abHf+!kuS&Q>v@#i>QbF#*moE~&-YCHVz00Y&*)smUe9 QF#$!1$t9V|sS{JJ0W}X4lK=n! diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc index 82bcec4b454f2a62c9cf0b2088c33baea54dfaef..26c552d300e0698bcd1b325c1363a3d7fbd2a03c 100644 GIT binary patch delta 8720 zcmbR9g7HrW6Q2_=FBby?1H*TV?)b#ciF^`F1?&?w?CTR!xKg-V7^B!HFs3A?@TBmz zFh+4qU`$C$;Y;CfVT|IOz?hPpB9J23!WhLhfiWc|ML0#Ig)xeI0%J;QifD>h3u6?| z1jdxK6v-5+7RD&v35+S}DKaUtEsRlo6Btu6Qsh$<S{S4FCoraDrYNQ;wJ=5rOkhmO zN>NTxX<@975}d%8lAWTOqSnF~B{YFCB_~BQMXQA|N_YZeN^Xiyif#*Il*k0el)MzZ z6#W*)DA5UwDfuY|DTXbKQDPGqQwmayQjA*|qr@jLrWB@_rkJ%bMoCOyOesn+PqAoW zjFOzdm{Oc#nPSz#7$r4<F{LEMI>n}iF-m#@V@hdCy={tJ3uBbb1jdxI6o(YY7RD&q z35+S_DNZTQEsRle6Btt}Qe0EqS{S3`CorZ|rnskgv@k{~Okhl@O7TkZZefg4oWPh; zo#LC~*TNX3G=VXtCdEG`poK9?c>-ffZAxHDPzz&}$^^!gx|HCQkQT-$)d`F#^(kQ~ z;Vq0&YV{KsQyNktQ=(cJqtqubrZlERr^K`{Mrll7OleAqO^It^jMALIn9`gQpOVnR z7^O9VF{LFXF(s*mF-m&^V@hjEa!N`IW0cMW#+0^{)ReRq#wgthj4ACY=_wg4j8S?M z7*je@GE=fz7^CzjFs5{-<fP=bFh&_nU`**s$xErvZ()owoWPjUol=le*uofPG=VXt zC#5K*xP>vwcmiWeZ%S!OSqo#7$pprfzLfHmiWbHw)0E1TsuqSQvk8nT{V6pmwJnTM z<`WoGCZyD*)VDB3SxjI|nV8a;($vBjWjTQ{Wl~CWN=pl4l+^^rl*uWrDQzu`QPvX} zQ>LV}*Qa!}Fh<!-U`&~s(wWlL!Wd<n(w)-N!VqOQfiY!TN^eSE3uBah3PVbN%7m1O zDU;G!QzoZONtv3?oW_(gEoFKOW0b=L#+2zPGgD@@Fh)71vZTyTVMv*iGB=gInKjBO zl_h0fig?QWl)0%K&8$(*sVpfAQan=@rp!&{Y-WwBcS&VQS(KulvN&aKDpxaWlxr$W z%950&Da%rpr*b#5M!BW3q^wAhPFa~UH<hQEHOf7eC1q7gXv*r8HL1MKtWh4REGcVK z)}^dZ*^tWD%o^pH%964%MI&WX%9>REX4WXLRF;&@DO*yurp!$hY-Ww}PGw2imLin0 zJ!NjHKr?H7lus&4%8rzsDZ5g3rwTQ*M){_)r0hwNNZFgRFIBjiHOeoQC1rog0k8u_ znpva#Q(00DrW{H+oU$fWw3#(3AeANMNXm?qqbX}r#hO{80#jL1j-?z=IgxTQRlJ!s zDkzmD<y6Y)lrt%3Qze>Nqk>aeQqHBEPq~nCF;%j;o;4~Yl_lj;%H@<RDOXdanpvYl zQ(023rO2gRPq~pQ-OL&lmdcWHGv!vw?UXyIGR>?};i)VscT?`A+)sIsD%;E&6_Lu4 z@-XF5%HxzLsdCM%QIV-EDNj?Lr94l0kt*NJ8WokwlJYV|JLOf%>r{ni)~M)ImXtRs zZ&Ti-yiZlEZ)S~(No7g-kn%C*Q_AO5rDoQs*i@F3FDYMBzNMT@Rc>aDic4il`JVD4 z<!8#TRF!7dsQ6Ttl;0`+DSuM_rm8lxMkS=Or2I?yKY=lYA!SXfS~F`@Vk*l7#uUa0 zj44bL7*m)hFs87isyDMnC4t3RCorb4O<+s`6?yd>shZ8KQORHlP+12m<3ME_PpWn^ zYg7tY98{)($}&(HCXlMp%o>#n76%nwpdt%YREeZ&HM2&gfyF^Z6sTwd6-g4QI?b$6 z>0ohCQ3NW2Kt&Hvs%|rDR7O2m0#y8fiXBjKBay1t%o>#m76%nMprQs;#3-feH?u}% zfyF^Z3#do|6(wq^2F<Kd*<f){2?8oPKqZD&s$ny0R1R1iR8oLS2;G#qsYcDLQMq7I zP}xuqDilD4fnlm~Giy{HSi&e}!UV<?Q0_NLHECvz$_I;@PGC#{<#<p|w@5W@W{oNU zi-U4FC}&%ztVuO*W{oNYi-NMWZOZxyj45`h7R{_tMPO0;35+SA?CLmyF~up>5|sXn z!4l3Xpul&Tz?kBiYSqjdRRR`uo4}ajK7ldCBV}%?bu(*JDOl8V0%MBT1jZEa35+Q| zsW#25QDtCp-wBK<eiIl|{8Q$p+BUOBm4ihCCNQQ1PGC$4n!uP6oNCw18dU)n51GK2 z5<0<|F(qsQV@i0ceKTuRC0HV20%J<#1jdx835+SxsSeGoQB`2^m<fz2u@e|m;wCVr z#HTtovqn{?Fa|Sd%-Gz;#>uGU;cOKXTAW%`9ODrX<C0pOU6NlA<B^!0U6P-aT9lSr zT(Ws5doVj=)MQ@%bViHGrTlMstQZ&=ii{W-7+&%)OkNl%F}Y1(9i!c5Q$cA)MzhI* zLYa(ilXnZ9X7rfcF8r6#XYvA3$;tCX7Akmx^eKV}B@p2SBD_I_G6Ms{Eyk3|iBeLN zD@D~9{WdQUWn*LkDVQASD>`|<SU0ynNTC^s@R}^hCp)=F+>|k3@(S^#e7D$h6Dyn& zi&Kk07EBi4)!f`7ae|2rtk`_ABCo{eEa^hHaUx7b{*%ATxR{49FfddxYwBwhg)%TO zXfhSaflQYNv3bBo6(QUTa$%7#NZx;Pfvh+q*bSSP%9b%Q`fiqyzsSTGHTj+5V#eIb zla%H$hD<h87T3fumHie+Zem4PVoqu5Ev5>?D5groTTB&3QIiXmeHaTj?^B-1$Pe;! z6_Z9q6|<&BMN#PFG*xZ30+78WlMS7OCl^SFOx~wz!d40j{m97+BP1sas{LcE*({*G zijmQ5^KK0-Mz&gzdb7!|H5D1_Ci7}F2tfou9%C+Q1W7hep06d&TF1b^U@*DfM0|39 zwiTwLrpa>JVqisPFh!ckCN+ahY5_$ZTV85;e6mpyH%NpBMAU8GtS!c<2KEiJg04ap zvx2rl5je6<z`?Fyt575cauHKe(d73!&phiv+Cb_dsv1Dt4iKRNB2+;H$aqb5h!2`T z0&o`;fpxcn#M&my>3K7DP0rFg$QU|VNB<;a4=9*6^BZ_EGWKnbGE8BVM_5w~(t;k% zlkXaZC?b5yc#ESfu_!1pFFh66hm(Vhd({!Dm~OEY=jY_zVkt{3Dn?evz`&3R4L{Dw z|BZ}b(GzDP!&o=D+9XgJ*$~#`{M59xqA4JEf&5zp3C_vyO>#9RL&6J5dC_!`x~U)n zS#gVLINKzU;IzpPO_fE#il%}1U}M2DQzuKBc``1XoNRVm0F-SYX?-3@k=bNF^H|0u zo7b4Tp=KH$OE+(5rqLoX(}2uP0ujj|A_YW%v(V&SmM%<7A*G0fRkcDn$cxN~oOp}1 zD8Do>MU$;)F-VW+<jq!zjLRpBTAybF=SH*1g%ZM(|5`5)1_ut?EzaD;ik#HE^pcFC z6_YpE_%W`Y{NLsfH`rs~l%xbI5GL<a<(T}&R)c*lDETtxPA(7-n`~sSFgegJlyS}E z<#vTkn;?!dvTqYz53+g#hybS)urV9K#yqu`XWTrQ)!{8CT+L(wUQx!4lLZ}}7`IFg zalC{fqsS{UIo3&)aqH%0Cvir`4U-?b2s1*AJMOH-xNGt!=NsbNK(=iM1qMga4iI}M zh(K1$>#EAQd$O_XFC~!LTP($eMI}YrAXQ*(oG9A--ISnKbh&9T?w!2Z?I96XTz6Mw z+&B5B`+sdj3PCHm6+q#~nw(#nR}#gXSX5MG1}>Z(JZ%^cY_9dJWReBtHE`~)0+j<V z|NsC0-w&KUG?|OmZ5H;iXJqu6oM<jGIo)?Y7dUk>=_nM1P8RTs<2wTK&T$3?hA5_7 z!>GwMeoGinPFD0UW?VUWs(+{e$m2yTKx)8|&pLUXjpk(K02Rhln>_+V7?H9t6Qn!` zry=BwQX6Q(9LT^hncqZwvQD4@5jtdo%+$cfpaluIf&dw<3A1Z*MUXz@>CG#GEEz?y zDfXTGEjX9`BB&r2P@gQQF1)!mM1+xX+2l!~ri{MeV0;>?&3JjUVAw52Rj>)`Kz;=! z<y(x|;0$|<v8V`aGdNlnOcsccU^fRv31bPkGWCoIXS^|aVZ;ol8KAVpRMZJF!4$-1 zi(<~qD=0!3$yQual$n=a1gbV~F=m0|2tt61pevKBBjp*dOr9ONl6M){fFc`^VYZV4 zqde^HFfcGAGlP2S3=9mM3=9lx3=9m;3=9m#APY(u7BHqT)-Ww(s%1`Ls%1%Gs%5R{ zC}FB$Zf100h^?7?Jt~eRg;AVgvT3vjW60#XXdO)lkl~IX!U;rx%qjxsJaAP2a%7PU zNWv9d0z8Yh;5K38U@W=|5-Xpq8S_M-0>rEY5mg|fda`V6tn>qrLm8nCWoKYu;D9-F z!{mj+()A#xmN1ntFJMVws$mpis9_ReSjgDS2yz`<oI!-4h5;fD_7d{~)*8kd<{GAj z%(W~ay*11=%pwd36C@ZGGS;$|uz|eH%}~QC&XB?aGF_S>g{7GZCMv;@Qja8@&eY6U z%T~iu!<NPr%%I8Y2WfM$FfcGw=|!a$<rgdDrzw<Vq$&iKCZ-f6mSiR?xE7WsmSpDV zDOA^1#2IN<*H&m(*V-CDs#<nLxmpB@!Xj`6+5-w4PzEaEXJC+L&}4_?6>w39NL!$w zzs2Y>d4jB{wqPO5KA3f9nHU&~`9Pt{$iv9PXu`zDB*kRHSoC;uyKpnJhqK#cUJ+$M zB!j`})oXHqxDpq8Msk{4X<qV8rpY-X5{yqk%|*s5lNSmL*ViyYf^Z>IEmI0}EptU* z3X2OvY+Ef$4Py#pHdB#H4NDDEHdE1>8fH)g)iM{V)i9>8W-}EPRK$VRO4PE}uz&&_ ztS$(yE-0J<td=dCsYtED2&`7CmbF3!%#s0zdp)Z-Lk*ia16XSZTx&--Lt!0AdpJW1 z`vRsKNWx}M;aI>_!whn;FvCKoT8<j_8V+#8aY7=lXbmW!K}k=O4IGo;NGS>gi9Q4o z_8<bR2-Gkt3S_8fV5kc4OjD??RY=K9PE|-ON>wPz&&f$mQAjKSM|^Q&ZmL2_W^Squ zm|IYkpOl!CnUh&k2}&C2sU;<udFcv?3dN<lAc5*y1=}jt>RSEkT1})%wg?panw(Lf zcC<@oaw@oJDN<q(W?(4V4{{VZx7`A<u7b)XCw`Es;L_ZHqWmOK)IA18zZx|91sGWv zxfnSZIlv?rBM&1Vn9ao~z$n7V!zjR5^b}IJo|fdFtn0v$!U)PlHB7TX8HRZ_Lkja; zmRgn)rW&RiW?_bAMo0{TgOUXjl)o6`s+bgPQT)IUDU-rMwFSr{t`!COMTbE=meh)Z zd{A*%F9c%crRJ4nf-?!o=|4bD2M;lVQ?39b4`b1DP#FR84G8lxFfg#f%7{k{3=E(W zB84#pRG2~7%qc7jnQ9qJ7#1*<FsHDlur)K)fKmWc3VRAi3TFyeI!i5c3U>-meF|?1 zUph-IOA2!>YYKBMTZKdolM6$vKrMR>J1C9Ta@26tvK9t}Gt{uwFi11hvQ{X7RY*Wo zNHC=E3xktnEoTj9En8txI71B^SS6^OV3cGiVOhWm5n0G6!cfbVBCvohMKDFEg`tMY zrJkV~R7x>Qf?UU)BD{dDhP8%E9Ap`n1W1ghhP#Fb9MB?uMed-QNdpw=pfn3fr;9+1 zSsg|OhL-^#*(eYZ4^kq<z`&3m&^tX(sQHV1de9EJ*4Kf*?9*fV4}H~$`EQ?o{(JD_ zrS-E}9Keab$|fWuRUtV)FD)}AH7_|;Av3QewWusHM<Ff0NTE0}w;(4Kl<LbfOEMIy zYgJK{7AJ$;1Bx0Z1_lODof8bIX9PelV5nh;<)~$>VVuZR$P&x|slK4KaxDW314EJ5 z<cBiC%AlT)05bzaF~|ruhAJ(DTRfponOtZrS<j(SU8|!|U8|{yRCeBCgSfB=RF9&S zp_;r!p!&H8lv$#fbBar%*mH_Y;tNuXqF6zUl3Ogfsfl?}OvNeSiWZW;Ky9QbzT%R^ zyp+VEl=#%5qWmIIWj8rhN~~TC(`}%H`yZ5WVR?>+Q3#xTS>SmOl=}q0xloKzicy5I z=p86ggS-n0IZ%QJ)zY9^wHVYiC}AjJ1Sem{8ir;jP~vW8jA5!}s%5T6l43-XVgV&# zaHeIcVVTX4!de5$x-2!Uvl&v@=5p4ufs-Or3S$k6G$?JcgZa!Uj5VxaK1T|BEhngq z%w{QSN#UsF%;N#`7>XvOaMp6xu+?yaQ(`?AB+o+<j<8#1PL4um9=Nzm%1O-2E>@^w ziPJFDuVT?uh*to2<%?uNN%9PcI14TnZn2h>7UZNts=qfNaYWRGfmCo6<$+2HP`MG5 zpI;KiS(KQPnVguHVi=_XXB$Par=+GArKTFf7)GE-VkkNfGVubaLl7=pTw0V;?3|xl zkXV#ioSz4ZDG^XY0~P5Ej8cqJjB<<ujG!`-gOQDqgOP=?=mRJhfyN$Q>VjC{R@Ezz zbC`=W^P-rO^NXV<&yAI0EStO|wotByrG_0GFoJ$n9N`&>B?_6v3Pq5Hv!?xIzqr*- zED(=^awoW+zr~VTmYAc-5yh66m!6Ya9L1SdnwJb}CKN}pf`y_uU?N~2MNM{y_pUbt zxf@ccb1`x;fl`<VlLk}KSCA_~#Vx$S2g+ga1|KNg(-~@+E7VFDY8b!`JgHh1Q1XJ- zl&m$(3z%zI7cw$36!L{Ll(2xBfwgRqVyl)tg|U{SLZyVE9;#WQmZgTHhPj4ClA(rO zf+2-Tn8BQ(mZQ)soS}pjq?Hjwvo|w>X%0|nh|Ep_*CC7yDJ&&yAl2dwwVWxe3qU0< zSZxiM1gTocT+3C$TEhv|UC#w#q%Z_CXtMbgfyx|k5=;l>9|nd8_ElDHnRzMTgb2#g zI<V}kkdj&ksb3Tl^HLPb5{ohuL1i4MXahCYQW8rNt1LkUpl@no9w_#zYZY`9f}y!z z!3C<l9xA7!5C$_MvlvtsaX<<lP>Lx6jaC(ba&pleP$HZOB0y0CsnWTlc=JkglTwS~ z%Rqxp#ZhdznR#W2IZ<r6i4`E4yC^X)B|kSlC$qQ&QXYXzFL2wB^DP4d!!72r#3E4L zY0e39cYI1}ak3pKU4R;J42&#{e9-zGl#=-vCBP*PsE+4hlma!!e@tEypUzbDa58Vg z62_I2HznjU`c76zOyAs-_?D5edUI9sGFGOd7n_wbw=l8uY2@kWY8y_zot;pBAJobf z!fe=9*}y}+3fu&)t}xW8FscPLZ$P07Z<;Ek!kWT~pq6k_g?6&7K@}@lb(OS-vzvm3 zM`n6PYH^8zbAE1aex8C`Vsc4-k>*Qd1_p-uDnXEv{4|9`a4aS%*eX<+gW5Yt?W;tE z<kX^)#LPT!`zo=ZAT<%xgHp)PQ%FlpP6ap5K@GQ;;2|$N&oqTRa6_&bxg}SUk(#Ff zYq-JNZS~-W8?@P00ZJscMWC^&C_YfT2GN9h2`b2{*b?Kw4peZ)Ql+{fs?^|@pq5;f zP&lYwjX<tet2i=?6*L@moHVQWL8X^1#3$g=>?Np2S*3!d<V^$>yh)&PHyOlA(X3*% z(YMpLoot^Y7XQ)`6ove-BC0quPa{IpzGx#zQ~{Lqbuf~Ao(?RjzXXjjSFtAQB<Unq ziGWmFC2A*WC+i#Q1ec_Mlugdg@wT!C72eE62B2gQCO~ayO-69r1%m=9&}4!%WP&Dt z$T8LdHF3ad!GtDbku=CWsCFiVv6_rUWt07L#p}Tux{(wygUbZ4b}*sI1ZmoX8cLds zU=v_gg7hNX1ZwANGJ*Ag``|>e>zN@MK+c5dB13?&C=KKRwxWaZP(!dlqx#^E3e2TU zMIi5jt<_}Ygm{R#=+fleJem62Aak&UK6nrhY7I0n8NtC0^CUDTK<<E<_zmP3Q0zhC zpaxQffjg)tKvJM?dJ(AkQX~Q5N-{7oOg@z-s$v1+ff7rR9f;)yB0NBZ4~Xys5do8# z^VREfLCiuB0UA3mssXXOKtvCS=mQZ8LBtXeu@pos2NA151Zb47XcLIF8ANOW5nDmT zE)cOBMC=6-`#{725OESjoB|Q2LBvG{R|bZn%OK_r5OD=WfW}N9;}xJmiK53Ku_qwn zDTn}dLconSaQgsU=@$K%d^&$VWANte0#8Q96`Qvf1~Jx)!Am??XFNDRrz|y!IU_kO zN(fZ^Ks##Cf-8y-wG$L2gxS7~;s<AZP(c7`#zYAwB^GBUhZJR|=jY|;rj`^{M)80v z1oq<6+}y;X%E<|wB9nEC`5Avqwk<9f;Njun;t}Ox=Md$QmE+}+o_wHKW%7k$uE|e| Yg-nDPC9py<MhQj;MkXZ~C72`_0muUfK>z>% delta 4959 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 diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index fc1fc53..4e6c751 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -798,21 +798,21 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): solution = "<" return problem, solution -def fibonacciSeriesFunc(minNo=1): - n = random.randint(minNo,20) - def createFibList(n): - l=[] - for i in range(n): - if i<2: - l.append(i) - else: - val = l[i-1]+l[i-2] - l.append(val) - return l - fibList=createFibList(n) - problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" - solution = fibList - return problem,solution +# def fibonacciSeriesFunc(minNo=1): +# n = random.randint(minNo,20) +# def createFibList(n): +# l=[] +# for i in range(n): +# if i<2: +# l.append(i) +# else: +# val = l[i-1]+l[i-2] +# l.append(val) +# return l +# fibList=createFibList(n) +# problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" +# solution = fibList +# return problem,solution def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one angle=random.choice(angles) @@ -826,6 +826,29 @@ def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): return problem,solution + +def data_desc(number_values=15,minval=5,maxval=50): + random_list=[] + for i in range(number_values): + n=random.randint(minval,maxval) + random_list.append(n) + a=sum(random_list) + mean=a/number_values + var=0 + for i in range(number_values): + var+=(random_list[i]-mean)**2 + print(random_list) + print(mean) + print(var/number_values) + print((var/number_values)**0.5) + problem="Find the mean,standard deviation and variance for the data"+str(random_list) + solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) + return problem,solution + + + + + # || Class Instances #Format is: @@ -887,5 +910,6 @@ diceSumProbability=Generator("Probability of a certain sum appearing on faces of exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) +# fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) +data_summary=Generator("Mean,Standard Deviation,Variance",58,"a,b,c","Mean:a+b+c/3,Std,Var",data_desc) \ No newline at end of file From 6b63ecf292390b4ba7fb9b23fc8e0f6f18494eda Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 00:08:30 +0530 Subject: [PATCH 026/116] Fibinocci uncommented --- mathgenerator/mathgen.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 4e6c751..a12331f 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -798,21 +798,21 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): solution = "<" return problem, solution -# def fibonacciSeriesFunc(minNo=1): -# n = random.randint(minNo,20) -# def createFibList(n): -# l=[] -# for i in range(n): -# if i<2: -# l.append(i) -# else: -# val = l[i-1]+l[i-2] -# l.append(val) -# return l -# fibList=createFibList(n) -# problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" -# solution = fibList -# return problem,solution +def fibonacciSeriesFunc(minNo=1): + n = random.randint(minNo,20) + def createFibList(n): + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l + fibList=createFibList(n) + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + solution = fibList + return problem,solution def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one angle=random.choice(angles) @@ -910,6 +910,6 @@ diceSumProbability=Generator("Probability of a certain sum appearing on faces of exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -# fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) +fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) data_summary=Generator("Mean,Standard Deviation,Variance",58,"a,b,c","Mean:a+b+c/3,Std,Var",data_desc) \ No newline at end of file From c6e3d8a8fdccad2283e3d3f2c1bf505f45884955 Mon Sep 17 00:00:00 2001 From: Priyadarshan Mohanty <priyadarshan.mohanty@loginradius.com> Date: Sun, 18 Oct 2020 00:19:23 +0530 Subject: [PATCH 027/116] Surface Area of Sphere added --- mathgenerator/mathgen.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 02b4c1d..e3f8995 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -476,6 +476,14 @@ def surfaceAreaCuboid(maxSide = 20, unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution +def surfaceAreaSphere(maxSide = 20, unit = 'm'): + r = random.randint(1, maxSide) + + problem = f"Surface area of Sphere with radius = {r}{unit} is" + ans = 4 * math.pi * r * r + solution = f"{ans} {unit}^2" + return problem, solution + def volumeCuboid(maxSide = 20, unit = 'm'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) @@ -896,3 +904,4 @@ surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) \ No newline at end of file From a798e9e3e54bb56a33b9ce63ad2073ca405c21a5 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 00:20:36 +0530 Subject: [PATCH 028/116] Removed Pycache --- .../__pycache__/__init__.cpython-37.pyc | Bin 160 -> 0 bytes .../__pycache__/mathgen.cpython-37.pyc | Bin 33916 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mathgenerator/__pycache__/__init__.cpython-37.pyc delete mode 100644 mathgenerator/__pycache__/mathgen.cpython-37.pyc diff --git a/mathgenerator/__pycache__/__init__.cpython-37.pyc b/mathgenerator/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 8b0d08300961a9cf36125e988780744bcb4225b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ?b<>g{vU|@J^(j5<?AA<-OW@KPsaA06yC}v?`U`SyIX3%8xTggxa5=IceJe{p# zLW@(2ieo$iVq8*-vrF;|VmuO)vrF=mQj5}3i%Vj16H7AEQ}a@b5=-)n(0K9jnR%Hd Z@$q^EmA5!-a`RJ4b5iX<R(u9I0|1=bDnbAN diff --git a/mathgenerator/__pycache__/mathgen.cpython-37.pyc b/mathgenerator/__pycache__/mathgen.cpython-37.pyc deleted file mode 100644 index 26c552d300e0698bcd1b325c1363a3d7fbd2a03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33916 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 From c76357186b74cc2ffdb9d8841628415dc8177985 Mon Sep 17 00:00:00 2001 From: Priyadarshan Mohanty <priyadarshan.mohanty@loginradius.com> Date: Sun, 18 Oct 2020 00:22:13 +0530 Subject: [PATCH 029/116] Function path changed --- mathgenerator/mathgen.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e3f8995..784d0b3 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -476,14 +476,6 @@ def surfaceAreaCuboid(maxSide = 20, unit = 'm'): solution = f"{ans} {unit}^2" return problem, solution -def surfaceAreaSphere(maxSide = 20, unit = 'm'): - r = random.randint(1, maxSide) - - problem = f"Surface area of Sphere with radius = {r}{unit} is" - ans = 4 * math.pi * r * r - solution = f"{ans} {unit}^2" - return problem, solution - def volumeCuboid(maxSide = 20, unit = 'm'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) @@ -841,6 +833,14 @@ def sumOfAnglesOfPolygonFunc(maxSides = 12): solution = sum return problem, solution +def surfaceAreaSphere(maxSide = 20, unit = 'm'): + r = random.randint(1, maxSide) + + problem = f"Surface area of Sphere with radius = {r}{unit} is" + ans = 4 * math.pi * r * r + solution = f"{ans} {unit}^2" + return problem, solution + # || Class Instances #Format is: From 954b47fecdae7366802af7b6a4a5c7a1edce2ba1 Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sat, 17 Oct 2020 22:53:55 +0400 Subject: [PATCH 030/116] added 4 test and an "=" in binaryComplement1sFunc --- mathgenerator/mathgen.py | 2 +- tests/test_mathgen.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 02b4c1d..b1ce210 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -70,7 +70,7 @@ def binaryComplement1sFunc(maxDigits = 10): question += temp answer += "0" if temp == "1" else "1" - problem = question + problem = question+"=" solution = answer return problem, solution diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index ace72a5..2d6e590 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -39,8 +39,42 @@ def test_moduloFunc(maxRes, maxModulo): assert eval(problem[:-1]) == int(solution) +@given(maxDigits=st.integers(min_value=1, max_value=16)) +def test_binaryComplement1sFunc(maxDigits): + assume(maxDigits > 1) + problem, solution = binaryComplement1sFunc(maxDigits) + assert "".join('1' if i == '0' else '0' for i in problem[:-1]) == solution + + @given(minNo=st.integers(min_value=1), maxNo=st.integers(min_value=1, max_value=2 ** 50)) def test_squareRootFunc(minNo, maxNo): assume(maxNo > minNo) problem, solution = squareRootFunc(minNo, maxNo) assert eval(problem[:-1]) == float(solution) + + +@given(maxSquareNum=st.integers(min_value=1)) +def test_squareFunc(maxSquareNum): + assume(maxSquareNum > 1) + problem, solution = squareFunc(maxSquareNum) + assert pow(int(problem[:-3]), 2) == int(solution) + + +@given(maxVal=st.integers(min_value=1)) +def test_lcmFunc(maxVal): + assume(maxVal > 1) + problem, solution = lcmFunc(maxVal) + split_arr = problem.split(' ') + mult = int(split_arr[2])*int(split_arr[4]) + assert mult if mult != pow(int(split_arr[2]), 2) else int( + split_arr[2]) == int(solution) + + +@given(maxVal=st.integers(min_value=1)) +def test_gcdFunc(maxVal): + assume(maxVal > 1) + problem, solution = gcdFunc(maxVal) + split_arr = problem.split(' ') + mult = int(split_arr[2])*int(split_arr[4]) + assert mult if mult != pow(int(split_arr[2]), 2) else int( + split_arr[2]) == int(solution) \ No newline at end of file From e416d597fa2c8e287fe562f99c454e7eb3cd5925 Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sat, 17 Oct 2020 22:55:04 +0400 Subject: [PATCH 031/116] fixed whitespaces --- mathgenerator/mathgen.py | 4 ++-- tests/test_mathgen.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index b1ce210..390bc96 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -116,7 +116,7 @@ def gcdFunc(maxVal=20): x, y = a, b while(y): x, y = y, x % y - problem = f"GCD of {a} and {b} = " + problem = f"GCD of {a} and {b} =" solution = str(x) return problem, solution @@ -128,7 +128,7 @@ def lcmFunc(maxVal=20): while(y): x, y = y, x % y d = c // x - problem = f"LCM of {a} and {b} = " + problem = f"LCM of {a} and {b} =" solution = str(d) return problem, solution diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index 2d6e590..a6aa078 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -77,4 +77,4 @@ def test_gcdFunc(maxVal): split_arr = problem.split(' ') mult = int(split_arr[2])*int(split_arr[4]) assert mult if mult != pow(int(split_arr[2]), 2) else int( - split_arr[2]) == int(solution) \ No newline at end of file + split_arr[2]) == int(solution) From 95178d8b46b2ea7e04069ad74c78ca916298c7ad Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 17:22:11 -0400 Subject: [PATCH 032/116] Version Number change --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e07aa01..4a578ab 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='mathgenerator', - version='1.1.1', + version='1.1.2', description='An open source solution for generating math problems', url='https://github.com/todarith/mathgenerator', author='Luke Weiler', From c9db6ff74776f78a0c88635f68ea2aa7007929e2 Mon Sep 17 00:00:00 2001 From: Swayam Gupta <guptaswayam075@gmail.com> Date: Sun, 18 Oct 2020 03:32:08 +0530 Subject: [PATCH 033/116] added volumeSphereFunc and updated README.md --- README.md | 137 +++++++++++++++++++++++++-------------- mathgenerator/mathgen.py | 15 +++-- 2 files changed, 96 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index a8c09dc..7643a53 100644 --- a/README.md +++ b/README.md @@ -30,53 +30,90 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 29+33= | 62 | addition | -| 1 | Subtraction | 62-7= | 55 | subtraction | -| 2 | Multiplication | 93*1= | 93 | multiplication | -| 3 | Division | 59/47= | 1.2553191489361701 | division | -| 4 | Binary Complement 1s | 001110000 | 110001111 | binaryComplement1s | -| 5 | Modulo Division | 89%34= | 21 | moduloDivision | -| 6 | Square Root | sqrt(16)= | 4 | squareRoot | -| 7 | Power Rule Differentiation | 4x^3 | 12x^2 | powerRuleDifferentiation | -| 8 | Square | 12^2= | 144 | square | -| 9 | LCM (Least Common Multiple) | LCM of 10 and 1 = | 10 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 12 and 5 = | 1 | gcd | -| 11 | Basic Algebra | 8x + 7 = 10 | 3/8 | basicAlgebra | -| 12 | Logarithm | log3(729) | 6 | log | -| 13 | Easy Division | 378/21 = | 18 | intDivision | -| 14 | Decimal to Binary | Binary of 4= | 100 | decimalToBinary | -| 15 | Binary to Decimal | 10011 | 19 | binaryToDecimal | -| 16 | Fraction Division | (1/2)/(4/3) | 3/8 | fractionDivision | -| 17 | Integer Multiplication with 2x2 Matrix | 2 * [[0, 7], [7, 7]] = | [[0,14],[14,14]] | intMatrix22Multiplication | -| 18 | Area of Triangle | Area of triangle with side lengths: 9 14 15 = | 61.644140029689765 | areaOfTriangle | -| 19 | Triangle exists check | Does triangle with sides 33, 6 and 43 exist? | No | doesTriangleExist | -| 20 | Midpoint of the two point | (-15,-10),(-5,2)= | (-10.0,-4.0) | midPointOfTwoPoint | -| 21 | Factoring Quadratic | x^2-17x+72 | (x-9)(x-8) | factoring | -| 22 | Third Angle of Triangle | Third angle of triangle with angles 4 and 31 = | 145 | thirdAngleOfTriangle | -| 23 | Solve a System of Equations in R^2 | 4x - 8y = 48, 3x - 8y = 40 | x = 8, y = -2 | systemOfEquations | -| 24 | Distance between 2 points | Find the distance between (-9, -20) and (18, -19) | sqrt(730) | distance2Point | -| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 13 = | 22.20 | pythagoreanTheorem | -| 26 | Linear Equations | -11x + -16y = -302 , 1x + 20y = 250 | x = 10, y = 12 | linearEquations | -| 27 | Prime Factorisation | Find prime factors of 55 | [5, 11] | primeFactors | -| 28 | Fraction Multiplication | (4/9)*(8/10) | 16/45 | fractionMultiplication | -| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 15 sides | 156.0 | angleRegularPolygon | -| 30 | Combinations of Objects | Number of combinations from 13 objects picked 1 at a time | 13 | combinations | -| 31 | Factorial | 2! = | 2 | factorial | -| 32 | Surface Area of Cube | Surface area of cube with side = 13m is | 1014 m^2 | surfaceAreaCubeGen | -| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 5m, 3m, 7m is | 142 m^2 | surfaceAreaCuboidGen | -| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 15m and radius = 7m is | 967 m^2 | surfaceAreaCylinderGen | -| 35 | Volum of Cube | Volume of cube with side = 11m is | 1331 m^3 | volumeCubeGen | -| 36 | Volume of Cuboid | Volume of cuboid with sides = 6m, 1m, 10m is | 60 m^3 | volumeCuboidGen | -| 37 | Volume of cylinder | Volume of cylinder with height = 26m and radius = 15m is | 18378 m^3 | volumeCylinderGen | -| 38 | Surface Area of cone | Surface area of cone with height = 46m and radius = 14m is | 2730 m^2 | surfaceAreaConeGen | -| 39 | Volume of cone | Volume of cone with height = 7m and radius = 11m is | 886 m^3 | volumeConeGen | -| 40 | Common Factors | Common Factors of 91 and 51 = | [1] | commonFactors | -| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 6/4x + 5 and y = -7/2x + 3 | (-2/5, 22/5) | intersectionOfTwoLines | -| 42 | Permutations | Number of Permutations from 13 objects picked 4 at a time = | 17160 | permutations | -| 43 | Cross Product of 2 Vectors | [-14, 13, 20] X [-5, -18, 19] = | [607, 166, 317] | vectorCross | -| 44 | Compare Fractions | Which symbol represents the comparison between 8/3 and 6/7? | > | compareFractions | -| 45 | Simple Interest | Simple interest for a principle amount of 6128 dollars, 5% rate of interest and for a time period of 5 years is = | 1532.0 | simpleInterest | -| 46 | Multiplication of two matrices | Multiply [[-20, -14, -88, -62, 39, 94, 21, 75, 26], [89, -67, -80, -60, 32, -23, -79, 11, -69], [13, -75, -66, 3, 67, -79, -49, 6, 36], [-44, -84, 68, -27, -86, -95, -71, -77, -62], [45, 58, 89, 82, 30, -83, -23, 51, 95], [11, 46, 100, -15, 60, -34, 85, 50, -44], [93, -100, -62, 63, -73, -64, 90, -15, 23], [-8, 91, -22, 53, -42, 25, 32, -26, 31], [-60, 90, 75, -42, 19, 33, -30, 74, 13]] and [[-80, 54, -39, 37, -99], [31, -28, -31, 64, 73], [-21, -34, -28, -21, -76], [-94, 55, 66, 0, 17], [-28, 25, -65, -74, 100], [76, 74, -96, -98, -5], [-90, -70, -66, -71, -35], [65, 49, -100, 72, -23], [-95, -97, -31, -84, -86]] | [[15409, 6508, -21665, -10161, 5326], [9859, 17962, 3267, 12768, 3119], [-8761, 1272, 8611, 738, 3881], [4489, -5790, 29652, 11947, -5940], [-22167, -8208, -1142, 6747, -10714], [-4628, -5167, -15527, 1404, 243], [-29240, -2432, 11103, 615, -22487], [-5498, -5038, 1462, -100, 2495], [18214, -3238, -15548, 3691, 6061]] | matrixMultiplication | -| 47 | Cube Root | cuberoot of 711 upto 2 decimal places is: | 8.93 | CubeRoot | -| 48 | Power Rule Integration | 3x^1 | (3/2)x^2 + c | powerRuleIntegration | -| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 94 , 101, 102 = | 63 | fourthAngleOfQuadrilateral | +| 0 | Addition | 42+2= | 44 | addition | +| 1 | Subtraction | 32-26= | 6 | subtraction | +| 2 | Multiplication | 77*1= | 77 | multiplication | +| 3 | Division | 66/9= | 7.333333333333333 | division | +| 4 | Binary Complement 1s | 1010000 | 0101111 | binaryComplement1s | +| 5 | Modulo Division | 61%35= | 26 | moduloDivision | +| 6 | Square Root | sqrt(1)= | 1 | squareRoot | +| 7 | Power Rule Differentiation | 5x^5 | 25x^4 | powerRuleDifferentiation | +| 8 | Square | 20^2= | 400 | square | +| 9 | LCM (Least Common Multiple) | LCM of 19 and 5 = | 95 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 10 and 11 = | 1 | gcd | +| 11 | Basic Algebra | 3x + 7 = 8 | 1/3 | basicAlgebra | +| 12 | Logarithm | log2(128) | 7 | log | +| 13 | Easy Division | 306/18 = | 17 | intDivision | +| 14 | Decimal to Binary | Binary of 28= | 11100 | decimalToBinary | +| 15 | Binary to Decimal | 10001101 | 141 | binaryToDecimal | +| 16 | Fraction Division | (4/1)/(6/3) | 2 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 5 * [[10, 3], [0, 1]] = | [[50,15],[0,5]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 13 2 14 = | 11.659223816361019 | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 3, 4 and 25 exist? | No | doesTriangleExist | +| 20 | Midpoint of the two point | (4,-11),(17,-5)= | (10.5,-8.0) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-12x+35 | (x-7)(x-5) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 20 and 62 = | 98 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | 5x - 7y = -84, 4x + 5y = 7 | x = -7, y = 7 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (5, -18) and (1, 19) | sqrt(1385) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 15 and 5 = | 15.81 | pythagoreanTheorem | +| 26 | Linear Equations | -6x + -17y = -220 +-13x + -19y = -120 | x = -20, y = 20 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 62 | [2, 31] | primeFactors | +| 28 | Fraction Multiplication | (8/4)*(1/2) | 1 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 19 sides | 161.05 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 12 objects picked 1 at a time | 12 | combinations | +| 31 | Factorial | 0! = | 1 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 8m is | 384 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 18m, 17m, 1m is | 682 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 31m and radius = 1m is | 201 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 9m is | 729 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 20m, 1m, 10m is | 200 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 7m and radius = 7m is | 1077 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 47m and radius = 13m is | 2522 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 4m and radius = 4m is | 67 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 20 and 90 = | [1, 2, 5, 10] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = -3/6x + 1 and y = 0/2x + 6 | (-10, 6) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 11 objects picked 2 at a time = | 110 | permutations | +| 43 | Cross Product of 2 Vectors | [-19, -3, 2] X [-15, -12, 7] = | [3, 103, 183] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 8/6 and 3/1? | < | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 9862 dollars, 4% rate of interest and for a time period of 1 years is = | 394.48 | simpleInterest | +| 46 | Multiplication of two matrices | Multiply + -50 36 7 -26 -2 63 + 88 -37 60 -19 61 -56 + 48 -5 69 -87 -64 -92 + -84 -50 -79 -19 86 -13 + 0 28 12 -14 73 -49 + 94 -90 2 26 -38 19 + 2 -11 79 -77 98 -77 + -87 70 72 -32 64 -99 + + and + + 34 32 -6 -32 46 -23 78 -81 -18 + -17 24 49 -62 -50 77 38 -98 -64 + -23 -78 43 5 -83 -5 4 -92 -16 + 46 -47 -92 52 -25 -37 44 51 -7 + 20 26 70 37 96 -73 49 84 42 + -72 -15 -80 -24 58 -47 -41 45 -69 | -8245 -1057 -423 -3535 -569 2034 -6329 1219 -5765 + 6619 567 10737 2391 4001 -6291 10147 -7387 6383 + 1472 -161 13318 -5565 -12574 10381 638 -23699 2621 + 1593 5598 3465 7899 13170 -6487 -4857 24642 10618 + 3592 3027 12206 1473 2120 -412 6082 -635 4561 + 3748 -1803 -11460 2072 5462 -8183 2423 11 947 + 2400 960 22950 2483 952 -1974 4625 -5512 9372 + 1132 -2067 22392 1884 -12276 8196 1949 -7148 5677 | matrixMultiplication | +| 47 | Cube Root | cuberoot of 771 upto 2 decimal places is: | 9.17 | CubeRoot | +| 48 | Power Rule Integration | 1x^3 + 8x^8 + 10x^10 | (1/3)x^4 + (8/8)x^9 + (10/10)x^11 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 52 , 84, 154 = | 70 | fourthAngleOfQuadrilateral | +| 50 | Quadratic Equation | Zeros of the Quadratic Equation 51x^2+152x+80=0 | [-0.68, -2.3] | quadraticEquationSolve | +| 51 | HCF (Highest Common Factor) | HCF of 11 and 7 = | 1 | hcf | +| 52 | Probability of a certain sum appearing on faces of dice | If 2 dice are rolled at the same time, the probability of getting a sum of 11 = | 2/36 | diceSumProbability | +| 53 | Exponentiation | 9^9 = | 387420489 | exponentiation | +| 54 | Confidence interval For sample S | The confidence interval for sample [291, 254, 274, 207, 253, 289, 268, 280, 225, 240, 278, 270, 247, 252, 211, 212, 295, 241, 290, 206, 222, 263, 264, 228, 229, 256, 209, 292] with 99% confidence is | (265.560249263099, 237.72546502261523) | confidenceInterval | +| 55 | Comparing surds | Fill in the blanks 16^(1/7) _ 67^(1/6) | < | surdsComparison | +| 56 | Fibonacci Series | The Fibonacci Series of the first 11 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | fibonacciSeries | +| 57 | Trigonometric Values | What is cos(60)? | 1/2 | basicTrigonometry | +| 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | +| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | +| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | +| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 28971a8..610e821 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -914,13 +914,16 @@ def surfaceAreaSphere(maxSide = 20, unit = 'm'): ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution - +def volumeSphereFunc(maxRadius = 100): + r=random.randint(1,maxRadius) + problem=f"Volume of sphere with radius {r} m = " + ans=(4*math.pi/3)*r*r*r + solution = f"{ans} m^3" + return problem,solution # || Class Instances # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) - - addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) @@ -944,8 +947,7 @@ doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with s midPointOfTwoPoint = Generator("Midpoint of the two point", 20, "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", - systemOfEquationsFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3",systemOfEquationsFunc) distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) # This has multiple variables whereas #23 has only x and y @@ -982,4 +984,5 @@ fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a n basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) \ No newline at end of file +surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) +volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) From f8318be9776731db46be03fe86347b9184462e13 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 19:16:29 -0400 Subject: [PATCH 034/116] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4a578ab..0b546c2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='mathgenerator', - version='1.1.2', + version='1.1.3', description='An open source solution for generating math problems', url='https://github.com/todarith/mathgenerator', author='Luke Weiler', From 07314e280d4dc336edf206567629d8c4504c3641 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:15:10 -0400 Subject: [PATCH 035/116] Update issue templates --- .github/ISSUE_TEMPLATE/new-generator-idea.md | 16 ++++++++++++++++ .../request-changes-to-a-generator.md | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/new-generator-idea.md create mode 100644 .github/ISSUE_TEMPLATE/request-changes-to-a-generator.md diff --git a/.github/ISSUE_TEMPLATE/new-generator-idea.md b/.github/ISSUE_TEMPLATE/new-generator-idea.md new file mode 100644 index 0000000..b986c9f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new-generator-idea.md @@ -0,0 +1,16 @@ +--- +name: New Generator Idea +about: Use this template if you have an idea for a new generator. +title: '' +labels: New generator, hacktoberfest +assignees: '' + +--- + +**Example Problem:** + +**Example Solution:** + +**Further explanation:** + +**Would you like to be assigned to this:** diff --git a/.github/ISSUE_TEMPLATE/request-changes-to-a-generator.md b/.github/ISSUE_TEMPLATE/request-changes-to-a-generator.md new file mode 100644 index 0000000..9fa48e2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request-changes-to-a-generator.md @@ -0,0 +1,12 @@ +--- +name: Request changes to a generator +about: If you find a faulty generator that needs a fix, use this template. +title: '' +labels: bug, hacktoberfest +assignees: '' + +--- + +**Name or Id of generator:** + +**Issue:** From 83e31cdce738ec7b52dd52d29b961529d89306a2 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:16:44 -0400 Subject: [PATCH 036/116] Update issue templates --- .github/ISSUE_TEMPLATE/custom-issue.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/custom-issue.md diff --git a/.github/ISSUE_TEMPLATE/custom-issue.md b/.github/ISSUE_TEMPLATE/custom-issue.md new file mode 100644 index 0000000..77fd3e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom-issue.md @@ -0,0 +1,10 @@ +--- +name: Custom Issue +about: If your issue lies outside of the other templates +title: '' +labels: '' +assignees: '' + +--- + + From 7802bdbdb428e24d3d73c213992c496df332cfb6 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:18:08 -0400 Subject: [PATCH 037/116] Update issue templates --- .github/ISSUE_TEMPLATE/other-issue.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/other-issue.md diff --git a/.github/ISSUE_TEMPLATE/other-issue.md b/.github/ISSUE_TEMPLATE/other-issue.md new file mode 100644 index 0000000..7b37378 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/other-issue.md @@ -0,0 +1,10 @@ +--- +name: Other Issue +about: If your issue lies outside of the other templates +title: '' +labels: '' +assignees: '' + +--- + + From 4331db74d0010319fa50707798700f2d1a3fef35 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sat, 17 Oct 2020 21:20:20 -0400 Subject: [PATCH 038/116] Remove custom issue template --- .github/ISSUE_TEMPLATE/custom-issue.md | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/custom-issue.md diff --git a/.github/ISSUE_TEMPLATE/custom-issue.md b/.github/ISSUE_TEMPLATE/custom-issue.md deleted file mode 100644 index 77fd3e9..0000000 --- a/.github/ISSUE_TEMPLATE/custom-issue.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Custom Issue -about: If your issue lies outside of the other templates -title: '' -labels: '' -assignees: '' - ---- - - From 39d9040da26095bca5632b31e25d245c868f8a71 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 08:43:41 +0530 Subject: [PATCH 039/116] Added function geometric progression --- mathgenerator/mathgen.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..f149213 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -899,10 +899,6 @@ def dataSummaryFunc(number_values=15,minval=5,maxval=50): var=0 for i in range(number_values): var+=(random_list[i]-mean)**2 - print(random_list) - print(mean) - print(var/number_values) - print((var/number_values)**0.5) problem="Find the mean,standard deviation and variance for the data"+str(random_list) solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) return problem,solution @@ -920,6 +916,30 @@ def volumeSphereFunc(maxRadius = 100): ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + + +def GeomProgrFunc(number_values=6,min_value=2,max_value=12,n_term=7,sum_term=5): + r=random.randint(min_value,max_value) + a=random.randint(min_value,max_value) + n_term=random.randint(number_values,number_values+5) + sum_term=random.randint(number_values,number_values+5) + GP=[] + for i in range(number_values): + GP.append(a*(r**i)) + problem="For the given GP "+str(GP)+" ,Find the value of a,common ratio,"+str(n_term)+"th term value, sum upto "+str(sum_term)+"th term" + value_nth_term=a*(r**(n_term-1)) + sum_till_nth_term=a*((r**sum_term-1)/(r-1)) + solution="The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format(a,r,n_term,value_nth_term,sum_term,sum_till_nth_term) + return problem,solution + + + + + + + + + # || Class Instances # Format is: @@ -986,3 +1006,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +geometricprogression=Generator("Geometric Progression",61,"Initial value,Common Ratio,nth Term,Sum till nth term =","a,r,ar^n-1,sum(ar^n-1",GeomProgrFunc) \ No newline at end of file From 48a376ebe883886cb1ef66b8e6a8af0dd9c51d5a Mon Sep 17 00:00:00 2001 From: Swayam Gupta <guptaswayam075@gmail.com> Date: Sun, 18 Oct 2020 09:02:12 +0530 Subject: [PATCH 040/116] added geometricMeanFunc and updated README.md --- README.md | 167 ++++++++++++++++++++------------------- mathgenerator/mathgen.py | 29 ++++++- 2 files changed, 113 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index 7643a53..9d38701 100644 --- a/README.md +++ b/README.md @@ -30,90 +30,93 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 42+2= | 44 | addition | -| 1 | Subtraction | 32-26= | 6 | subtraction | -| 2 | Multiplication | 77*1= | 77 | multiplication | -| 3 | Division | 66/9= | 7.333333333333333 | division | -| 4 | Binary Complement 1s | 1010000 | 0101111 | binaryComplement1s | -| 5 | Modulo Division | 61%35= | 26 | moduloDivision | -| 6 | Square Root | sqrt(1)= | 1 | squareRoot | -| 7 | Power Rule Differentiation | 5x^5 | 25x^4 | powerRuleDifferentiation | -| 8 | Square | 20^2= | 400 | square | -| 9 | LCM (Least Common Multiple) | LCM of 19 and 5 = | 95 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 10 and 11 = | 1 | gcd | -| 11 | Basic Algebra | 3x + 7 = 8 | 1/3 | basicAlgebra | -| 12 | Logarithm | log2(128) | 7 | log | -| 13 | Easy Division | 306/18 = | 17 | intDivision | -| 14 | Decimal to Binary | Binary of 28= | 11100 | decimalToBinary | -| 15 | Binary to Decimal | 10001101 | 141 | binaryToDecimal | -| 16 | Fraction Division | (4/1)/(6/3) | 2 | fractionDivision | -| 17 | Integer Multiplication with 2x2 Matrix | 5 * [[10, 3], [0, 1]] = | [[50,15],[0,5]] | intMatrix22Multiplication | -| 18 | Area of Triangle | Area of triangle with side lengths: 13 2 14 = | 11.659223816361019 | areaOfTriangle | -| 19 | Triangle exists check | Does triangle with sides 3, 4 and 25 exist? | No | doesTriangleExist | -| 20 | Midpoint of the two point | (4,-11),(17,-5)= | (10.5,-8.0) | midPointOfTwoPoint | -| 21 | Factoring Quadratic | x^2-12x+35 | (x-7)(x-5) | factoring | -| 22 | Third Angle of Triangle | Third angle of triangle with angles 20 and 62 = | 98 | thirdAngleOfTriangle | -| 23 | Solve a System of Equations in R^2 | 5x - 7y = -84, 4x + 5y = 7 | x = -7, y = 7 | systemOfEquations | -| 24 | Distance between 2 points | Find the distance between (5, -18) and (1, 19) | sqrt(1385) | distance2Point | -| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 15 and 5 = | 15.81 | pythagoreanTheorem | -| 26 | Linear Equations | -6x + -17y = -220 --13x + -19y = -120 | x = -20, y = 20 | linearEquations | -| 27 | Prime Factorisation | Find prime factors of 62 | [2, 31] | primeFactors | -| 28 | Fraction Multiplication | (8/4)*(1/2) | 1 | fractionMultiplication | -| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 19 sides | 161.05 | angleRegularPolygon | -| 30 | Combinations of Objects | Number of combinations from 12 objects picked 1 at a time | 12 | combinations | -| 31 | Factorial | 0! = | 1 | factorial | -| 32 | Surface Area of Cube | Surface area of cube with side = 8m is | 384 m^2 | surfaceAreaCubeGen | -| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 18m, 17m, 1m is | 682 m^2 | surfaceAreaCuboidGen | -| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 31m and radius = 1m is | 201 m^2 | surfaceAreaCylinderGen | -| 35 | Volum of Cube | Volume of cube with side = 9m is | 729 m^3 | volumeCubeGen | -| 36 | Volume of Cuboid | Volume of cuboid with sides = 20m, 1m, 10m is | 200 m^3 | volumeCuboidGen | -| 37 | Volume of cylinder | Volume of cylinder with height = 7m and radius = 7m is | 1077 m^3 | volumeCylinderGen | -| 38 | Surface Area of cone | Surface area of cone with height = 47m and radius = 13m is | 2522 m^2 | surfaceAreaConeGen | -| 39 | Volume of cone | Volume of cone with height = 4m and radius = 4m is | 67 m^3 | volumeConeGen | -| 40 | Common Factors | Common Factors of 20 and 90 = | [1, 2, 5, 10] | commonFactors | -| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = -3/6x + 1 and y = 0/2x + 6 | (-10, 6) | intersectionOfTwoLines | -| 42 | Permutations | Number of Permutations from 11 objects picked 2 at a time = | 110 | permutations | -| 43 | Cross Product of 2 Vectors | [-19, -3, 2] X [-15, -12, 7] = | [3, 103, 183] | vectorCross | -| 44 | Compare Fractions | Which symbol represents the comparison between 8/6 and 3/1? | < | compareFractions | -| 45 | Simple Interest | Simple interest for a principle amount of 9862 dollars, 4% rate of interest and for a time period of 1 years is = | 394.48 | simpleInterest | +| 0 | Addition | 37+40= | 77 | addition | +| 1 | Subtraction | 69-59= | 10 | subtraction | +| 2 | Multiplication | 18*0= | 0 | multiplication | +| 3 | Division | 66/25= | 2.64 | division | +| 4 | Binary Complement 1s | 00 | 11 | binaryComplement1s | +| 5 | Modulo Division | 37%68= | 37 | moduloDivision | +| 6 | Square Root | sqrt(4)= | 2 | squareRoot | +| 7 | Power Rule Differentiation | 6x^3 + 7x^5 + 6x^4 | 18x^2 + 35x^4 + 24x^3 | powerRuleDifferentiation | +| 8 | Square | 19^2= | 361 | square | +| 9 | LCM (Least Common Multiple) | LCM of 8 and 4 = | 8 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 20 and 1 = | 1 | gcd | +| 11 | Basic Algebra | 9x + 7 = 10 | 1/3 | basicAlgebra | +| 12 | Logarithm | log3(9) | 2 | log | +| 13 | Easy Division | 48/24 = | 2 | intDivision | +| 14 | Decimal to Binary | Binary of 69= | 1000101 | decimalToBinary | +| 15 | Binary to Decimal | 0010101100 | 172 | binaryToDecimal | +| 16 | Fraction Division | (8/2)/(7/5) | 20/7 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 10 * [[0, 3], [10, 5]] = | [[0,30],[100,50]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 16 1 19 = | (1.5148044320877339e-15+24.73863375370596j) | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 24, 25 and 24 exist? | Yes | doesTriangleExist | +| 20 | Midpoint of the two point | (-15,2),(12,-5)= | (-1.5,-1.5) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-2x-3 | (x+1)(x-3) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 65 and 78 = | 37 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | 2x - 8y = -58, 3x - 4y = -31 | x = -1, y = 7 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (21, 15) and (7, -4) | sqrt(557) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 20 and 20 = | 28.28 | pythagoreanTheorem | +| 26 | Linear Equations | -19x + -4y = 231 +13x + 18y = -387 | x = -9, y = -15 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 185 | [5, 37] | primeFactors | +| 28 | Fraction Multiplication | (4/10)*(4/9) | 8/45 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 17 sides | 158.82 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 10 objects picked 1 at a time | 10 | combinations | +| 31 | Factorial | 3! = | 6 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 16m is | 1536 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 6m, 7m, 17m is | 526 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 19m and radius = 4m is | 578 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 7m is | 343 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 1m, 17m, 18m is | 306 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 16m and radius = 10m is | 5026 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 36m and radius = 3m is | 368 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 21m and radius = 6m is | 791 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 31 and 79 = | [1] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 5x and y = -8/3x - 7 | (-21/23, -105/23) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 13 objects picked 3 at a time = | 1716 | permutations | +| 43 | Cross Product of 2 Vectors | [10, 11, -18] X [-2, 13, -2] = | [212, 56, 152] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 4/2 and 4/1? | < | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 5369 dollars, 1% rate of interest and for a time period of 9 years is = | 483.21 | simpleInterest | | 46 | Multiplication of two matrices | Multiply - -50 36 7 -26 -2 63 - 88 -37 60 -19 61 -56 - 48 -5 69 -87 -64 -92 - -84 -50 -79 -19 86 -13 - 0 28 12 -14 73 -49 - 94 -90 2 26 -38 19 - 2 -11 79 -77 98 -77 - -87 70 72 -32 64 -99 + -16 87 100 -5 -69 97 -75 19 + 90 -83 -16 81 -30 64 -3 -96 + -74 -66 48 99 35 6 -14 70 + -24 67 -4 -95 4 51 31 -17 + 61 46 -72 66 -31 15 61 -31 + 84 63 78 -51 -11 -38 -68 -50 + 82 83 16 -100 17 2 8 -83 + 28 71 -68 -66 37 -84 79 32 and - 34 32 -6 -32 46 -23 78 -81 -18 - -17 24 49 -62 -50 77 38 -98 -64 - -23 -78 43 5 -83 -5 4 -92 -16 - 46 -47 -92 52 -25 -37 44 51 -7 - 20 26 70 37 96 -73 49 84 42 - -72 -15 -80 -24 58 -47 -41 45 -69 | -8245 -1057 -423 -3535 -569 2034 -6329 1219 -5765 - 6619 567 10737 2391 4001 -6291 10147 -7387 6383 - 1472 -161 13318 -5565 -12574 10381 638 -23699 2621 - 1593 5598 3465 7899 13170 -6487 -4857 24642 10618 - 3592 3027 12206 1473 2120 -412 6082 -635 4561 - 3748 -1803 -11460 2072 5462 -8183 2423 11 947 - 2400 960 22950 2483 952 -1974 4625 -5512 9372 - 1132 -2067 22392 1884 -12276 8196 1949 -7148 5677 | matrixMultiplication | -| 47 | Cube Root | cuberoot of 771 upto 2 decimal places is: | 9.17 | CubeRoot | -| 48 | Power Rule Integration | 1x^3 + 8x^8 + 10x^10 | (1/3)x^4 + (8/8)x^9 + (10/10)x^11 + c | powerRuleIntegration | -| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 52 , 84, 154 = | 70 | fourthAngleOfQuadrilateral | -| 50 | Quadratic Equation | Zeros of the Quadratic Equation 51x^2+152x+80=0 | [-0.68, -2.3] | quadraticEquationSolve | -| 51 | HCF (Highest Common Factor) | HCF of 11 and 7 = | 1 | hcf | -| 52 | Probability of a certain sum appearing on faces of dice | If 2 dice are rolled at the same time, the probability of getting a sum of 11 = | 2/36 | diceSumProbability | -| 53 | Exponentiation | 9^9 = | 387420489 | exponentiation | -| 54 | Confidence interval For sample S | The confidence interval for sample [291, 254, 274, 207, 253, 289, 268, 280, 225, 240, 278, 270, 247, 252, 211, 212, 295, 241, 290, 206, 222, 263, 264, 228, 229, 256, 209, 292] with 99% confidence is | (265.560249263099, 237.72546502261523) | confidenceInterval | -| 55 | Comparing surds | Fill in the blanks 16^(1/7) _ 67^(1/6) | < | surdsComparison | -| 56 | Fibonacci Series | The Fibonacci Series of the first 11 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | fibonacciSeries | -| 57 | Trigonometric Values | What is cos(60)? | 1/2 | basicTrigonometry | + 50 -78 66 -8 -33 -61 -75 -18 -50 + -98 10 -66 -53 -24 -36 62 -39 -35 + 86 -52 -49 47 62 0 -12 96 55 + 61 41 -77 -89 46 -44 50 4 -81 + -12 -88 -88 9 83 62 60 -22 15 + 26 -3 44 -60 83 100 -35 97 26 + -17 -93 -5 79 55 78 32 0 -45 + -17 -54 -92 -48 -88 46 82 -22 12 | 3271 8443 -2346 -12616 937 -1490 -3233 16984 8750 + 19906 4214 20268 -4021 12861 -6176 -19662 9385 -8839 + 11719 1099 -19689 -6976 8029 7432 13014 7182 2782 +-12865 -3615 4806 5149 2332 10216 -695 2288 6117 + -3372 836 5371 -7056 210 -5371 -534 -6721 -17158 + 2773 -1963 5727 3403 -5201 -17234 -11486 971 3323 + -7635 -8262 13038 9246 1015 -5530 -11796 -1931 926 +-19947 -12723 -4715 8769 -12252 168 10130 -19731 -7079 | matrixMultiplication | +| 47 | Cube Root | cuberoot of 136 upto 2 decimal places is: | 5.14 | CubeRoot | +| 48 | Power Rule Integration | 9x^4 + 8x^6 + 2x^5 + 3x^10 + 2x^9 | (9/4)x^5 + (8/6)x^7 + (2/5)x^6 + (3/10)x^11 + (2/9)x^10 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 69 , 87, 120 = | 84 | fourthAngleOfQuadrilateral | +| 50 | Quadratic Equation | Zeros of the Quadratic Equation 71x^2+188x+17=0 | [-0.09, -2.55] | quadraticEquationSolve | +| 51 | HCF (Highest Common Factor) | HCF of 3 and 16 = | 1 | hcf | +| 52 | Probability of a certain sum appearing on faces of dice | If 3 dice are rolled at the same time, the probability of getting a sum of 8 = | 21/216 | diceSumProbability | +| 53 | Exponentiation | 9^3 = | 729 | exponentiation | +| 54 | Confidence interval For sample S | The confidence interval for sample [203, 266, 261, 263, 262, 251, 267, 248, 208, 228, 215, 221, 282, 242, 272, 281, 289, 290, 285, 217, 213, 200, 292, 256, 232, 273, 295, 271, 211, 250, 231, 246, 277, 259, 283, 233] with 90% confidence is | (259.72847423786504, 244.32708131769053) | confidenceInterval | +| 55 | Comparing surds | Fill in the blanks 50^(1/7) _ 86^(1/5) | < | surdsComparison | +| 56 | Fibonacci Series | The Fibonacci Series of the first 3 numbers is ? | [0, 1, 1] | fibonacciSeries | +| 57 | Trigonometric Values | What is tan(45)? | 1 | basicTrigonometry | | 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | -| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | -| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | -| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | +| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[10, 25, 12, 26, 15, 13, 41, 25, 50, 13, 20, 22, 42, 36, 22] | The Mean is 24.8 , Standard Deviation is 141.09333333333333, Variance is 11.87827147918978 | dataSummary | +| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 5m is | 314.1592653589793 m^2 | surfaceAreaSphereGen | +| 60 | Volume of Sphere | Volume of sphere with radius 70 m = | 1436755.0402417318 m^3 | volumeSphere | +| 61 | Geometric Mean of N Numbers | Geometric mean of 2 numbers 9 and 5 = | (9*5)^(1/2) = 6.708203932499369 | geometricMean | diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 610e821..402b513 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -919,7 +919,33 @@ def volumeSphereFunc(maxRadius = 100): problem=f"Volume of sphere with radius {r} m = " ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" - return problem,solution + return problem,solution +def geometricMeanFunc(maxValue=100, maxNum=4): + + a=random.randint(1,maxValue) + b=random.randint(1,maxValue) + c=random.randint(1,maxValue) + d=random.randint(1,maxValue) + num=random.randint(2,4) + if num==2: + product=a*b + elif num==3: + product=a*b*c + elif num==4: + product=a*b*c*d + + ans=product**(1/num) + if num==2: + problem=f"Geometric mean of {num} numbers {a} and {b} = " + solution = f"({a}*{b})^(1/{num}) = {ans}" + elif num==3: + problem=f"Geometric mean of {num} numbers {a} , {b} and {c} = " + solution = f"({a}*{b}*{c})^(1/{num}) = {ans}" + elif num==4: + problem=f"Geometric mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f"({a}*{b}*{c}*{d})^(1/{num}) = {ans}" + return problem,solution + # || Class Instances # Format is: @@ -986,3 +1012,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +geometricMean=Generator("Geometric Mean of N Numbers",61,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) \ No newline at end of file From 7ae1e3cc1413c26f2dd4a8ac6674967766c935b5 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 09:03:00 +0530 Subject: [PATCH 041/116] pylint for GP and Generators part --- mathgenerator/mathgen.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index f149213..67dfa48 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1000,10 +1000,10 @@ diceSumProbability=Generator("Probability of a certain sum appearing on faces of exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) -basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) +fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers", "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) +basicTrigonometry=Generator("Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) -volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) -geometricprogression=Generator("Geometric Progression",61,"Initial value,Common Ratio,nth Term,Sum till nth term =","a,r,ar^n-1,sum(ar^n-1",GeomProgrFunc) \ No newline at end of file +surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) +volumeSphere=Generator("Volume of Sphere", 60, "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) +geometricprogression=Generator("Geometric Progression", 61, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", GeomProgrFunc) \ No newline at end of file From 3ac7236ea652b456bac9919254dda11c0531d909 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 09:06:03 +0530 Subject: [PATCH 042/116] trying out lint --- mathgenerator/mathgen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 67dfa48..647c1df 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,3 +1,4 @@ +# for lint import random import math import fractions @@ -918,7 +919,7 @@ def volumeSphereFunc(maxRadius = 100): return problem,solution -def GeomProgrFunc(number_values=6,min_value=2,max_value=12,n_term=7,sum_term=5): +def GeomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, sum_term=5): r=random.randint(min_value,max_value) a=random.randint(min_value,max_value) n_term=random.randint(number_values,number_values+5) From 63de4180dc512d10dc90a4e2d311373f776ade44 Mon Sep 17 00:00:00 2001 From: Swayam Gupta <guptaswayam075@gmail.com> Date: Sun, 18 Oct 2020 09:07:43 +0530 Subject: [PATCH 043/116] added geometricMeanFunc and updated README.md --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 12a3f16..8bf09dd 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1012,4 +1012,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) -geometricMean=Generator("Geometric Mean of N Numbers",61,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) \ No newline at end of file +geometricMean=Generator("Geometric Mean of N Numbers",61,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) From c94a59604220b660f22da5e248d15dd1e23fdcd0 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 09:09:16 +0530 Subject: [PATCH 044/116] flake8 comments --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 647c1df..e4d5e3a 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,4 +1,4 @@ -# for lint + # for lint import random import math import fractions From 716c3666f157c89ea6869087d71140b1cd3cb66f Mon Sep 17 00:00:00 2001 From: NarayanAdithya <narayanadithya1234@gmail.com> Date: Sun, 18 Oct 2020 09:15:21 +0530 Subject: [PATCH 045/116] Flake for 797+ lines --- mathgenerator/mathgen.py | 41 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index e4d5e3a..b2d7837 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,4 +1,3 @@ - # for lint import random import math import fractions @@ -79,7 +78,7 @@ def binaryComplement1sFunc(maxDigits=10): question += temp answer += "0" if temp == "1" else "1" - problem = question+"=" + problem = question + "=" solution = answer return problem, solution @@ -783,6 +782,7 @@ def quadraticEquation(maxVal=100): solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) return problem, solution + def hcfFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -793,25 +793,26 @@ def hcfFunc(maxVal=20): solution = str(x) return problem, solution + def DiceSumProbFunc(maxDice=3): - a = random.randint(1,maxDice) - b = random.randint(a,6*a) - count=0 - for i in [1,2,3,4,5,6]: - if a==1: - if i==b: - count=count+1 - elif a==2: - for j in [1,2,3,4,5,6]: - if i+j==b: - count=count+1 - elif a==3: - for j in [1,2,3,4,5,6]: - for k in [1,2,3,4,5,6]: - if i+j+k==b: - count=count+1 - problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) - solution="{}/{}".format(count, 6**a) + a = random.randint(1, maxDice) + b = random.randint(a, 6 * a) + count = 0 + for i in [1, 2, 3, 4, 5, 6]: + if a == 1: + if i == b: + count = count + 1 + elif a == 2 : + for j in [1, 2, 3, 4, 5, 6]: + if i + j == b: + count= count + 1 + elif a == 3: + for j in [1, 2, 3, 4, 5, 6]: + for k in [1, 2, 3, 4, 5, 6]: + if i + j + k == b: + count= count + 1 + problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a, b) + solution="{}/{}".format(count, 6 ** a) return problem, solution def exponentiationFunc(maxBase = 20,maxExpo = 10): From 26173e3dc9a3396e7849f1612155465e27a7d570 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <57533346+NarayanAdithya@users.noreply.github.com> Date: Sun, 18 Oct 2020 09:24:47 +0530 Subject: [PATCH 046/116] Update Readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7643a53..7034023 100644 --- a/README.md +++ b/README.md @@ -117,3 +117,4 @@ problem, solution = mathgen.genById(0) | 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | | 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | | 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | +| 61 | Geometric Progression | Given [2,4,8] find a,r,4th term, sum to 3rd term| 2,2,16,14 | GeomProgrFunc From 0d4387c7cda7251e4e027eebc49ca5949e55a277 Mon Sep 17 00:00:00 2001 From: NarayanAdithya <57533346+NarayanAdithya@users.noreply.github.com> Date: Sun, 18 Oct 2020 09:25:12 +0530 Subject: [PATCH 047/116] Update Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7034023..342105f 100644 --- a/README.md +++ b/README.md @@ -117,4 +117,4 @@ problem, solution = mathgen.genById(0) | 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | | 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | | 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | -| 61 | Geometric Progression | Given [2,4,8] find a,r,4th term, sum to 3rd term| 2,2,16,14 | GeomProgrFunc +| 61 | Geometric Progression | Given [2,4,8] find a,r,4th term, sum to 3rd term| 2,2,16,14 | GeomProgrFunc | From bbe80963ef75b03e82bf24a2ae8eb51a18db4482 Mon Sep 17 00:00:00 2001 From: Sajag Swami <65067354+SunTzunami@users.noreply.github.com> Date: Sun, 18 Oct 2020 11:47:10 +0530 Subject: [PATCH 048/116] Rectified the "fourthAngleOfQuadriFunc" function. The previous version of this function generated angles for convex quadrilaterals only. The new version generates angles for concave quadrilateral as well. --- mathgenerator/mathgen.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..1ee6bb5 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -758,18 +758,23 @@ def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): solution = solution + " + c" return problem, solution - -def fourthAngleOfQuadriFunc(maxAngle=180): - angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, 240 - angle1) - angle3 = random.randint(1, 340 - (angle1 + angle2)) - sum_ = angle1 + angle2 + angle3 - angle4 = 360 - sum_ - problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" - solution = angle4 +def fourthAngleOfQuadriFunc(total=360): + def rand_anglesquad(): + a=180 + b=0 + c=0 + d=0 + while(c==0 or d==0): + a=random.randint(1, total-20) + b=random.randint(1, total-a-10) + c=random.randint(1, total-a-b) + d=total-a-b-c + return a, b, c, d + a, b, c, d=rand_anglesquad() + problem="Fourth angle of a quadrilateral with three angles {}, {}, {} (in degrees)".format(a, b, c) + solution=d return problem, solution - def quadraticEquation(maxVal=100): a = random.randint(1, maxVal) c = random.randint(1, maxVal) @@ -909,11 +914,11 @@ def dataSummaryFunc(number_values=15,minval=5,maxval=50): def surfaceAreaSphere(maxSide = 20, unit = 'm'): r = random.randint(1, maxSide) - problem = f"Surface area of Sphere with radius = {r}{unit} is" ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution + def volumeSphereFunc(maxRadius = 100): r=random.randint(1,maxRadius) problem=f"Volume of sphere with radius {r} m = " @@ -973,7 +978,7 @@ simpleInterest = Generator("Simple Interest", 45, "Simple interest for a princip matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) +fourthAngleOfQuadrilateral = Generator("Fourth angle of a quadrilateral", 49, "Fourth angle of a uadrilateral with angles 100, 50, 80 (in degrees)=", "130", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) From dcd2d1e89e917b26fe1f4d69b17353cf1896c60d Mon Sep 17 00:00:00 2001 From: Sajag Swami <65067354+SunTzunami@users.noreply.github.com> Date: Sun, 18 Oct 2020 11:48:17 +0530 Subject: [PATCH 049/116] rectified a typo --- mathgenerator/mathgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 1ee6bb5..18a508c 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -978,7 +978,7 @@ simpleInterest = Generator("Simple Interest", 45, "Simple interest for a princip matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth angle of a quadrilateral", 49, "Fourth angle of a uadrilateral with angles 100, 50, 80 (in degrees)=", "130", fourthAngleOfQuadriFunc) +fourthAngleOfQuadrilateral = Generator("Fourth angle of a quadrilateral", 49, "Fourth angle of a quadrilateral with angles 100, 50, 80 (in degrees)=", "130", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) From 0ab9edf57bffa4092940d8126434d612ce75bd46 Mon Sep 17 00:00:00 2001 From: Yuval Goldberg <yuvigoldi@hotmail.com> Date: Sun, 18 Oct 2020 11:16:48 +0300 Subject: [PATCH 050/116] Fix lint errors, adding a formatter --- Makefile | 8 +- dev-requirements.txt | 3 +- makeReadme.py | 12 +- mathgenerator/mathgen.py | 377 ++++++++++++++++++++++++--------------- 4 files changed, 247 insertions(+), 153 deletions(-) diff --git a/Makefile b/Makefile index bd04e35..9414a0b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ -FLAKE_FLAGS = --ignore=E501,F401,F403,F405 +IGNORE_ERRORS = E501,F401,F403,F405 +PKG = mathgenerator + +format: + python -m autopep8 --ignore=$(IGNORE_ERRORS) -i $(PKG)/* lint: - python -m flake8 $(FLAKE_FLAGS) + python -m flake8 --ignore=$(IGNORE_ERRORS) $(PKG) test: python -m pytest --verbose -s tests diff --git a/dev-requirements.txt b/dev-requirements.txt index 6e46af4..c29cf4e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,3 +1,4 @@ pytest hypothesis -flake8 \ No newline at end of file +flake8 +autopep8 \ No newline at end of file diff --git a/makeReadme.py b/makeReadme.py index 7ca8f2c..64f7989 100644 --- a/makeReadme.py +++ b/makeReadme.py @@ -1,10 +1,10 @@ -#To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py +# To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py wList = getGenList() allRows = [] -f=open('mathgen.py') -lines=f.readlines() -line = 720 #This has to be changed depending on which line the first generator appears on +f = open('mathgen.py') +lines = f.readlines() +line = 720 # This has to be changed depending on which line the first generator appears on for item in wList: myGen = item[2] prob, sol = myGen() @@ -13,10 +13,10 @@ for item in wList: instName = lines[line] def_name = instName[:instName.find('=')].strip() row = [myGen.id, myGen.title, prob, sol, def_name] - line+=1 + line += 1 allRows.append(row) -g=open('../README.md', "a") +g = open('../README.md', "a") for row in allRows: tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" g.write(tableLine) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..6f37443 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -36,7 +36,8 @@ def getGenList(): def additionFunc(maxSum=99, maxAddend=50): a = random.randint(0, maxAddend) - b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + b = random.randint(0, min((maxSum - a), maxAddend)) c = a + b problem = str(a) + "+" + str(b) + "=" solution = str(c) @@ -78,7 +79,7 @@ def binaryComplement1sFunc(maxDigits=10): question += temp answer += "0" if temp == "1" else "1" - problem = question+"=" + problem = question + "=" solution = answer return problem, solution @@ -248,7 +249,8 @@ def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): c = random.randint(1, maxC) s = (a + b + c) / 2 area = (s * (s - a) * (s - b) * (s - c)) ** 0.5 - problem = "Area of triangle with side lengths: " + str(a) + " " + str(b) + " " + str(c) + " = " + problem = "Area of triangle with side lengths: " + \ + str(a) + " " + str(b) + " " + str(c) + " = " solution = area return problem, solution @@ -259,7 +261,8 @@ def isTriangleValidFunc(maxSideLength=50): sideC = random.randint(1, maxSideLength) sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & ( + sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: solution = "Yes" @@ -352,7 +355,8 @@ def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): # No redundant 1s y_coeff = abs(coeffs[1]) if abs(coeffs[1]) != 1 else '' # Don't include if 0, unless x is also 0 (probably never happens) - y_str = f'{y_coeff}y' if coeffs[1] != 0 else ('' if x_str != '' else '0') + y_str = f'{y_coeff}y' if coeffs[1] != 0 else ( + '' if x_str != '' else '0') return f'{x_str}{op}{y_str} = {coeffs[2]}' problem = f"{coeffToFuncString(new_c1)}, {coeffToFuncString(new_c2)}" @@ -391,7 +395,8 @@ def linearEquationsFunc(n=2, varRange=20, coeffRange=20): soln = [random.randint(-varRange, varRange) for i in range(n)] problem = list() - solution = ", ".join(["{} = {}".format(vars[i], soln[i]) for i in range(n)]) + solution = ", ".join(["{} = {}".format(vars[i], soln[i]) + for i in range(n)]) for _ in range(n): coeff = [random.randint(-coeffRange, coeffRange) for i in range(n)] res = sum([coeff[i] * soln[i] for i in range(n)]) @@ -469,7 +474,8 @@ def combinationsFunc(maxlength=20): b = random.randint(0, 9) solution = int(factorial(a) / (factorial(b) * factorial(a - b))) - problem = "Number of combinations from {} objects picked {} at a time ".format(a, b) + problem = "Number of combinations from {} objects picked {} at a time ".format( + a, b) return problem, solution @@ -615,8 +621,10 @@ def intersectionOfTwoLinesFunc( x = f"{x.numerator}/{x.denominator}" return x - m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) - m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + m1 = (random.randint(minM, maxM), random.randint( + minDenominator, maxDenominator)) + m2 = (random.randint(minM, maxM), random.randint( + minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) b2 = random.randint(minB, maxB) equation1 = generateEquationString(m1, b1) @@ -642,7 +650,8 @@ def permutationFunc(maxlength=20): a = random.randint(10, maxlength) b = random.randint(0, 9) solution = int(math.factorial(a) / (math.factorial(a - b))) - problem = "Number of Permutations from {} objects picked {} at a time = ".format(a, b) + problem = "Number of Permutations from {} objects picked {} at a time = ".format( + a, b) return problem, solution @@ -685,7 +694,8 @@ def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): b = random.randint(1, maxRate) c = random.randint(1, maxTime) d = (a * b * c) / 100 - problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " + problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str( + b) + "% rate of interest and for a time period of " + str(c) + " years is = " solution = round(d, 2) return problem, solution @@ -718,7 +728,8 @@ def matrixMultiplicationFunc(maxVal=100): for t in range(n): temp += a[r][t] * b[t][c] res[r].append(temp) - problem = f"Multiply \n{a_string}\n and \n\n{b_string}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + # consider using a, b instead of a_string, b_string if the problem doesn't look right + problem = f"Multiply \n{a_string}\n and \n\n{b_string}" solution = matrixMultiplicationFuncHelper(res) return problem, solution @@ -754,7 +765,8 @@ def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "(" + str(coefficient) + "/" + str(exponent) + ")x^" + str(exponent + 1) + solution += "(" + str(coefficient) + "/" + \ + str(exponent) + ")x^" + str(exponent + 1) solution = solution + " + c" return problem, solution @@ -773,15 +785,18 @@ def fourthAngleOfQuadriFunc(maxAngle=180): def quadraticEquation(maxVal=100): a = random.randint(1, maxVal) c = random.randint(1, maxVal) - b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) + b = random.randint(round(math.sqrt(4 * a * c)) + 1, + round(math.sqrt(4 * maxVal * maxVal))) problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) D = math.sqrt(b * b - 4 * a * c) - solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + solution = str([round((-b + D) / (2 * a), 2), + round((-b - D) / (2 * a), 2)]) return problem, solution + def hcfFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -792,61 +807,67 @@ def hcfFunc(maxVal=20): solution = str(x) return problem, solution + def DiceSumProbFunc(maxDice=3): - a = random.randint(1,maxDice) - b = random.randint(a,6*a) - count=0 - for i in [1,2,3,4,5,6]: - if a==1: - if i==b: - count=count+1 - elif a==2: - for j in [1,2,3,4,5,6]: - if i+j==b: - count=count+1 - elif a==3: - for j in [1,2,3,4,5,6]: - for k in [1,2,3,4,5,6]: - if i+j+k==b: - count=count+1 - problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) - solution="{}/{}".format(count, 6**a) + a = random.randint(1, maxDice) + b = random.randint(a, 6 * a) + count = 0 + for i in [1, 2, 3, 4, 5, 6]: + if a == 1: + if i == b: + count = count + 1 + elif a == 2: + for j in [1, 2, 3, 4, 5, 6]: + if i + j == b: + count = count + 1 + elif a == 3: + for j in [1, 2, 3, 4, 5, 6]: + for k in [1, 2, 3, 4, 5, 6]: + if i + j + k == b: + count = count + 1 + problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format( + a, b) + solution = "{}/{}".format(count, 6**a) return problem, solution -def exponentiationFunc(maxBase = 20,maxExpo = 10): + +def exponentiationFunc(maxBase=20, maxExpo=10): base = random.randint(1, maxBase) expo = random.randint(1, maxExpo) problem = f"{base}^{expo} =" solution = str(base ** expo) return problem, solution + def confidenceIntervalFunc(): - n=random.randint(20,40) - j=random.randint(0,3) - lst=random.sample(range(200,300),n) - lst_per=[80 ,90, 95, 99] + n = random.randint(20, 40) + j = random.randint(0, 3) + lst = random.sample(range(200, 300), n) + lst_per = [80, 90, 95, 99] lst_t = [1.282, 1.645, 1.960, 2.576] - mean=0 - sd=0 + mean = 0 + sd = 0 for i in lst: - count= i + mean - mean=count - mean = mean/n + count = i + mean + mean = count + mean = mean / n for i in lst: - x=(i-mean)**2+sd - sd=x - sd=sd/n - standard_error = lst_t[j]*math.sqrt(sd/n) - problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) - solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + x = (i - mean)**2 + sd + sd = x + sd = sd / n + standard_error = lst_t[j] * math.sqrt(sd / n) + problem = 'The confidence interval for sample {} with {}% confidence is'.format( + [x for x in lst], lst_per[j]) + solution = '({}, {})'.format(mean + standard_error, mean - standard_error) return problem, solution -def surdsComparisonFunc(maxValue = 100, maxRoot = 10): - radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) - degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) + +def surdsComparisonFunc(maxValue=100, maxRoot=10): + radicand1, radicand2 = tuple(random.sample(range(1, maxValue), 2)) + degree1, degree2 = tuple(random.sample(range(1, maxRoot), 2)) problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" - first = math.pow(radicand1, 1/degree1) - second = math.pow(radicand2, 1/degree2) + first = math.pow(radicand1, 1 / degree1) + second = math.pow(radicand2, 1 / degree2) solution = "=" if first > second: solution = ">" @@ -854,135 +875,203 @@ def surdsComparisonFunc(maxValue = 100, maxRoot = 10): solution = "<" return problem, solution + def fibonacciSeriesFunc(minNo=1): - n = random.randint(minNo,20) + n = random.randint(minNo, 20) + def createFibList(n): - l=[] + fibList = [] for i in range(n): - if i<2: - l.append(i) + if i < 2: + fibList.append(i) else: - val = l[i-1]+l[i-2] - l.append(val) - return l - fibList=createFibList(n) - problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + val = fibList[i - 1] + fibList[i - 2] + fibList.append(val) + return fibList + fibList = createFibList(n) + problem = "The Fibonacci Series of the first " + str(n) + " numbers is ?" solution = fibList - return problem,solution + return problem, solution -def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one - angle=random.choice(angles) - function=random.choice(functions) - problem=f"What is {function}({angle})?" - expression='math.'+function+'(math.radians(angle))' - result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} +# Handles degrees in quadrant one +def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], functions=["sin", "cos", "tan"]): + angle = random.choice(angles) + function = random.choice(functions) - solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition + problem = f"What is {function}({angle})?" + expression = 'math.' + function + '(math.radians(angle))' + result_fraction_map = {0.0: "0", 0.5: "1/2", 0.71: "1/√2", + 0.87: "√3/2", 1.0: "1", 0.58: "1/√3", 1.73: "√3"} - return problem,solution + solution = result_fraction_map[round(eval(expression), 2)] if round( + eval(expression), 2) <= 99999 else "∞" # for handling the ∞ condition -def sumOfAnglesOfPolygonFunc(maxSides = 12): + return problem, solution + + +def sumOfAnglesOfPolygonFunc(maxSides=12): side = random.randint(3, maxSides) sum = (side - 2) * 180 problem = f"Sum of angles of polygon with {side} sides = " solution = sum return problem, solution -def dataSummaryFunc(number_values=15,minval=5,maxval=50): - random_list=[] + +def dataSummaryFunc(number_values=15, minval=5, maxval=50): + random_list = [] for i in range(number_values): - n=random.randint(minval,maxval) + n = random.randint(minval, maxval) random_list.append(n) - a=sum(random_list) - mean=a/number_values - var=0 + a = sum(random_list) + mean = a / number_values + var = 0 for i in range(number_values): - var+=(random_list[i]-mean)**2 + var += (random_list[i] - mean)**2 print(random_list) print(mean) - print(var/number_values) - print((var/number_values)**0.5) - problem="Find the mean,standard deviation and variance for the data"+str(random_list) - solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) - return problem,solution + print(var / number_values) + print((var / number_values)**0.5) + problem = "Find the mean,standard deviation and variance for the data" + \ + str(random_list) + solution = "The Mean is {} , Standard Deviation is {}, Variance is {}".format( + mean, var / number_values, (var / number_values)**0.5) + return problem, solution -def surfaceAreaSphere(maxSide = 20, unit = 'm'): + +def surfaceAreaSphere(maxSide=20, unit='m'): r = random.randint(1, maxSide) problem = f"Surface area of Sphere with radius = {r}{unit} is" ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution -def volumeSphereFunc(maxRadius = 100): - r=random.randint(1,maxRadius) - problem=f"Volume of sphere with radius {r} m = " - ans=(4*math.pi/3)*r*r*r + + +def volumeSphereFunc(maxRadius=100): + r = random.randint(1, maxRadius) + problem = f"Volume of sphere with radius {r} m = " + ans = (4 * math.pi / 3) * r * r * r solution = f"{ans} m^3" - return problem,solution + return problem, solution # || Class Instances + # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) -multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) +multiplication = Generator( + "Multiplication", 2, "a*b=", "c", multiplicationFunc) division = Generator("Division", 3, "a/b=", "c", divisionFunc) -binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) +binaryComplement1s = Generator( + "Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) -powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) +powerRuleDifferentiation = Generator( + "Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) square = Generator("Square", 8, "a^2", "b", squareFunc) -lcm = Generator("LCM (Least Common Multiple)", 9, "LCM of a and b = ", "c", lcmFunc) -gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", "c", gcdFunc) -basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) +lcm = Generator("LCM (Least Common Multiple)", 9, + "LCM of a and b = ", "c", lcmFunc) +gcd = Generator("GCD (Greatest Common Denominator)", + 10, "GCD of a and b = ", "c", gcdFunc) +basicAlgebra = Generator( + "Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary", 14, "Binary of a=", "b", DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal", 15, "Decimal of a=", "b", BinaryToDecimalFunc) -fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) -intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) -areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) -doesTriangleExist = Generator("Triangle exists check", 19, "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) -midPointOfTwoPoint = Generator("Midpoint of the two point", 20, "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) -factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) -thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3",systemOfEquationsFunc) -distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) -pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) # This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) -fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects", 30, "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) +decimalToBinary = Generator("Decimal to Binary", 14, + "Binary of a=", "b", DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15, + "Decimal of a=", "b", BinaryToDecimalFunc) +fractionDivision = Generator( + "Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) +intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", + 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) +areaOfTriangle = Generator( + "Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) +doesTriangleExist = Generator("Triangle exists check", 19, + "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) +midPointOfTwoPoint = Generator("Midpoint of the two point", 20, + "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) +factoring = Generator("Factoring Quadratic", 21, + "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, + "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, + "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) +distance2Point = Generator("Distance between 2 points", 24, + "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) +pythagoreanTheorem = Generator( + "Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) +# This has multiple variables whereas #23 has only x and y +linearEquations = Generator( + "Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) +primeFactors = Generator("Prime Factorisation", 27, + "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) +fractionMultiplication = Generator( + "Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) +angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, + "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) +combinations = Generator("Combinations of Objects", 30, + "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) -surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) -surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) -volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) -volumeCylinderGen = Generator("Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) -surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) -volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) -commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) -intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -permutations = Generator("Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) -vectorCross = Generator("Cross Product of 2 Vectors", 43, "a X b = ", "c", vectorCrossFunc) -compareFractions = Generator("Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) -simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices", 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) -powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) -quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) -hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) -diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) -exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) -confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) -surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) -basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) -dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) -volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +surfaceAreaCubeGen = Generator( + "Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator( + "Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator( + "Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator( + "Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) +volumeCuboidGen = Generator( + "Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) +volumeCylinderGen = Generator( + "Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) +surfaceAreaConeGen = Generator( + "Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) +volumeConeGen = Generator( + "Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) +commonFactors = Generator( + "Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) +intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, + "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +permutations = Generator( + "Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) +vectorCross = Generator("Cross Product of 2 Vectors", + 43, "a X b = ", "c", vectorCrossFunc) +compareFractions = Generator( + "Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) +simpleInterest = Generator( + "Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) +matrixMultiplication = Generator("Multiplication of two matrices", + 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) +CubeRoot = Generator( + "Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) +powerRuleIntegration = Generator( + "Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, + "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) +quadraticEquationSolve = Generator( + "Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) +hcf = Generator("HCF (Highest Common Factor)", 51, + "HCF of a and b = ", "c", hcfFunc) +diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice", + 52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) +exponentiation = Generator( + "Exponentiation", 53, "a^b = ", "c", exponentiationFunc) +confidenceInterval = Generator("Confidence interval For sample S", + 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) +surdsComparison = Generator( + "Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) +fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers", + "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) +basicTrigonometry = Generator( + "Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, + "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +dataSummary = Generator("Mean,Standard Deviation,Variance", + 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) +surfaceAreaSphereGen = Generator( + "Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) +volumeSphere = Generator("Volume of Sphere", 60, + "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) From e1c50c5fd68caa11ab452d590ede0d1a791da815 Mon Sep 17 00:00:00 2001 From: ieshaan12 <ieshaan1999@gmail.com> Date: Sun, 18 Oct 2020 14:26:13 +0530 Subject: [PATCH 051/116] nth Fibonacci number --- mathgenerator/mathgen.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..d632bef 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -3,7 +3,7 @@ import math import fractions genList = [] - +GOLDEN_RATIO = (1 + math.sqrt(5))/2 # || Generator class class Generator: @@ -920,6 +920,16 @@ def volumeSphereFunc(maxRadius = 100): ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + +def nthFibonacciNumber(maxN = 100): + n = random.randint(1,maxN) + problem = f"What is the {n}th Fibonacci number?" + ans = round((math.pow(GOLDEN_RATIO,n) - math.pow(-GOLDEN_RATIO,-n))/(math.sqrt(5))) + solution = f"{ans}" + return problem, solution + + + # || Class Instances # Format is: @@ -986,3 +996,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumber) \ No newline at end of file From 629e23c94196aa90a4f61ab1cd336dce95d39ddd Mon Sep 17 00:00:00 2001 From: Swayam Gupta <guptaswayam075@gmail.com> Date: Sun, 18 Oct 2020 16:11:38 +0530 Subject: [PATCH 052/116] added harmonicMeanFunc --- README.md | 161 ++++++++++++++++++--------------------- mathgenerator/mathgen.py | 24 +++--- 2 files changed, 88 insertions(+), 97 deletions(-) diff --git a/README.md b/README.md index 9d38701..a3c7db3 100644 --- a/README.md +++ b/README.md @@ -30,93 +30,84 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 37+40= | 77 | addition | -| 1 | Subtraction | 69-59= | 10 | subtraction | -| 2 | Multiplication | 18*0= | 0 | multiplication | -| 3 | Division | 66/25= | 2.64 | division | -| 4 | Binary Complement 1s | 00 | 11 | binaryComplement1s | -| 5 | Modulo Division | 37%68= | 37 | moduloDivision | -| 6 | Square Root | sqrt(4)= | 2 | squareRoot | -| 7 | Power Rule Differentiation | 6x^3 + 7x^5 + 6x^4 | 18x^2 + 35x^4 + 24x^3 | powerRuleDifferentiation | -| 8 | Square | 19^2= | 361 | square | -| 9 | LCM (Least Common Multiple) | LCM of 8 and 4 = | 8 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 20 and 1 = | 1 | gcd | -| 11 | Basic Algebra | 9x + 7 = 10 | 1/3 | basicAlgebra | -| 12 | Logarithm | log3(9) | 2 | log | -| 13 | Easy Division | 48/24 = | 2 | intDivision | -| 14 | Decimal to Binary | Binary of 69= | 1000101 | decimalToBinary | -| 15 | Binary to Decimal | 0010101100 | 172 | binaryToDecimal | -| 16 | Fraction Division | (8/2)/(7/5) | 20/7 | fractionDivision | -| 17 | Integer Multiplication with 2x2 Matrix | 10 * [[0, 3], [10, 5]] = | [[0,30],[100,50]] | intMatrix22Multiplication | -| 18 | Area of Triangle | Area of triangle with side lengths: 16 1 19 = | (1.5148044320877339e-15+24.73863375370596j) | areaOfTriangle | -| 19 | Triangle exists check | Does triangle with sides 24, 25 and 24 exist? | Yes | doesTriangleExist | -| 20 | Midpoint of the two point | (-15,2),(12,-5)= | (-1.5,-1.5) | midPointOfTwoPoint | -| 21 | Factoring Quadratic | x^2-2x-3 | (x+1)(x-3) | factoring | -| 22 | Third Angle of Triangle | Third angle of triangle with angles 65 and 78 = | 37 | thirdAngleOfTriangle | -| 23 | Solve a System of Equations in R^2 | 2x - 8y = -58, 3x - 4y = -31 | x = -1, y = 7 | systemOfEquations | -| 24 | Distance between 2 points | Find the distance between (21, 15) and (7, -4) | sqrt(557) | distance2Point | -| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 20 and 20 = | 28.28 | pythagoreanTheorem | -| 26 | Linear Equations | -19x + -4y = 231 -13x + 18y = -387 | x = -9, y = -15 | linearEquations | -| 27 | Prime Factorisation | Find prime factors of 185 | [5, 37] | primeFactors | -| 28 | Fraction Multiplication | (4/10)*(4/9) | 8/45 | fractionMultiplication | -| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 17 sides | 158.82 | angleRegularPolygon | -| 30 | Combinations of Objects | Number of combinations from 10 objects picked 1 at a time | 10 | combinations | -| 31 | Factorial | 3! = | 6 | factorial | -| 32 | Surface Area of Cube | Surface area of cube with side = 16m is | 1536 m^2 | surfaceAreaCubeGen | -| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 6m, 7m, 17m is | 526 m^2 | surfaceAreaCuboidGen | -| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 19m and radius = 4m is | 578 m^2 | surfaceAreaCylinderGen | + +| 0 | Addition | 5+49= | 54 | addition | +| 1 | Subtraction | 63-53= | 10 | subtraction | +| 2 | Multiplication | 21*2= | 42 | multiplication | +| 3 | Division | 87/60= | 1.45 | division | +| 4 | Binary Complement 1s | 11011111= | 00100000 | binaryComplement1s | +| 5 | Modulo Division | 10%10= | 0 | moduloDivision | +| 6 | Square Root | sqrt(16)= | 4 | squareRoot | +| 7 | Power Rule Differentiation | 9x^6 + 8x^6 + 5x^9 + 1x^6 + 10x^1 | 54x^5 + 48x^5 + 45x^8 + 6x^5 + 10x^0 | powerRuleDifferentiation | +| 8 | Square | 6^2= | 36 | square | +| 9 | LCM (Least Common Multiple) | LCM of 9 and 6 = | 18 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 3 and 15 = | 3 | gcd | +| 11 | Basic Algebra | 2x + 2 = 9 | 7/2 | basicAlgebra | +| 12 | Logarithm | log2(4) | 2 | log | +| 13 | Easy Division | 180/15 = | 12 | intDivision | +| 14 | Decimal to Binary | Binary of 53= | 110101 | decimalToBinary | +| 15 | Binary to Decimal | 1000110111 | 567 | binaryToDecimal | +| 16 | Fraction Division | (10/4)/(1/10) | 25 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 1 * [[0, 4], [6, 2]] = | [[0,4],[6,2]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 8 3 19 = | (4.3470649019239876e-15+70.9929573971954j) | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 8, 12 and 39 exist? | No | doesTriangleExist | +| 20 | Midpoint of the two point | (-17,-16),(-6,9)= | (-11.5,-3.5) | midPointOfTwoPoint | +| 21 | Factoring Quadratic | x^2-15x+56 | (x-8)(x-7) | factoring | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 17 and 81 = | 82 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | -7x - 5y = 22, 5x - 4y = 7 | x = -1, y = -3 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (-4, -13) and (15, 10) | sqrt(890) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 11 and 2 = | 11.18 | pythagoreanTheorem | +| 26 | Linear Equations | -9x + 15y = 171 +-9x + 9y = 135 | x = -9, y = 6 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 61 | [61] | primeFactors | +| 28 | Fraction Multiplication | (8/7)*(9/10) | 36/35 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 20 sides | 162.0 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 13 objects picked 8 at a time | 1287 | combinations | +| 31 | Factorial | 6! = | 720 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 17m is | 1734 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 3m, 18m, 1m is | 150 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 20m and radius = 15m is | 3298 m^2 | surfaceAreaCylinderGen | | 35 | Volum of Cube | Volume of cube with side = 7m is | 343 m^3 | volumeCubeGen | -| 36 | Volume of Cuboid | Volume of cuboid with sides = 1m, 17m, 18m is | 306 m^3 | volumeCuboidGen | -| 37 | Volume of cylinder | Volume of cylinder with height = 16m and radius = 10m is | 5026 m^3 | volumeCylinderGen | -| 38 | Surface Area of cone | Surface area of cone with height = 36m and radius = 3m is | 368 m^2 | surfaceAreaConeGen | -| 39 | Volume of cone | Volume of cone with height = 21m and radius = 6m is | 791 m^3 | volumeConeGen | -| 40 | Common Factors | Common Factors of 31 and 79 = | [1] | commonFactors | -| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = 5x and y = -8/3x - 7 | (-21/23, -105/23) | intersectionOfTwoLines | -| 42 | Permutations | Number of Permutations from 13 objects picked 3 at a time = | 1716 | permutations | -| 43 | Cross Product of 2 Vectors | [10, 11, -18] X [-2, 13, -2] = | [212, 56, 152] | vectorCross | -| 44 | Compare Fractions | Which symbol represents the comparison between 4/2 and 4/1? | < | compareFractions | -| 45 | Simple Interest | Simple interest for a principle amount of 5369 dollars, 1% rate of interest and for a time period of 9 years is = | 483.21 | simpleInterest | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 16m, 5m, 11m is | 880 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 28m and radius = 12m is | 12666 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 29m and radius = 1m is | 94 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 2m and radius = 15m is | 471 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 52 and 53 = | [1] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = -8/4x + 3 and y = -6x - 4 | (-7/4, 13/2) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 13 objects picked 1 at a time = | 13 | permutations | +| 43 | Cross Product of 2 Vectors | [-6, -20, -15] X [-17, 14, 18] = | [-150, 363, -424] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 7/4 and 5/6? | > | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 4813 dollars, 2% rate of interest and for a time period of 4 years is = | 385.04 | simpleInterest | | 46 | Multiplication of two matrices | Multiply - -16 87 100 -5 -69 97 -75 19 - 90 -83 -16 81 -30 64 -3 -96 - -74 -66 48 99 35 6 -14 70 - -24 67 -4 -95 4 51 31 -17 - 61 46 -72 66 -31 15 61 -31 - 84 63 78 -51 -11 -38 -68 -50 - 82 83 16 -100 17 2 8 -83 - 28 71 -68 -66 37 -84 79 32 + -11 -69 54 67 + 54 -24 52 35 + 9 -76 82 65 + 37 -40 87 -85 + 42 45 74 75 and - 50 -78 66 -8 -33 -61 -75 -18 -50 - -98 10 -66 -53 -24 -36 62 -39 -35 - 86 -52 -49 47 62 0 -12 96 55 - 61 41 -77 -89 46 -44 50 4 -81 - -12 -88 -88 9 83 62 60 -22 15 - 26 -3 44 -60 83 100 -35 97 26 - -17 -93 -5 79 55 78 32 0 -45 - -17 -54 -92 -48 -88 46 82 -22 12 | 3271 8443 -2346 -12616 937 -1490 -3233 16984 8750 - 19906 4214 20268 -4021 12861 -6176 -19662 9385 -8839 - 11719 1099 -19689 -6976 8029 7432 13014 7182 2782 --12865 -3615 4806 5149 2332 10216 -695 2288 6117 - -3372 836 5371 -7056 210 -5371 -534 -6721 -17158 - 2773 -1963 5727 3403 -5201 -17234 -11486 971 3323 - -7635 -8262 13038 9246 1015 -5530 -11796 -1931 926 --19947 -12723 -4715 8769 -12252 168 10130 -19731 -7079 | matrixMultiplication | -| 47 | Cube Root | cuberoot of 136 upto 2 decimal places is: | 5.14 | CubeRoot | -| 48 | Power Rule Integration | 9x^4 + 8x^6 + 2x^5 + 3x^10 + 2x^9 | (9/4)x^5 + (8/6)x^7 + (2/5)x^6 + (3/10)x^11 + (2/9)x^10 + c | powerRuleIntegration | -| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 69 , 87, 120 = | 84 | fourthAngleOfQuadrilateral | -| 50 | Quadratic Equation | Zeros of the Quadratic Equation 71x^2+188x+17=0 | [-0.09, -2.55] | quadraticEquationSolve | -| 51 | HCF (Highest Common Factor) | HCF of 3 and 16 = | 1 | hcf | -| 52 | Probability of a certain sum appearing on faces of dice | If 3 dice are rolled at the same time, the probability of getting a sum of 8 = | 21/216 | diceSumProbability | -| 53 | Exponentiation | 9^3 = | 729 | exponentiation | -| 54 | Confidence interval For sample S | The confidence interval for sample [203, 266, 261, 263, 262, 251, 267, 248, 208, 228, 215, 221, 282, 242, 272, 281, 289, 290, 285, 217, 213, 200, 292, 256, 232, 273, 295, 271, 211, 250, 231, 246, 277, 259, 283, 233] with 90% confidence is | (259.72847423786504, 244.32708131769053) | confidenceInterval | -| 55 | Comparing surds | Fill in the blanks 50^(1/7) _ 86^(1/5) | < | surdsComparison | -| 56 | Fibonacci Series | The Fibonacci Series of the first 3 numbers is ? | [0, 1, 1] | fibonacciSeries | -| 57 | Trigonometric Values | What is tan(45)? | 1 | basicTrigonometry | -| 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | -| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[10, 25, 12, 26, 15, 13, 41, 25, 50, 13, 20, 22, 42, 36, 22] | The Mean is 24.8 , Standard Deviation is 141.09333333333333, Variance is 11.87827147918978 | dataSummary | -| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 5m is | 314.1592653589793 m^2 | surfaceAreaSphereGen | -| 60 | Volume of Sphere | Volume of sphere with radius 70 m = | 1436755.0402417318 m^3 | volumeSphere | -| 61 | Geometric Mean of N Numbers | Geometric mean of 2 numbers 9 and 5 = | (9*5)^(1/2) = 6.708203932499369 | geometricMean | + 62 -96 -68 97 -88 71 69 + -38 48 -31 8 53 18 100 + 57 -41 54 81 -74 -80 47 + -63 -10 86 -6 77 31 -12 | 797 -5140 11565 2353 -1526 -4266 -5925 + 5019 -8818 2890 9048 -7177 327 3350 + 4025 -8524 11762 6517 -5883 -5274 -3905 + 14128 -8189 -3888 10826 -18359 -7688 3662 + 387 -5656 6195 9978 -1012 197 9976 | matrixMultiplication | +| 47 | Cube Root | cuberoot of 566 upto 2 decimal places is: | 8.27 | CubeRoot | +| 48 | Power Rule Integration | 6x^3 + 6x^4 + 5x^2 + 10x^9 | (6/3)x^4 + (6/4)x^5 + (5/2)x^3 + (10/9)x^10 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 6 , 199, 42 = | 113 | fourthAngleOfQuadrilateral | +| 50 | Quadratic Equation | Zeros of the Quadratic Equation 63x^2+118x+19=0 | [-0.18, -1.7] | quadraticEquationSolve | +| 51 | HCF (Highest Common Factor) | HCF of 20 and 14 = | 2 | hcf | +| 52 | Probability of a certain sum appearing on faces of dice | If 3 dice are rolled at the same time, the probability of getting a sum of 5 = | 6/216 | diceSumProbability | +| 53 | Exponentiation | 1^3 = | 1 | exponentiation | +| 54 | Confidence interval For sample S | The confidence interval for sample [289, 284, 269, 211, 272, 298, 290, 220, 206, 224, 230, 222, 227, 209, 262, 255, 282, 253, 274, 265, 258, 248, 277, 279, 223, 221, 219, 286, 259, 297, 234, 201, 232, 203, 294, 252, 207, 278, 202] with 80% confidence is | (255.4031906501125, 242.64809140116955) | confidenceInterval | +| 55 | Comparing surds | Fill in the blanks 50^(1/9) _ 61^(1/7) | < | surdsComparison | +| 56 | Fibonacci Series | The Fibonacci Series of the first 1 numbers is ? | [0] | fibonacciSeries | +| 57 | Trigonometric Values | What is sin(30)? | 1/2 | basicTrigonometry | +| 58 | Sum of Angles of Polygon | Sum of angles of polygon with 8 sides = | 1080 | sumOfAnglesOfPolygon | +| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[11, 17, 17, 20, 25, 38, 45, 19, 38, 31, 23, 16, 42, 28, 16] | The Mean is 25.733333333333334 , Standard Deviation is 107.66222222222224, Variance is 10.376040777783318 | dataSummary | +| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | +| 60 | Volume of Sphere | Volume of sphere with radius 100 m = | 4188790.2047863905 m^3 | volumeSphere | +| 61 | Harmonic Mean of N Numbers | Harmonic mean of 2 numbers 6 and 66 = | 2/((1/6) + (1/66)) = 11.0 | harmonicMean | diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 8bf09dd..a164434 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -920,7 +920,7 @@ def volumeSphereFunc(maxRadius = 100): ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution -def geometricMeanFunc(maxValue=100, maxNum=4): +def harmonicMeanFunc(maxValue=100, maxNum=4): a=random.randint(1,maxValue) b=random.randint(1,maxValue) @@ -928,22 +928,22 @@ def geometricMeanFunc(maxValue=100, maxNum=4): d=random.randint(1,maxValue) num=random.randint(2,4) if num==2: - product=a*b + sum=(1/a)+(1/b) elif num==3: - product=a*b*c + sum=(1/a)+(1/b)+(1/c) elif num==4: - product=a*b*c*d + sum=(1/a)+(1/b)+(1/c)+(1/d) - ans=product**(1/num) + ans=num/sum if num==2: - problem=f"Geometric mean of {num} numbers {a} and {b} = " - solution = f"({a}*{b})^(1/{num}) = {ans}" + problem=f"Harmonic mean of {num} numbers {a} and {b} = " + solution = f" {num}/((1/{a}) + (1/{b})) = {ans}" elif num==3: - problem=f"Geometric mean of {num} numbers {a} , {b} and {c} = " - solution = f"({a}*{b}*{c})^(1/{num}) = {ans}" + problem=f"Harmonic mean of {num} numbers {a} , {b} and {c} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c})) = {ans}" elif num==4: - problem=f"Geometric mean of {num} numbers {a} , {b} , {c} , {d} = " - solution = f"({a}*{b}*{c}*{d})^(1/{num}) = {ans}" + problem=f"Harmonic mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c}) + (1/{d})) = {ans}" return problem,solution # || Class Instances @@ -1012,4 +1012,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) -geometricMean=Generator("Geometric Mean of N Numbers",61,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) +harmonicMean=Generator("Harmonic Mean of N Numbers",61,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) \ No newline at end of file From 3c1b02787fa0cff72fa403d420572bdb2ecbfd93 Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sun, 18 Oct 2020 19:03:56 +0400 Subject: [PATCH 053/116] complete restructure of the project. minor tweaks --- Makefile | 4 +- mathgenerator/funcs/BinaryToDecimalFunc.py | 12 + mathgenerator/funcs/DecimalToBinaryFunc.py | 11 + mathgenerator/funcs/DiceSumProbFunc.py | 25 + mathgenerator/funcs/MidPointOfTwoPointFunc.py | 12 + mathgenerator/funcs/__init__.py | 61 ++ mathgenerator/funcs/additionFunc.py | 10 + mathgenerator/funcs/areaOfTriangleFunc.py | 14 + mathgenerator/funcs/basicAlgebraFunc.py | 25 + mathgenerator/funcs/basicTrigonometryFunc.py | 14 + mathgenerator/funcs/binaryComplement1sFunc.py | 15 + mathgenerator/funcs/combinationsFunc.py | 19 + mathgenerator/funcs/commonFactorsFunc.py | 24 + mathgenerator/funcs/compareFractionsFunc.py | 26 + mathgenerator/funcs/confidenceIntervalFunc.py | 30 + mathgenerator/funcs/cubeRootFunc.py | 10 + mathgenerator/funcs/dataSummaryFunc.py | 26 + mathgenerator/funcs/distanceTwoPointsFunc.py | 14 + mathgenerator/funcs/divideFractionsFunc.py | 32 + mathgenerator/funcs/divisionFunc.py | 11 + mathgenerator/funcs/divisionToIntFunc.py | 13 + mathgenerator/funcs/exponentiationFunc.py | 10 + mathgenerator/funcs/factorialFunc.py | 15 + mathgenerator/funcs/factoringFunc.py | 29 + mathgenerator/funcs/fibonacciSeriesFunc.py | 21 + .../funcs/fourthAngleOfQuadriFunc.py | 14 + mathgenerator/funcs/gcdFunc.py | 12 + .../funcs/intersectionOfTwoLinesFunc.py | 62 ++ mathgenerator/funcs/isTriangleValidFunc.py | 19 + mathgenerator/funcs/lcmFunc.py | 17 + mathgenerator/funcs/linearEquationsFunc.py | 25 + mathgenerator/funcs/logFunc.py | 12 + .../funcs/matrixMultiplicationFunc.py | 50 + mathgenerator/funcs/moduloFunc.py | 11 + mathgenerator/funcs/multiplicationFunc.py | 11 + mathgenerator/funcs/multiplyFractionsFunc.py | 32 + mathgenerator/funcs/multiplyIntToMatrix22.py | 13 + mathgenerator/funcs/permutationFunc.py | 10 + .../funcs/powerRuleDifferentiationFunc.py | 18 + .../funcs/powerRuleIntegrationFunc.py | 20 + mathgenerator/funcs/primeFactorsFunc.py | 22 + mathgenerator/funcs/pythagoreanTheoremFunc.py | 11 + mathgenerator/funcs/quadraticEquation.py | 12 + .../funcs/regularPolygonAngleFunc.py | 10 + mathgenerator/funcs/simpleInterestFunc.py | 12 + mathgenerator/funcs/squareFunc.py | 10 + mathgenerator/funcs/squareRootFunc.py | 10 + mathgenerator/funcs/subtractionFunc.py | 11 + .../funcs/sumOfAnglesOfPolygonFunc.py | 10 + mathgenerator/funcs/surdsComparisonFunc.py | 17 + mathgenerator/funcs/surfaceAreaCone.py | 13 + mathgenerator/funcs/surfaceAreaCube.py | 9 + mathgenerator/funcs/surfaceAreaCuboid.py | 12 + mathgenerator/funcs/surfaceAreaCylinder.py | 11 + mathgenerator/funcs/surfaceAreaSphere.py | 10 + mathgenerator/funcs/systemOfEquationsFunc.py | 45 + .../funcs/thirdAngleOfTriangleFunc.py | 11 + mathgenerator/funcs/vectorCrossFunc.py | 13 + mathgenerator/funcs/volumeCone.py | 11 + mathgenerator/funcs/volumeCube.py | 10 + mathgenerator/funcs/volumeCuboid.py | 12 + mathgenerator/funcs/volumeCylinder.py | 11 + mathgenerator/funcs/volumeSphereFunc.py | 10 + mathgenerator/mathgen.py | 908 +----------------- mathgenerator/separate_funcs.py | 25 + 65 files changed, 1145 insertions(+), 900 deletions(-) create mode 100644 mathgenerator/funcs/BinaryToDecimalFunc.py create mode 100644 mathgenerator/funcs/DecimalToBinaryFunc.py create mode 100644 mathgenerator/funcs/DiceSumProbFunc.py create mode 100644 mathgenerator/funcs/MidPointOfTwoPointFunc.py create mode 100644 mathgenerator/funcs/__init__.py create mode 100644 mathgenerator/funcs/additionFunc.py create mode 100644 mathgenerator/funcs/areaOfTriangleFunc.py create mode 100644 mathgenerator/funcs/basicAlgebraFunc.py create mode 100644 mathgenerator/funcs/basicTrigonometryFunc.py create mode 100644 mathgenerator/funcs/binaryComplement1sFunc.py create mode 100644 mathgenerator/funcs/combinationsFunc.py create mode 100644 mathgenerator/funcs/commonFactorsFunc.py create mode 100644 mathgenerator/funcs/compareFractionsFunc.py create mode 100644 mathgenerator/funcs/confidenceIntervalFunc.py create mode 100644 mathgenerator/funcs/cubeRootFunc.py create mode 100644 mathgenerator/funcs/dataSummaryFunc.py create mode 100644 mathgenerator/funcs/distanceTwoPointsFunc.py create mode 100644 mathgenerator/funcs/divideFractionsFunc.py create mode 100644 mathgenerator/funcs/divisionFunc.py create mode 100644 mathgenerator/funcs/divisionToIntFunc.py create mode 100644 mathgenerator/funcs/exponentiationFunc.py create mode 100644 mathgenerator/funcs/factorialFunc.py create mode 100644 mathgenerator/funcs/factoringFunc.py create mode 100644 mathgenerator/funcs/fibonacciSeriesFunc.py create mode 100644 mathgenerator/funcs/fourthAngleOfQuadriFunc.py create mode 100644 mathgenerator/funcs/gcdFunc.py create mode 100644 mathgenerator/funcs/intersectionOfTwoLinesFunc.py create mode 100644 mathgenerator/funcs/isTriangleValidFunc.py create mode 100644 mathgenerator/funcs/lcmFunc.py create mode 100644 mathgenerator/funcs/linearEquationsFunc.py create mode 100644 mathgenerator/funcs/logFunc.py create mode 100644 mathgenerator/funcs/matrixMultiplicationFunc.py create mode 100644 mathgenerator/funcs/moduloFunc.py create mode 100644 mathgenerator/funcs/multiplicationFunc.py create mode 100644 mathgenerator/funcs/multiplyFractionsFunc.py create mode 100644 mathgenerator/funcs/multiplyIntToMatrix22.py create mode 100644 mathgenerator/funcs/permutationFunc.py create mode 100644 mathgenerator/funcs/powerRuleDifferentiationFunc.py create mode 100644 mathgenerator/funcs/powerRuleIntegrationFunc.py create mode 100644 mathgenerator/funcs/primeFactorsFunc.py create mode 100644 mathgenerator/funcs/pythagoreanTheoremFunc.py create mode 100644 mathgenerator/funcs/quadraticEquation.py create mode 100644 mathgenerator/funcs/regularPolygonAngleFunc.py create mode 100644 mathgenerator/funcs/simpleInterestFunc.py create mode 100644 mathgenerator/funcs/squareFunc.py create mode 100644 mathgenerator/funcs/squareRootFunc.py create mode 100644 mathgenerator/funcs/subtractionFunc.py create mode 100644 mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py create mode 100644 mathgenerator/funcs/surdsComparisonFunc.py create mode 100644 mathgenerator/funcs/surfaceAreaCone.py create mode 100644 mathgenerator/funcs/surfaceAreaCube.py create mode 100644 mathgenerator/funcs/surfaceAreaCuboid.py create mode 100644 mathgenerator/funcs/surfaceAreaCylinder.py create mode 100644 mathgenerator/funcs/surfaceAreaSphere.py create mode 100644 mathgenerator/funcs/systemOfEquationsFunc.py create mode 100644 mathgenerator/funcs/thirdAngleOfTriangleFunc.py create mode 100644 mathgenerator/funcs/vectorCrossFunc.py create mode 100644 mathgenerator/funcs/volumeCone.py create mode 100644 mathgenerator/funcs/volumeCube.py create mode 100644 mathgenerator/funcs/volumeCuboid.py create mode 100644 mathgenerator/funcs/volumeCylinder.py create mode 100644 mathgenerator/funcs/volumeSphereFunc.py create mode 100644 mathgenerator/separate_funcs.py diff --git a/Makefile b/Makefile index bd04e35..ff3b0ac 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ FLAKE_FLAGS = --ignore=E501,F401,F403,F405 lint: - python -m flake8 $(FLAKE_FLAGS) + python3 -m flake8 $(FLAKE_FLAGS) test: - python -m pytest --verbose -s tests + python3 -m pytest --verbose -s tests diff --git a/mathgenerator/funcs/BinaryToDecimalFunc.py b/mathgenerator/funcs/BinaryToDecimalFunc.py new file mode 100644 index 0000000..27b165d --- /dev/null +++ b/mathgenerator/funcs/BinaryToDecimalFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def BinaryToDecimalFunc(max_dig=10): + problem = '' + + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = int(problem, 2) + return problem, solution diff --git a/mathgenerator/funcs/DecimalToBinaryFunc.py b/mathgenerator/funcs/DecimalToBinaryFunc.py new file mode 100644 index 0000000..8df2d8a --- /dev/null +++ b/mathgenerator/funcs/DecimalToBinaryFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def DecimalToBinaryFunc(max_dec=99): + a = random.randint(1, max_dec) + b = bin(a).replace("0b", "") + + problem = "Binary of " + str(a) + "=" + solution = str(b) + + return problem, solution diff --git a/mathgenerator/funcs/DiceSumProbFunc.py b/mathgenerator/funcs/DiceSumProbFunc.py new file mode 100644 index 0000000..2180ee4 --- /dev/null +++ b/mathgenerator/funcs/DiceSumProbFunc.py @@ -0,0 +1,25 @@ +from .__init__ import * + + +def DiceSumProbFunc(maxDice=3): + a = random.randint(1,maxDice) + b = random.randint(a,6*a) + + count=0 + for i in [1,2,3,4,5,6]: + if a==1: + if i==b: + count=count+1 + elif a==2: + for j in [1,2,3,4,5,6]: + if i+j==b: + count=count+1 + elif a==3: + for j in [1,2,3,4,5,6]: + for k in [1,2,3,4,5,6]: + if i+j+k==b: + count=count+1 + + problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) + solution="{}/{}".format(count, 6**a) + return problem, solution diff --git a/mathgenerator/funcs/MidPointOfTwoPointFunc.py b/mathgenerator/funcs/MidPointOfTwoPointFunc.py new file mode 100644 index 0000000..3c9202a --- /dev/null +++ b/mathgenerator/funcs/MidPointOfTwoPointFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def MidPointOfTwoPointFunc(maxValue=20): + x1 = random.randint(-20, maxValue) + y1 = random.randint(-20, maxValue) + x2 = random.randint(-20, maxValue) + y2 = random.randint(-20, maxValue) + + problem = f"({x1},{y1}),({x2},{y2})=" + solution = f"({(x1+x2)/2},{(y1+y2)/2})" + return problem, solution diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py new file mode 100644 index 0000000..fe24eb6 --- /dev/null +++ b/mathgenerator/funcs/__init__.py @@ -0,0 +1,61 @@ +from .additionFunc import * +from .subtractionFunc import * +from .multiplicationFunc import * +from .divisionFunc import * +from .binaryComplement1sFunc import * +from .moduloFunc import * +from .squareRootFunc import * +from .powerRuleDifferentiationFunc import * +from .squareFunc import * +from .gcdFunc import * +from .lcmFunc import * +from .basicAlgebraFunc import * +from .logFunc import * +from .divisionToIntFunc import * +from .DecimalToBinaryFunc import * +from .BinaryToDecimalFunc import * +from .divideFractionsFunc import * +from .multiplyIntToMatrix22 import * +from .areaOfTriangleFunc import * +from .isTriangleValidFunc import * +from .MidPointOfTwoPointFunc import * +from .factoringFunc import * +from .thirdAngleOfTriangleFunc import * +from .systemOfEquationsFunc import * +from .distanceTwoPointsFunc import * +from .pythagoreanTheoremFunc import * +from .linearEquationsFunc import * +from .primeFactorsFunc import * +from .multiplyFractionsFunc import * +from .regularPolygonAngleFunc import * +from .combinationsFunc import * +from .factorialFunc import * +from .surfaceAreaCube import * +from .volumeCube import * +from .surfaceAreaCuboid import * +from .volumeCuboid import * +from .surfaceAreaCylinder import * +from .volumeCylinder import * +from .surfaceAreaCone import * +from .volumeCone import * +from .commonFactorsFunc import * +from .intersectionOfTwoLinesFunc import * +from .permutationFunc import * +from .vectorCrossFunc import * +from .compareFractionsFunc import * +from .simpleInterestFunc import * +from .matrixMultiplicationFunc import * +from .cubeRootFunc import * +from .powerRuleIntegrationFunc import * +from .fourthAngleOfQuadriFunc import * +from .quadraticEquation import * +from .DiceSumProbFunc import * +from .exponentiationFunc import * +from .confidenceIntervalFunc import * +from .surdsComparisonFunc import * +from .fibonacciSeriesFunc import * +from .basicTrigonometryFunc import * +from .sumOfAnglesOfPolygonFunc import * +from .dataSummaryFunc import * +from .surfaceAreaSphere import * +from .volumeSphereFunc import * diff --git a/mathgenerator/funcs/additionFunc.py b/mathgenerator/funcs/additionFunc.py new file mode 100644 index 0000000..30dfefe --- /dev/null +++ b/mathgenerator/funcs/additionFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def additionFunc(maxSum=99, maxAddend=50): + a = random.randint(0, maxAddend) + b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + c = a + b + problem = str(a) + "+" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/areaOfTriangleFunc.py b/mathgenerator/funcs/areaOfTriangleFunc.py new file mode 100644 index 0000000..a5e1250 --- /dev/null +++ b/mathgenerator/funcs/areaOfTriangleFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/basicAlgebraFunc.py b/mathgenerator/funcs/basicAlgebraFunc.py new file mode 100644 index 0000000..939ac5e --- /dev/null +++ b/mathgenerator/funcs/basicAlgebraFunc.py @@ -0,0 +1,25 @@ +from .__init__ import * + + +def basicAlgebraFunc(maxVariable=10): + a = random.randint(1, maxVariable) + b = random.randint(1, maxVariable) + c = random.randint(b, maxVariable) + + # calculate gcd + def calculate_gcd(x, y): + while(y): + x, y = y, x % y + return x + + i = calculate_gcd((c - b), a) + x = f"{(c - b)//i}/{a//i}" + + if (c - b == 0): + x = "0" + elif a == 1 or a == i: + x = f"{c - b}" + + problem = f"{a}x + {b} = {c}" + solution = x + return problem, solution diff --git a/mathgenerator/funcs/basicTrigonometryFunc.py b/mathgenerator/funcs/basicTrigonometryFunc.py new file mode 100644 index 0000000..dd4fe5d --- /dev/null +++ b/mathgenerator/funcs/basicTrigonometryFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one + angle=random.choice(angles) + function=random.choice(functions) + + problem=f"What is {function}({angle})?" + + expression='math.'+function+'(math.radians(angle))' + result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} + + solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition + return problem,solution diff --git a/mathgenerator/funcs/binaryComplement1sFunc.py b/mathgenerator/funcs/binaryComplement1sFunc.py new file mode 100644 index 0000000..2568303 --- /dev/null +++ b/mathgenerator/funcs/binaryComplement1sFunc.py @@ -0,0 +1,15 @@ +from .__init__ import * + + +def binaryComplement1sFunc(maxDigits=10): + question = '' + answer = '' + + for i in range(random.randint(1, maxDigits)): + temp = str(random.randint(0, 1)) + question += temp + answer += "0" if temp == "1" else "1" + + problem = question+"=" + solution = answer + return problem, solution diff --git a/mathgenerator/funcs/combinationsFunc.py b/mathgenerator/funcs/combinationsFunc.py new file mode 100644 index 0000000..79390a6 --- /dev/null +++ b/mathgenerator/funcs/combinationsFunc.py @@ -0,0 +1,19 @@ +from .__init__ import * + + +def combinationsFunc(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 diff --git a/mathgenerator/funcs/commonFactorsFunc.py b/mathgenerator/funcs/commonFactorsFunc.py new file mode 100644 index 0000000..633abb3 --- /dev/null +++ b/mathgenerator/funcs/commonFactorsFunc.py @@ -0,0 +1,24 @@ +from .__init__ import * + + +def commonFactorsFunc(maxVal=100): + a = x = random.randint(1, maxVal) + b = y = random.randint(1, maxVal) + + 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 diff --git a/mathgenerator/funcs/compareFractionsFunc.py b/mathgenerator/funcs/compareFractionsFunc.py new file mode 100644 index 0000000..d0d08a4 --- /dev/null +++ b/mathgenerator/funcs/compareFractionsFunc.py @@ -0,0 +1,26 @@ +from .__init__ import * + + +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 < second): + solution = "<" + else: + solution = "=" + + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" + return problem, solution diff --git a/mathgenerator/funcs/confidenceIntervalFunc.py b/mathgenerator/funcs/confidenceIntervalFunc.py new file mode 100644 index 0000000..32bd26a --- /dev/null +++ b/mathgenerator/funcs/confidenceIntervalFunc.py @@ -0,0 +1,30 @@ +from .__init__ import * + + +def confidenceIntervalFunc(): + n=random.randint(20,40) + j=random.randint(0,3) + + lst=random.sample(range(200,300),n) + lst_per=[80 ,90, 95, 99] + lst_t = [1.282, 1.645, 1.960, 2.576] + + mean=0 + sd=0 + + for i in lst: + count= i + mean + mean=count + + mean = mean/n + + for i in lst: + x=(i-mean)**2+sd + sd=x + + sd=sd/n + standard_error = lst_t[j]*math.sqrt(sd/n) + + problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) + solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + return problem, solution diff --git a/mathgenerator/funcs/cubeRootFunc.py b/mathgenerator/funcs/cubeRootFunc.py new file mode 100644 index 0000000..c9de53c --- /dev/null +++ b/mathgenerator/funcs/cubeRootFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/dataSummaryFunc.py b/mathgenerator/funcs/dataSummaryFunc.py new file mode 100644 index 0000000..016737c --- /dev/null +++ b/mathgenerator/funcs/dataSummaryFunc.py @@ -0,0 +1,26 @@ +from .__init__ import * + + +def dataSummaryFunc(number_values=15,minval=5,maxval=50): + random_list=[] + + for i in range(number_values): + n=random.randint(minval,maxval) + random_list.append(n) + + a=sum(random_list) + mean=a/number_values + + var=0 + for i in range(number_values): + var+=(random_list[i]-mean)**2 + + # we're printing stuff here? + print(random_list) + print(mean) + print(var/number_values) + print((var/number_values)**0.5) + + problem="Find the mean,standard deviation and variance for the data"+str(random_list) + solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) + return problem,solution diff --git a/mathgenerator/funcs/distanceTwoPointsFunc.py b/mathgenerator/funcs/distanceTwoPointsFunc.py new file mode 100644 index 0000000..1f48f90 --- /dev/null +++ b/mathgenerator/funcs/distanceTwoPointsFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): + point1X = random.randint(minValXY, maxValXY + 1) + point1Y = random.randint(minValXY, maxValXY + 1) + point2X = random.randint(minValXY, maxValXY + 1) + point2Y = random.randint(minValXY, maxValXY + 1) + + distanceSq = (point1X - point2X) ** 2 + (point1Y - point2Y) ** 2 + + solution = f"sqrt({distanceSq})" + problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" + return problem, solution diff --git a/mathgenerator/funcs/divideFractionsFunc.py b/mathgenerator/funcs/divideFractionsFunc.py new file mode 100644 index 0000000..abfbec6 --- /dev/null +++ b/mathgenerator/funcs/divideFractionsFunc.py @@ -0,0 +1,32 @@ +from .__init__ import * + + +def divideFractionsFunc(maxVal=10): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + + while (a == b): + b = random.randint(1, maxVal) + + c = random.randint(1, maxVal) + d = random.randint(1, maxVal) + while (c == d): + d = random.randint(1, maxVal) + + def calculate_gcd(x, y): + while(y): + x, y = y, x % y + return x + + tmp_n = a * d + tmp_d = b * c + + 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}" + # for equal numerator and denominators + problem = f"({a}/{b})/({c}/{d})" + solution = x + return problem, solution diff --git a/mathgenerator/funcs/divisionFunc.py b/mathgenerator/funcs/divisionFunc.py new file mode 100644 index 0000000..60af33d --- /dev/null +++ b/mathgenerator/funcs/divisionFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def divisionFunc(maxRes=99, maxDivid=99): + a = random.randint(0, maxDivid) + b = random.randint(0, min(maxRes, maxDivid)) + c = a / b + + problem = str(a) + "/" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/divisionToIntFunc.py b/mathgenerator/funcs/divisionToIntFunc.py new file mode 100644 index 0000000..d5f3cfd --- /dev/null +++ b/mathgenerator/funcs/divisionToIntFunc.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +def divisionToIntFunc(maxA=25, maxB=25): + a = random.randint(1, maxA) + b = random.randint(1, maxB) + + divisor = a * b + dividend = random.choice([a, b]) + + problem = f"{divisor}/{dividend} = " + solution = int(divisor / dividend) + return problem, solution diff --git a/mathgenerator/funcs/exponentiationFunc.py b/mathgenerator/funcs/exponentiationFunc.py new file mode 100644 index 0000000..4ff1ba1 --- /dev/null +++ b/mathgenerator/funcs/exponentiationFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def exponentiationFunc(maxBase = 20,maxExpo = 10): + base = random.randint(1, maxBase) + expo = random.randint(1, maxExpo) + + problem = f"{base}^{expo} =" + solution = str(base ** expo) + return problem, solution diff --git a/mathgenerator/funcs/factorialFunc.py b/mathgenerator/funcs/factorialFunc.py new file mode 100644 index 0000000..ac4536c --- /dev/null +++ b/mathgenerator/funcs/factorialFunc.py @@ -0,0 +1,15 @@ +from .__init__ import * + + +def factorialFunc(maxInput=6): + a = random.randint(0, maxInput) + n = a + + problem = str(a) + "! = " + b = 1 + + while a != 1 and n > 0: + b *= n + n -= 1 + solution = str(b) + return problem, solution diff --git a/mathgenerator/funcs/factoringFunc.py b/mathgenerator/funcs/factoringFunc.py new file mode 100644 index 0000000..c52482f --- /dev/null +++ b/mathgenerator/funcs/factoringFunc.py @@ -0,0 +1,29 @@ +from .__init__ import * + + +def factoringFunc(range_x1=10, range_x2=10): + x1 = random.randint(-range_x1, range_x1) + x2 = random.randint(-range_x2, range_x2) + + def intParser(z): + if (z == 0): + return "" + if (z > 0): + return "+" + str(z) + if (z < 0): + return "-" + str(abs(z)) + + b = intParser(x1 + x2) + c = intParser(x1 * x2) + + if b == "+1": + b = "+" + if b == "": + problem = f"x^2{c}" + else: + problem = f"x^2{b}x{c}" + + x1 = intParser(x1) + x2 = intParser(x2) + solution = f"(x{x1})(x{x2})" + return problem, solution \ No newline at end of file diff --git a/mathgenerator/funcs/fibonacciSeriesFunc.py b/mathgenerator/funcs/fibonacciSeriesFunc.py new file mode 100644 index 0000000..42de00d --- /dev/null +++ b/mathgenerator/funcs/fibonacciSeriesFunc.py @@ -0,0 +1,21 @@ +from .__init__ import * + + +def fibonacciSeriesFunc(minNo=1): + n = random.randint(minNo,20) + + def createFibList(n): + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l + + fibList=createFibList(n) + + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + solution = fibList + return problem,solution diff --git a/mathgenerator/funcs/fourthAngleOfQuadriFunc.py b/mathgenerator/funcs/fourthAngleOfQuadriFunc.py new file mode 100644 index 0000000..d183e17 --- /dev/null +++ b/mathgenerator/funcs/fourthAngleOfQuadriFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/gcdFunc.py b/mathgenerator/funcs/gcdFunc.py new file mode 100644 index 0000000..505c7fb --- /dev/null +++ b/mathgenerator/funcs/gcdFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def gcdFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + while y: + x, y = y, x % y + problem = f"GCD of {a} and {b} = " + solution = str(x) + return problem, solution diff --git a/mathgenerator/funcs/intersectionOfTwoLinesFunc.py b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py new file mode 100644 index 0000000..96f681d --- /dev/null +++ b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py @@ -0,0 +1,62 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/isTriangleValidFunc.py b/mathgenerator/funcs/isTriangleValidFunc.py new file mode 100644 index 0000000..a80a05d --- /dev/null +++ b/mathgenerator/funcs/isTriangleValidFunc.py @@ -0,0 +1,19 @@ +from .__init__ import * + + +def isTriangleValidFunc(maxSideLength=50): + sideA = random.randint(1, maxSideLength) + sideB = random.randint(1, maxSideLength) + sideC = random.randint(1, maxSideLength) + + sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] + sides = [sideC, sideA, sideB] + + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" + + if exists: + solution = "Yes" + return problem, solution + solution = "No" + return problem, solution diff --git a/mathgenerator/funcs/lcmFunc.py b/mathgenerator/funcs/lcmFunc.py new file mode 100644 index 0000000..af2ee41 --- /dev/null +++ b/mathgenerator/funcs/lcmFunc.py @@ -0,0 +1,17 @@ +from .__init__ import * + + +def lcmFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + c = a * b + x, y = a, b + + while y: + x, y = y, x % y + d = c // x + + problem = f"LCM of {a} and {b} =" + solution = str(d) + + return problem, solution diff --git a/mathgenerator/funcs/linearEquationsFunc.py b/mathgenerator/funcs/linearEquationsFunc.py new file mode 100644 index 0000000..4aa1fba --- /dev/null +++ b/mathgenerator/funcs/linearEquationsFunc.py @@ -0,0 +1,25 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/logFunc.py b/mathgenerator/funcs/logFunc.py new file mode 100644 index 0000000..8d16214 --- /dev/null +++ b/mathgenerator/funcs/logFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def logFunc(maxBase=3, maxVal=8): + a = random.randint(1, maxVal) + b = random.randint(2, maxBase) + c = pow(b, a) + + problem = "log" + str(b) + "(" + str(c) + ")" + solution = str(a) + + return problem, solution diff --git a/mathgenerator/funcs/matrixMultiplicationFunc.py b/mathgenerator/funcs/matrixMultiplicationFunc.py new file mode 100644 index 0000000..de69218 --- /dev/null +++ b/mathgenerator/funcs/matrixMultiplicationFunc.py @@ -0,0 +1,50 @@ +from .__init__ import * + + +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}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + solution = matrixMultiplicationFuncHelper(res) + return problem, solution + +def matrixMultiplicationFuncHelper(inp): + m = len(inp) + n = len(inp[0]) + + string = "" + for i in range(m): + for j in range(n): + string += f"{inp[i][j]: 6d}" + string += " " + string += "\n" + + return string \ No newline at end of file diff --git a/mathgenerator/funcs/moduloFunc.py b/mathgenerator/funcs/moduloFunc.py new file mode 100644 index 0000000..5f8d2af --- /dev/null +++ b/mathgenerator/funcs/moduloFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def moduloFunc(maxRes=99, maxModulo=99): + a = random.randint(0, maxModulo) + b = random.randint(0, min(maxRes, maxModulo)) + c = a % b + + problem = str(a) + "%" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/multiplicationFunc.py b/mathgenerator/funcs/multiplicationFunc.py new file mode 100644 index 0000000..00ebb26 --- /dev/null +++ b/mathgenerator/funcs/multiplicationFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def multiplicationFunc(maxRes=99, maxMulti=99): + a = random.randint(0, maxMulti) + b = random.randint(0, min(int(maxMulti / a), maxRes)) + c = a * b + + problem = str(a) + "*" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/multiplyFractionsFunc.py b/mathgenerator/funcs/multiplyFractionsFunc.py new file mode 100644 index 0000000..14614d6 --- /dev/null +++ b/mathgenerator/funcs/multiplyFractionsFunc.py @@ -0,0 +1,32 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/multiplyIntToMatrix22.py b/mathgenerator/funcs/multiplyIntToMatrix22.py new file mode 100644 index 0000000..120c202 --- /dev/null +++ b/mathgenerator/funcs/multiplyIntToMatrix22.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/permutationFunc.py b/mathgenerator/funcs/permutationFunc.py new file mode 100644 index 0000000..ffae44e --- /dev/null +++ b/mathgenerator/funcs/permutationFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/powerRuleDifferentiationFunc.py b/mathgenerator/funcs/powerRuleDifferentiationFunc.py new file mode 100644 index 0000000..9dac2db --- /dev/null +++ b/mathgenerator/funcs/powerRuleDifferentiationFunc.py @@ -0,0 +1,18 @@ +from .__init__ import * + + +def powerRuleDifferentiationFunc(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 * exponent) + "x^" + str(exponent - 1) + return problem, solution diff --git a/mathgenerator/funcs/powerRuleIntegrationFunc.py b/mathgenerator/funcs/powerRuleIntegrationFunc.py new file mode 100644 index 0000000..112f5b5 --- /dev/null +++ b/mathgenerator/funcs/powerRuleIntegrationFunc.py @@ -0,0 +1,20 @@ +from .__init__ import * + + +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 += " + c" + return problem, solution diff --git a/mathgenerator/funcs/primeFactorsFunc.py b/mathgenerator/funcs/primeFactorsFunc.py new file mode 100644 index 0000000..5e645d2 --- /dev/null +++ b/mathgenerator/funcs/primeFactorsFunc.py @@ -0,0 +1,22 @@ +from .__init__ import * + + +def primeFactorsFunc(minVal=1, maxVal=200): + a = random.randint(minVal, maxVal) + n = a + i = 2 + factors = [] + + while i * i <= n: + if n % i: + i += 1 + else: + n //= i + factors.append(i) + + if n > 1: + factors.append(n) + + problem = f"Find prime factors of {a}" + solution = f"{factors}" + return problem, solution diff --git a/mathgenerator/funcs/pythagoreanTheoremFunc.py b/mathgenerator/funcs/pythagoreanTheoremFunc.py new file mode 100644 index 0000000..2776592 --- /dev/null +++ b/mathgenerator/funcs/pythagoreanTheoremFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/quadraticEquation.py b/mathgenerator/funcs/quadraticEquation.py new file mode 100644 index 0000000..98f895e --- /dev/null +++ b/mathgenerator/funcs/quadraticEquation.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def quadraticEquation(maxVal=100): + a = random.randint(1, maxVal) + c = random.randint(1, maxVal) + b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) + + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) + D = math.sqrt(b * b - 4 * a * c) + solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + return problem, solution diff --git a/mathgenerator/funcs/regularPolygonAngleFunc.py b/mathgenerator/funcs/regularPolygonAngleFunc.py new file mode 100644 index 0000000..569d2d5 --- /dev/null +++ b/mathgenerator/funcs/regularPolygonAngleFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def regularPolygonAngleFunc(minVal=3, maxVal=20): + sideNum = random.randint(minVal, maxVal) + problem = f"Find the angle of a regular polygon with {sideNum} sides" + + exteriorAngle = round((360 / sideNum), 2) + solution = 180 - exteriorAngle + return problem, solution diff --git a/mathgenerator/funcs/simpleInterestFunc.py b/mathgenerator/funcs/simpleInterestFunc.py new file mode 100644 index 0000000..de997d0 --- /dev/null +++ b/mathgenerator/funcs/simpleInterestFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/squareFunc.py b/mathgenerator/funcs/squareFunc.py new file mode 100644 index 0000000..6384197 --- /dev/null +++ b/mathgenerator/funcs/squareFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def squareFunc(maxSquareNum=20): + a = random.randint(1, maxSquareNum) + b = a * a + + problem = str(a) + "^2" + "=" + solution = str(b) + return problem, solution diff --git a/mathgenerator/funcs/squareRootFunc.py b/mathgenerator/funcs/squareRootFunc.py new file mode 100644 index 0000000..87152c8 --- /dev/null +++ b/mathgenerator/funcs/squareRootFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def squareRootFunc(minNo=1, maxNo=12): + b = random.randint(minNo, maxNo) + a = b * b + + problem = "sqrt(" + str(a) + ")=" + solution = str(b) + return problem, solution diff --git a/mathgenerator/funcs/subtractionFunc.py b/mathgenerator/funcs/subtractionFunc.py new file mode 100644 index 0000000..91c8e74 --- /dev/null +++ b/mathgenerator/funcs/subtractionFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def subtractionFunc(maxMinuend=99, maxDiff=99): + a = random.randint(0, maxMinuend) + b = random.randint(max(0, (a - maxDiff)), a) + c = a - b + + problem = str(a) + "-" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py b/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py new file mode 100644 index 0000000..6181e96 --- /dev/null +++ b/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def sumOfAnglesOfPolygonFunc(maxSides = 12): + side = random.randint(3, maxSides) + sum = (side - 2) * 180 + + problem = f"Sum of angles of polygon with {side} sides = " + solution = sum + return problem, solution diff --git a/mathgenerator/funcs/surdsComparisonFunc.py b/mathgenerator/funcs/surdsComparisonFunc.py new file mode 100644 index 0000000..161aac3 --- /dev/null +++ b/mathgenerator/funcs/surdsComparisonFunc.py @@ -0,0 +1,17 @@ +from .__init__ import * + + +def surdsComparisonFunc(maxValue = 100, maxRoot = 10): + radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) + degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) + + problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" + first = math.pow(radicand1, 1/degree1) + second = math.pow(radicand2, 1/degree2) + + solution = "=" + if first > second: + solution = ">" + elif first < second: + solution = "<" + return problem, solution diff --git a/mathgenerator/funcs/surfaceAreaCone.py b/mathgenerator/funcs/surfaceAreaCone.py new file mode 100644 index 0000000..8132e7d --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCone.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaCube.py b/mathgenerator/funcs/surfaceAreaCube.py new file mode 100644 index 0000000..9f9d07f --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCube.py @@ -0,0 +1,9 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaCuboid.py b/mathgenerator/funcs/surfaceAreaCuboid.py new file mode 100644 index 0000000..3630abc --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCuboid.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaCylinder.py b/mathgenerator/funcs/surfaceAreaCylinder.py new file mode 100644 index 0000000..92035ba --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCylinder.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaSphere.py b/mathgenerator/funcs/surfaceAreaSphere.py new file mode 100644 index 0000000..84ce3e1 --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaSphere.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def surfaceAreaSphere(maxSide = 20, unit = 'm'): + r = random.randint(1, maxSide) + + problem = f"Surface area of Sphere with radius = {r}{unit} is" + ans = 4 * math.pi * r * r + solution = f"{ans} {unit}^2" + return problem, solution diff --git a/mathgenerator/funcs/systemOfEquationsFunc.py b/mathgenerator/funcs/systemOfEquationsFunc.py new file mode 100644 index 0000000..fd28eaf --- /dev/null +++ b/mathgenerator/funcs/systemOfEquationsFunc.py @@ -0,0 +1,45 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/thirdAngleOfTriangleFunc.py b/mathgenerator/funcs/thirdAngleOfTriangleFunc.py new file mode 100644 index 0000000..688b209 --- /dev/null +++ b/mathgenerator/funcs/thirdAngleOfTriangleFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def thirdAngleOfTriangleFunc(maxAngle=89): + angle1 = random.randint(1, maxAngle) + angle2 = random.randint(1, maxAngle) + angle3 = 180 - (angle1 + angle2) + + problem = f"Third angle of triangle with angles {angle1} and {angle2} = " + solution = angle3 + return problem, solution diff --git a/mathgenerator/funcs/vectorCrossFunc.py b/mathgenerator/funcs/vectorCrossFunc.py new file mode 100644 index 0000000..07ff0b2 --- /dev/null +++ b/mathgenerator/funcs/vectorCrossFunc.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +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]] + + problem = str(a) + " X " + str(b) + " = " + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/volumeCone.py b/mathgenerator/funcs/volumeCone.py new file mode 100644 index 0000000..4cd5512 --- /dev/null +++ b/mathgenerator/funcs/volumeCone.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeCube.py b/mathgenerator/funcs/volumeCube.py new file mode 100644 index 0000000..e487173 --- /dev/null +++ b/mathgenerator/funcs/volumeCube.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeCuboid.py b/mathgenerator/funcs/volumeCuboid.py new file mode 100644 index 0000000..a435784 --- /dev/null +++ b/mathgenerator/funcs/volumeCuboid.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeCylinder.py b/mathgenerator/funcs/volumeCylinder.py new file mode 100644 index 0000000..ecd78da --- /dev/null +++ b/mathgenerator/funcs/volumeCylinder.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeSphereFunc.py b/mathgenerator/funcs/volumeSphereFunc.py new file mode 100644 index 0000000..618dbd3 --- /dev/null +++ b/mathgenerator/funcs/volumeSphereFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def volumeSphereFunc(maxRadius = 100): + r=random.randint(1,maxRadius) + + problem=f"Volume of sphere with radius {r} m = " + ans=(4*math.pi/3)*r*r*r + solution = f"{ans} m^3" + return problem,solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..59c19d4 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,6 +1,7 @@ import random import math import fractions +from .funcs import * genList = [] @@ -27,901 +28,13 @@ def genById(id): generator = genList[id][2] return(generator()) - +# def getGenList(): return(genList) # || Generator Functions - -def additionFunc(maxSum=99, maxAddend=50): - a = random.randint(0, maxAddend) - b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well - c = a + b - problem = str(a) + "+" + str(b) + "=" - solution = str(c) - return problem, solution - - -def subtractionFunc(maxMinuend=99, maxDiff=99): - a = random.randint(0, maxMinuend) - b = random.randint(max(0, (a - maxDiff)), a) - c = a - b - problem = str(a) + "-" + str(b) + "=" - solution = str(c) - return problem, solution - - -def multiplicationFunc(maxRes=99, maxMulti=99): - a = random.randint(0, maxMulti) - b = random.randint(0, min(int(maxMulti / a), maxRes)) - c = a * b - problem = str(a) + "*" + str(b) + "=" - solution = str(c) - return problem, solution - - -def divisionFunc(maxRes=99, maxDivid=99): - a = random.randint(0, maxDivid) - b = random.randint(0, min(maxRes, maxDivid)) - c = a / b - problem = str(a) + "/" + str(b) + "=" - solution = str(c) - return problem, solution - - -def binaryComplement1sFunc(maxDigits=10): - question = '' - answer = '' - for i in range(random.randint(1, maxDigits)): - temp = str(random.randint(0, 1)) - question += temp - answer += "0" if temp == "1" else "1" - - problem = question+"=" - solution = answer - return problem, solution - - -def moduloFunc(maxRes=99, maxModulo=99): - a = random.randint(0, maxModulo) - b = random.randint(0, min(maxRes, maxModulo)) - c = a % b - problem = str(a) + "%" + str(b) + "=" - solution = str(c) - return problem, solution - - -def squareRootFunc(minNo=1, maxNo=12): - b = random.randint(minNo, maxNo) - a = b * b - problem = "sqrt(" + str(a) + ")=" - solution = str(b) - return problem, solution - - -def powerRuleDifferentiationFunc(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 * exponent) + "x^" + str(exponent - 1) - return problem, solution - - -def squareFunc(maxSquareNum=20): - a = random.randint(1, maxSquareNum) - b = a * a - problem = str(a) + "^2" + "=" - solution = str(b) - return problem, solution - - -def gcdFunc(maxVal=20): - a = random.randint(1, maxVal) - b = random.randint(1, maxVal) - x, y = a, b - while(y): - x, y = y, x % y - problem = f"GCD of {a} and {b} = " - solution = str(x) - return problem, solution - - -def lcmFunc(maxVal=20): - a = random.randint(1, maxVal) - b = random.randint(1, maxVal) - x, y = a, b - c = a * b - while(y): - x, y = y, x % y - d = c // x - problem = f"LCM of {a} and {b} =" - solution = str(d) - return problem, solution - - -def basicAlgebraFunc(maxVariable=10): - a = random.randint(1, maxVariable) - b = random.randint(1, maxVariable) - c = random.randint(b, maxVariable) - # calculate gcd - - def calculate_gcd(x, y): - while(y): - x, y = y, x % y - return x - i = calculate_gcd((c - b), a) - x = f"{(c - b)//i}/{a//i}" - if (c - b == 0): - x = "0" - elif a == 1 or a == i: - x = f"{c - b}" - problem = f"{a}x + {b} = {c}" - solution = x - return problem, solution - - -def logFunc(maxBase=3, maxVal=8): - a = random.randint(1, maxVal) - b = random.randint(2, maxBase) - c = pow(b, a) - problem = "log" + str(b) + "(" + str(c) + ")" - solution = str(a) - return problem, solution - - -def divisionToIntFunc(maxA=25, maxB=25): - a = random.randint(1, maxA) - b = random.randint(1, maxB) - divisor = a * b - dividend = random.choice([a, b]) - problem = f"{divisor}/{dividend} = " - solution = int(divisor / dividend) - return problem, solution - - -def DecimalToBinaryFunc(max_dec=99): - a = random.randint(1, max_dec) - b = bin(a).replace("0b", "") - problem = "Binary of " + str(a) + "=" - solution = str(b) - return problem, solution - - -def BinaryToDecimalFunc(max_dig=10): - problem = '' - for i in range(random.randint(1, max_dig)): - temp = str(random.randint(0, 1)) - problem += temp - - solution = int(problem, 2) - return problem, solution - - -def divideFractionsFunc(maxVal=10): - a = random.randint(1, maxVal) - b = random.randint(1, maxVal) - while (a == b): - b = random.randint(1, maxVal) - c = random.randint(1, maxVal) - d = random.randint(1, maxVal) - while (c == d): - d = random.randint(1, maxVal) - - def calculate_gcd(x, y): - while(y): - x, y = y, x % y - return x - tmp_n = a * d - tmp_d = b * c - 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}" - # for equal numerator and denominators - problem = f"({a}/{b})/({c}/{d})" - 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 - - -def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): - a = random.randint(1, maxA) - b = random.randint(1, maxB) - c = random.randint(1, maxC) - s = (a + b + c) / 2 - area = (s * (s - a) * (s - b) * (s - c)) ** 0.5 - problem = "Area of triangle with side lengths: " + str(a) + " " + str(b) + " " + str(c) + " = " - solution = area - return problem, solution - - -def isTriangleValidFunc(maxSideLength=50): - sideA = random.randint(1, maxSideLength) - sideB = random.randint(1, maxSideLength) - sideC = random.randint(1, maxSideLength) - sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] - sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) - problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" - if exists: - solution = "Yes" - return problem, solution - solution = "No" - return problem, solution - - -def MidPointOfTwoPointFunc(maxValue=20): - x1 = random.randint(-20, maxValue) - y1 = random.randint(-20, maxValue) - x2 = random.randint(-20, maxValue) - y2 = random.randint(-20, maxValue) - problem = f"({x1},{y1}),({x2},{y2})=" - solution = f"({(x1+x2)/2},{(y1+y2)/2})" - return problem, solution - - -def factoringFunc(range_x1=10, range_x2=10): - x1 = random.randint(-range_x1, range_x1) - x2 = random.randint(-range_x2, range_x2) - - def intParser(z): - if (z == 0): - return "" - if (z > 0): - return "+" + str(z) - if (z < 0): - return "-" + str(abs(z)) - - b = intParser(x1 + x2) - c = intParser(x1 * x2) - - if (b == "+1"): - b = "+" - - if (b == ""): - problem = f"x^2{c}" - else: - problem = f"x^2{b}x{c}" - - x1 = intParser(x1) - x2 = intParser(x2) - solution = f"(x{x1})(x{x2})" - return problem, solution - - -def thirdAngleOfTriangleFunc(maxAngle=89): - angle1 = random.randint(1, maxAngle) - angle2 = random.randint(1, maxAngle) - angle3 = 180 - (angle1 + angle2) - problem = f"Third angle of triangle with angles {angle1} and {angle2} = " - solution = angle3 - return problem, solution - - -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 - - -def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): - point1X = random.randint(minValXY, maxValXY + 1) - point1Y = random.randint(minValXY, maxValXY + 1) - point2X = random.randint(minValXY, maxValXY + 1) - point2Y = random.randint(minValXY, maxValXY + 1) - distanceSq = (point1X - point2X) ** 2 + (point1Y - point2Y) ** 2 - solution = f"sqrt({distanceSq})" - problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" - return problem, solution - - -def pythagoreanTheoremFunc(maxLength=20): - 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 - - -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 - - -def primeFactorsFunc(minVal=1, maxVal=200): - a = random.randint(minVal, maxVal) - n = a - i = 2 - factors = [] - while i * i <= n: - if n % i: - i += 1 - else: - n //= i - factors.append(i) - if n > 1: - factors.append(n) - problem = f"Find prime factors of {a}" - 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 - - -def regularPolygonAngleFunc(minVal=3, maxVal=20): - sideNum = random.randint(minVal, maxVal) - problem = f"Find the angle of a regular polygon with {sideNum} sides" - exteriorAngle = round((360 / sideNum), 2) - solution = 180 - exteriorAngle - return problem, solution - - -def combinationsFunc(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 - - -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 - - -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 - - -def commonFactorsFunc(maxVal=100): - a = random.randint(1, maxVal) - b = random.randint(1, maxVal) - x, y = 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 - - -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 - - -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 - - -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) - - -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 < second): - solution = "<" - else: - solution = "=" - - problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" - return problem, solution - - -def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): - a = random.randint(1000, maxPrinciple) - b = random.randint(1, maxRate) - c = random.randint(1, maxTime) - d = (a * b * c) / 100 - problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " - solution = round(d, 2) - return problem, solution - - -def 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}" # consider using a, b instead of a_string, b_string if the problem doesn't look right - solution = matrixMultiplicationFuncHelper(res) - return problem, solution - - -def matrixMultiplicationFuncHelper(inp): - m = len(inp) - n = len(inp[0]) - string = "" - for i in range(m): - for j in range(n): - string += f"{inp[i][j]: 6d}" - string += " " - string += "\n" - return string - - -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 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 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 quadraticEquation(maxVal=100): - a = random.randint(1, maxVal) - c = random.randint(1, maxVal) - b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) - - problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) - - D = math.sqrt(b * b - 4 * a * c) - - solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) - return problem, solution - -def hcfFunc(maxVal=20): - a = random.randint(1, maxVal) - b = random.randint(1, maxVal) - x, y = a, b - while(y): - x, y = y, x % y - problem = f"HCF of {a} and {b} = " - solution = str(x) - return problem, solution - -def DiceSumProbFunc(maxDice=3): - a = random.randint(1,maxDice) - b = random.randint(a,6*a) - count=0 - for i in [1,2,3,4,5,6]: - if a==1: - if i==b: - count=count+1 - elif a==2: - for j in [1,2,3,4,5,6]: - if i+j==b: - count=count+1 - elif a==3: - for j in [1,2,3,4,5,6]: - for k in [1,2,3,4,5,6]: - if i+j+k==b: - count=count+1 - problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) - solution="{}/{}".format(count, 6**a) - return problem, solution - -def exponentiationFunc(maxBase = 20,maxExpo = 10): - base = random.randint(1, maxBase) - expo = random.randint(1, maxExpo) - problem = f"{base}^{expo} =" - solution = str(base ** expo) - return problem, solution - -def confidenceIntervalFunc(): - n=random.randint(20,40) - j=random.randint(0,3) - lst=random.sample(range(200,300),n) - lst_per=[80 ,90, 95, 99] - lst_t = [1.282, 1.645, 1.960, 2.576] - mean=0 - sd=0 - for i in lst: - count= i + mean - mean=count - mean = mean/n - for i in lst: - x=(i-mean)**2+sd - sd=x - sd=sd/n - standard_error = lst_t[j]*math.sqrt(sd/n) - problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) - solution= '({}, {})'.format(mean+standard_error, mean-standard_error) - return problem, solution - -def surdsComparisonFunc(maxValue = 100, maxRoot = 10): - radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) - degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) - problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" - first = math.pow(radicand1, 1/degree1) - second = math.pow(radicand2, 1/degree2) - solution = "=" - if first > second: - solution = ">" - elif first < second: - solution = "<" - return problem, solution - -def fibonacciSeriesFunc(minNo=1): - n = random.randint(minNo,20) - def createFibList(n): - l=[] - for i in range(n): - if i<2: - l.append(i) - else: - val = l[i-1]+l[i-2] - l.append(val) - return l - fibList=createFibList(n) - problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" - solution = fibList - return problem,solution - -def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one - angle=random.choice(angles) - function=random.choice(functions) - - problem=f"What is {function}({angle})?" - expression='math.'+function+'(math.radians(angle))' - result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} - - solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition - - return problem,solution - -def sumOfAnglesOfPolygonFunc(maxSides = 12): - side = random.randint(3, maxSides) - sum = (side - 2) * 180 - problem = f"Sum of angles of polygon with {side} sides = " - solution = sum - return problem, solution - -def dataSummaryFunc(number_values=15,minval=5,maxval=50): - random_list=[] - for i in range(number_values): - n=random.randint(minval,maxval) - random_list.append(n) - a=sum(random_list) - mean=a/number_values - var=0 - for i in range(number_values): - var+=(random_list[i]-mean)**2 - print(random_list) - print(mean) - print(var/number_values) - print((var/number_values)**0.5) - problem="Find the mean,standard deviation and variance for the data"+str(random_list) - solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) - return problem,solution - -def surfaceAreaSphere(maxSide = 20, unit = 'm'): - r = random.randint(1, maxSide) - - problem = f"Surface area of Sphere with radius = {r}{unit} is" - ans = 4 * math.pi * r * r - solution = f"{ans} {unit}^2" - return problem, solution -def volumeSphereFunc(maxRadius = 100): - r=random.randint(1,maxRadius) - problem=f"Volume of sphere with radius {r} m = " - ans=(4*math.pi/3)*r*r*r - solution = f"{ans} m^3" - return problem,solution # || Class Instances - # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) addition = Generator("Addition", 0, "a+b=", "c", additionFunc) @@ -975,14 +88,13 @@ CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) -hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", hcfFunc) -diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 52,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) -exponentiation = Generator("Exponentiation", 53,"a^b = ","c",exponentiationFunc) -confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) -surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series",56,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) -basicTrigonometry=Generator("Trigonometric Values",57,"What is sin(X)?","ans",basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) -dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) +diceSumProbability=Generator("Probability of a certain sum appearing on faces of dice", 51,"If n dices are rolled then probabilty of getting sum of x is =","z", DiceSumProbFunc) +exponentiation = Generator("Exponentiation", 52,"a^b = ","c",exponentiationFunc) +confidenceInterval = Generator("Confidence interval For sample S", 53, "With X% confidence", "is (A,B)", confidenceIntervalFunc) +surdsComparison = Generator("Comparing surds", 54, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) +fibonacciSeries = Generator("Fibonacci Series",55,"fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a",fibonacciSeriesFunc) +basicTrigonometry=Generator("Trigonometric Values",56,"What is sin(X)?","ans",basicTrigonometryFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 57, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +dataSummary = Generator("Mean,Standard Deviation,Variance", 58, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) diff --git a/mathgenerator/separate_funcs.py b/mathgenerator/separate_funcs.py new file mode 100644 index 0000000..0cdcb9c --- /dev/null +++ b/mathgenerator/separate_funcs.py @@ -0,0 +1,25 @@ +import os + +file = "" +with open("mathgen.py", 'r') as f: + file = f.read() + +file = file.split("\n\n")[8:] + +i=0 + +imports_string = "" +for listing in file: + listing = listing[1:] + if listing[:3] == "def": + name = listing[4:listing.find("(")] + imports_string+="import funcs."+name+"\n" + with open("funcs/"+name+".py", 'w') as f: + f.write("from funcs.imports import *\n\n\n"+listing+"\n") + print("Saved!", i, "-", name) + i+=1 + +with open("funcs/imports.py", 'w') as imports_file: + imports_file.write(imports_string+"\n") + +# print(file) \ No newline at end of file From 27effe52e30634e342478d6784018e1dde1a194a Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sun, 18 Oct 2020 19:05:59 +0400 Subject: [PATCH 054/116] changed makefile back] --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ff3b0ac..bd04e35 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ FLAKE_FLAGS = --ignore=E501,F401,F403,F405 lint: - python3 -m flake8 $(FLAKE_FLAGS) + python -m flake8 $(FLAKE_FLAGS) test: - python3 -m pytest --verbose -s tests + python -m pytest --verbose -s tests From 0b9932a3a6bafe44f2bb9a95de844c4bf90f36e2 Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Sun, 18 Oct 2020 19:11:25 +0400 Subject: [PATCH 055/116] fixed imports and removed my automation script --- mathgenerator/funcs/__init__.py | 4 ++++ mathgenerator/separate_funcs.py | 25 ------------------------- 2 files changed, 4 insertions(+), 25 deletions(-) delete mode 100644 mathgenerator/separate_funcs.py diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index fe24eb6..73bd406 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -1,3 +1,7 @@ +import random +import math +import fractions + from .additionFunc import * from .subtractionFunc import * from .multiplicationFunc import * diff --git a/mathgenerator/separate_funcs.py b/mathgenerator/separate_funcs.py deleted file mode 100644 index 0cdcb9c..0000000 --- a/mathgenerator/separate_funcs.py +++ /dev/null @@ -1,25 +0,0 @@ -import os - -file = "" -with open("mathgen.py", 'r') as f: - file = f.read() - -file = file.split("\n\n")[8:] - -i=0 - -imports_string = "" -for listing in file: - listing = listing[1:] - if listing[:3] == "def": - name = listing[4:listing.find("(")] - imports_string+="import funcs."+name+"\n" - with open("funcs/"+name+".py", 'w') as f: - f.write("from funcs.imports import *\n\n\n"+listing+"\n") - print("Saved!", i, "-", name) - i+=1 - -with open("funcs/imports.py", 'w') as imports_file: - imports_file.write(imports_string+"\n") - -# print(file) \ No newline at end of file From 5d787161f1a87f47b89de88a8763c41bd84b8604 Mon Sep 17 00:00:00 2001 From: "sakshi.kst" <sakshi.kst@gmail.com> Date: Sun, 18 Oct 2020 22:01:42 +0530 Subject: [PATCH 056/116] Profit/ Loss Percentage calculator function added --- mathgenerator/mathgen.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..4c8fa6d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -914,12 +914,27 @@ def surfaceAreaSphere(maxSide = 20, unit = 'm'): ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" return problem, solution + def volumeSphereFunc(maxRadius = 100): r=random.randint(1,maxRadius) problem=f"Volume of sphere with radius {r} m = " ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + +def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): + cP = random.randint(1, maxCP) + sP = random.randint(1, maxSP) + diff = abs(sP-cP) + if (sP-cP >= 0): + profitOrLoss = "Profit" + else: + profitOrLoss = "Loss" + percent = diff/cP * 100 + problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " + solution = percent + return problem, solution + # || Class Instances # Format is: @@ -986,3 +1001,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +profitLossPercent = Generator("Profit or Loss Percent", 61, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) From 26c43e9f16589855261e207db21bb5850f46dd2d Mon Sep 17 00:00:00 2001 From: William Welch <wwelch@ctcd.edu> Date: Sun, 18 Oct 2020 18:28:30 -0500 Subject: [PATCH 057/116] Added function binarytoHex() --- driver.py | 12 ++++++++++++ mathgenerator/mathgen.py | 11 +++++++++++ 2 files changed, 23 insertions(+) create mode 100644 driver.py diff --git a/driver.py b/driver.py new file mode 100644 index 0000000..2063399 --- /dev/null +++ b/driver.py @@ -0,0 +1,12 @@ +# First test to run mathgenerator +# 19 Oct 2020 + +from mathgenerator import mathgen + +problem, solution = mathgen.addition() +print(problem) +print(solution) + +problem, solution = mathgen.binarytohex() +print(problem) +print(solution) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 44218e6..1736318 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -920,6 +920,16 @@ def volumeSphereFunc(maxRadius = 100): ans=(4*math.pi/3)*r*r*r solution = f"{ans} m^3" return problem,solution + +def BinaryToHexFunc(max_dig=10): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = hex(int(problem, 2)) + return problem, solution + # || Class Instances # Format is: @@ -986,3 +996,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) +binaryToHex = Generator("Binary to Hexidecimal", 61, "Hexidecimal of a=", "b", BinaryToHexFunc) From f17b0e7fd5484b3a99036787584bdec695d43496 Mon Sep 17 00:00:00 2001 From: Thromax <thromax@gmail.com> Date: Mon, 19 Oct 2020 02:27:00 +0200 Subject: [PATCH 058/116] Fixed README.md --- README.md | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 7643a53..6777b5c 100644 --- a/README.md +++ b/README.md @@ -77,31 +77,7 @@ problem, solution = mathgen.genById(0) | 43 | Cross Product of 2 Vectors | [-19, -3, 2] X [-15, -12, 7] = | [3, 103, 183] | vectorCross | | 44 | Compare Fractions | Which symbol represents the comparison between 8/6 and 3/1? | < | compareFractions | | 45 | Simple Interest | Simple interest for a principle amount of 9862 dollars, 4% rate of interest and for a time period of 1 years is = | 394.48 | simpleInterest | -| 46 | Multiplication of two matrices | Multiply - -50 36 7 -26 -2 63 - 88 -37 60 -19 61 -56 - 48 -5 69 -87 -64 -92 - -84 -50 -79 -19 86 -13 - 0 28 12 -14 73 -49 - 94 -90 2 26 -38 19 - 2 -11 79 -77 98 -77 - -87 70 72 -32 64 -99 - - and - - 34 32 -6 -32 46 -23 78 -81 -18 - -17 24 49 -62 -50 77 38 -98 -64 - -23 -78 43 5 -83 -5 4 -92 -16 - 46 -47 -92 52 -25 -37 44 51 -7 - 20 26 70 37 96 -73 49 84 42 - -72 -15 -80 -24 58 -47 -41 45 -69 | -8245 -1057 -423 -3535 -569 2034 -6329 1219 -5765 - 6619 567 10737 2391 4001 -6291 10147 -7387 6383 - 1472 -161 13318 -5565 -12574 10381 638 -23699 2621 - 1593 5598 3465 7899 13170 -6487 -4857 24642 10618 - 3592 3027 12206 1473 2120 -412 6082 -635 4561 - 3748 -1803 -11460 2072 5462 -8183 2423 11 947 - 2400 960 22950 2483 952 -1974 4625 -5512 9372 - 1132 -2067 22392 1884 -12276 8196 1949 -7148 5677 | matrixMultiplication | +| 46 | Multiplication of two matrices | Multiply <table><tr><td>-50</td><td>36</td><td>7</td><td>-26</td><td>-2</td><td>63</td></tr><tr><td>88</td><td>-37</td><td>60</td><td>-19</td><td>61</td><td>-56</td></tr><tr><td>48</td><td>-5</td><td>69</td><td>-87</td><td>-64</td><td>-92</td></tr><tr><td>-84</td><td>-50</td><td>-79</td><td>-19</td><td>86</td><td>-13</td></tr><tr><td>0</td><td>28</td><td>12</td><td>-14</td><td>73</td><td>-49</td></tr><tr><td>94</td><td>-90</td><td>2</td><td>26</td><td>-38</td><td>19</td></tr><tr><td>2</td><td>-11</td><td>79</td><td>-77</td><td>98</td><td>-77</td></tr><tr><td>-87</td><td>70</td><td>72</td><td>-32</td><td>64</td><td>-99</td></tr></table> and <table><tr><td>34</td><td>32</td><td>-6</td><td>-32</td><td>46</td><td>-23</td><td>78</td><td>-81</td><td>-18</td></tr><tr><td>-17</td><td>24</td><td>49</td><td>-62</td><td>-50</td><td>77</td><td>38</td><td>-98</td><td>-64</td></tr><tr><td>-23</td><td>-78</td><td>43</td><td> 5</td><td>-83</td><td>-5</td><td> 4</td><td>-92</td><td>-16</td></tr><tr><td> 46</td><td>-47</td><td>-92</td><td>52</td><td>-25</td><td>-37</td><td>44</td><td>51</td><td>-7</td></tr><tr><td> 20</td><td>26</td><td>70</td><td>37</td><td>96</td><td>-73</td><td>49</td><td>84</td><td>42</td></tr><tr><td>-72</td><td>-15</td><td>-80</td><td>-24</td><td>58</td><td>-47</td><td>-41</td><td>45</td><td>-69</td></tr></table>| <table><tr><td>-8245</td><td>-1057</td><td>-423</td><td>-3535</td><td>-569</td><td>2034</td><td>-6329</td><td>1219</td><td>-5765</td></tr><tr><td>6619</td><td> 567</td><td>10737</td><td>2391</td><td>4001</td><td>-6291</td><td>10147</td><td>-7387</td><td>6383</td></tr><tr><td>1472</td><td>-161</td><td>13318</td><td>-5565<td>-12574</td><td>10381</td><td> 638<td>-23699</td><td>2621</td></tr><tr><td>1593</td><td>5598</td><td>3465</td><td>7899</td><td>13170</td><td>-6487</td><td>-4857</td><td>24642</td><td>10618</td></tr><tr><td>3592</td><td>3027</td><td>12206</td><td>1473</td><td>2120</td><td>-412</td><td>6082</td><td>-635</td><td>4561</td></tr><tr><td>3748</td><td>-1803<td>-11460</td><td>2072</td><td>5462</td><td>-8183</td><td>2423</td><td>11</td><td> 947</td></tr><tr><td>2400</td><td> 960</td><td>22950</td><td>2483</td><td> 952</td><td>-1974</td><td>4625</td><td>-5512</td><td>9372</td></tr><tr><td>1132</td><td>-2067</td><td>22392</td><td>1884<td>-12276</td><td>8196</td><td>1949</td><td>-7148</td><td>5677</td></tr></table> | matrixMultiplication | | 47 | Cube Root | cuberoot of 771 upto 2 decimal places is: | 9.17 | CubeRoot | | 48 | Power Rule Integration | 1x^3 + 8x^8 + 10x^10 | (1/3)x^4 + (8/8)x^9 + (10/10)x^11 + c | powerRuleIntegration | | 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 52 , 84, 154 = | 70 | fourthAngleOfQuadrilateral | @@ -116,4 +92,4 @@ problem, solution = mathgen.genById(0) | 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | | 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | | 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | -| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | +| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | \ No newline at end of file From de1f4c4c1f2a6eca0e85d1e4416bd49cd4fe4141 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 22:05:47 -0400 Subject: [PATCH 059/116] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 342105f..7643a53 100644 --- a/README.md +++ b/README.md @@ -117,4 +117,3 @@ problem, solution = mathgen.genById(0) | 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | | 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | | 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | -| 61 | Geometric Progression | Given [2,4,8] find a,r,4th term, sum to 3rd term| 2,2,16,14 | GeomProgrFunc | From 8472e8d577abb4c1fe1676d8faa6f256675e24c3 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 22:31:01 -0400 Subject: [PATCH 060/116] Delete driver.py --- driver.py | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 driver.py diff --git a/driver.py b/driver.py deleted file mode 100644 index 2063399..0000000 --- a/driver.py +++ /dev/null @@ -1,12 +0,0 @@ -# First test to run mathgenerator -# 19 Oct 2020 - -from mathgenerator import mathgen - -problem, solution = mathgen.addition() -print(problem) -print(solution) - -problem, solution = mathgen.binarytohex() -print(problem) -print(solution) From 127b73abe86b9b21946006b1d37fa2f6ac7b3233 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 22:38:28 -0400 Subject: [PATCH 061/116] Made GOLDEN_RATIO local --- mathgenerator/mathgen.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index d632bef..282ae41 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -3,7 +3,6 @@ import math import fractions genList = [] -GOLDEN_RATIO = (1 + math.sqrt(5))/2 # || Generator class class Generator: @@ -922,9 +921,10 @@ def volumeSphereFunc(maxRadius = 100): return problem,solution def nthFibonacciNumber(maxN = 100): + golden_ratio = (1 + math.sqrt(5))/2 n = random.randint(1,maxN) problem = f"What is the {n}th Fibonacci number?" - ans = round((math.pow(GOLDEN_RATIO,n) - math.pow(-GOLDEN_RATIO,-n))/(math.sqrt(5))) + ans = round((math.pow(golden_ratio,n) - math.pow(-golden_ratio,-n))/(math.sqrt(5))) solution = f"{ans}" return problem, solution @@ -996,4 +996,4 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is","d units^2", surfaceAreaSphere) volumeSphere=Generator("Volume of Sphere",60,"Volume of sphere with radius r m = ","(4*pi/3)*r*r*r",volumeSphereFunc) -nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumber) \ No newline at end of file +nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumber) From baf44937d85acaa16a4e45f305c59d51f7de2382 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 23:14:56 -0400 Subject: [PATCH 062/116] 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 7aec9a0..b7018ce 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1161,4 +1161,4 @@ profitLossPercent = Generator("Profit or Loss Percent", 62, "Profit/ Loss percen binaryToHex = Generator("Binary to Hexidecimal", 63, "Hexidecimal of a=", "b", BinaryToHexFunc) ComplexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", GeomProgrFunc) -geometricMean=Generator("Geometric Mean of N Numbers",61,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) +geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) From 0e63b4ee11e4ec894107d05d3974328ceaac8d08 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 23:48:13 -0400 Subject: [PATCH 063/116] restructure base --- mathgenerator/funcs/__init__.py | 8 ++++++ mathgenerator/funcs/binaryToHexFunc.py | 11 ++++++++ mathgenerator/funcs/geomProgrFunc.py | 15 ++++++++++ mathgenerator/funcs/geometricMeanFunc.py | 27 ++++++++++++++++++ mathgenerator/funcs/harmonicMeanFunc.py | 28 +++++++++++++++++++ mathgenerator/funcs/hcfFunc.py | 11 ++++++++ .../funcs/multiplyComplexNumbersFunc.py | 9 ++++++ mathgenerator/funcs/nthFibonacciNumberFunc.py | 10 +++++++ mathgenerator/funcs/profitLossPercentFunc.py | 14 ++++++++++ mathgenerator/mathgen.py | 9 +++++- test.py | 1 + 11 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 mathgenerator/funcs/binaryToHexFunc.py create mode 100644 mathgenerator/funcs/geomProgrFunc.py create mode 100644 mathgenerator/funcs/geometricMeanFunc.py create mode 100644 mathgenerator/funcs/harmonicMeanFunc.py create mode 100644 mathgenerator/funcs/hcfFunc.py create mode 100644 mathgenerator/funcs/multiplyComplexNumbersFunc.py create mode 100644 mathgenerator/funcs/nthFibonacciNumberFunc.py create mode 100644 mathgenerator/funcs/profitLossPercentFunc.py create mode 100644 test.py diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 73bd406..efb1ce7 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -53,6 +53,7 @@ from .cubeRootFunc import * from .powerRuleIntegrationFunc import * from .fourthAngleOfQuadriFunc import * from .quadraticEquation import * +from .hcfFunc import * from .DiceSumProbFunc import * from .exponentiationFunc import * from .confidenceIntervalFunc import * @@ -63,3 +64,10 @@ from .sumOfAnglesOfPolygonFunc import * from .dataSummaryFunc import * from .surfaceAreaSphere import * from .volumeSphereFunc import * +from .nthFibonacciNumberFunc import * +from .profitLossPercentFunc import * +from .binaryToHexFunc import * +from .multiplyComplexNumbersFunc import * +from .geomProgrFunc import * +from .geometricMeanFunc import * +from .harmonicMeanFunc import * diff --git a/mathgenerator/funcs/binaryToHexFunc.py b/mathgenerator/funcs/binaryToHexFunc.py new file mode 100644 index 0000000..0f3e962 --- /dev/null +++ b/mathgenerator/funcs/binaryToHexFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def binaryToHexFunc(max_dig=10): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = hex(int(problem, 2)) + return problem, solution diff --git a/mathgenerator/funcs/geomProgrFunc.py b/mathgenerator/funcs/geomProgrFunc.py new file mode 100644 index 0000000..3e3ad5c --- /dev/null +++ b/mathgenerator/funcs/geomProgrFunc.py @@ -0,0 +1,15 @@ +from .__init__ import * + +def geomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, sum_term=5): + r=random.randint(min_value,max_value) + a=random.randint(min_value,max_value) + n_term=random.randint(number_values,number_values+5) + sum_term=random.randint(number_values,number_values+5) + GP=[] + for i in range(number_values): + GP.append(a*(r**i)) + problem="For the given GP "+str(GP)+" ,Find the value of a,common ratio,"+str(n_term)+"th term value, sum upto "+str(sum_term)+"th term" + value_nth_term=a*(r**(n_term-1)) + sum_till_nth_term=a*((r**sum_term-1)/(r-1)) + solution="The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format(a,r,n_term,value_nth_term,sum_term,sum_till_nth_term) + return problem,solution diff --git a/mathgenerator/funcs/geometricMeanFunc.py b/mathgenerator/funcs/geometricMeanFunc.py new file mode 100644 index 0000000..05ded2b --- /dev/null +++ b/mathgenerator/funcs/geometricMeanFunc.py @@ -0,0 +1,27 @@ +from .__init__ import * + + +def geometricMeanFunc(maxValue=100, maxNum=4): + a=random.randint(1,maxValue) + b=random.randint(1,maxValue) + c=random.randint(1,maxValue) + d=random.randint(1,maxValue) + num=random.randint(2,4) + if num==2: + product=a*b + elif num==3: + product=a*b*c + elif num==4: + product=a*b*c*d + + ans=product**(1/num) + if num==2: + problem=f"Geometric mean of {num} numbers {a} and {b} = " + solution = f"({a}*{b})^(1/{num}) = {ans}" + elif num==3: + problem=f"Geometric mean of {num} numbers {a} , {b} and {c} = " + solution = f"({a}*{b}*{c})^(1/{num}) = {ans}" + elif num==4: + problem=f"Geometric mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f"({a}*{b}*{c}*{d})^(1/{num}) = {ans}" + return problem,solution diff --git a/mathgenerator/funcs/harmonicMeanFunc.py b/mathgenerator/funcs/harmonicMeanFunc.py new file mode 100644 index 0000000..035273f --- /dev/null +++ b/mathgenerator/funcs/harmonicMeanFunc.py @@ -0,0 +1,28 @@ +from .__init__ import * + + +def harmonicMeanFunc(maxValue=100, maxNum=4): + + a=random.randint(1,maxValue) + b=random.randint(1,maxValue) + c=random.randint(1,maxValue) + d=random.randint(1,maxValue) + num=random.randint(2,4) + if num==2: + sum=(1/a)+(1/b) + elif num==3: + sum=(1/a)+(1/b)+(1/c) + elif num==4: + sum=(1/a)+(1/b)+(1/c)+(1/d) + + ans=num/sum + if num==2: + problem=f"Harmonic mean of {num} numbers {a} and {b} = " + solution = f" {num}/((1/{a}) + (1/{b})) = {ans}" + elif num==3: + problem=f"Harmonic mean of {num} numbers {a} , {b} and {c} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c})) = {ans}" + elif num==4: + problem=f"Harmonic mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c}) + (1/{d})) = {ans}" + return problem,solution diff --git a/mathgenerator/funcs/hcfFunc.py b/mathgenerator/funcs/hcfFunc.py new file mode 100644 index 0000000..40be783 --- /dev/null +++ b/mathgenerator/funcs/hcfFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + +def hcfFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + while(y): + x, y = y, x % y + problem = f"HCF of {a} and {b} = " + solution = str(x) + return problem, solution diff --git a/mathgenerator/funcs/multiplyComplexNumbersFunc.py b/mathgenerator/funcs/multiplyComplexNumbersFunc.py new file mode 100644 index 0000000..f959d4d --- /dev/null +++ b/mathgenerator/funcs/multiplyComplexNumbersFunc.py @@ -0,0 +1,9 @@ +from .__init__ import * + + +def multiplyComplexNumbersFunc(minRealImaginaryNum = -20, maxRealImaginaryNum = 20): + num1 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + num2 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + problem = f"{num1} * {num2} = " + solution = num1 * num2 + return problem, solution diff --git a/mathgenerator/funcs/nthFibonacciNumberFunc.py b/mathgenerator/funcs/nthFibonacciNumberFunc.py new file mode 100644 index 0000000..023a007 --- /dev/null +++ b/mathgenerator/funcs/nthFibonacciNumberFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def nthFibonacciNumberFunc(maxN = 100): + golden_ratio = (1 + math.sqrt(5))/2 + n = random.randint(1,maxN) + problem = f"What is the {n}th Fibonacci number?" + ans = round((math.pow(golden_ratio,n) - math.pow(-golden_ratio,-n))/(math.sqrt(5))) + solution = f"{ans}" + return problem, solution diff --git a/mathgenerator/funcs/profitLossPercentFunc.py b/mathgenerator/funcs/profitLossPercentFunc.py new file mode 100644 index 0000000..533c294 --- /dev/null +++ b/mathgenerator/funcs/profitLossPercentFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): + cP = random.randint(1, maxCP) + sP = random.randint(1, maxSP) + diff = abs(sP-cP) + if (sP-cP >= 0): + profitOrLoss = "Profit" + else: + profitOrLoss = "Loss" + percent = diff/cP * 100 + problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " + solution = percent diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 14d5668..a3beac6 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -149,4 +149,11 @@ dataSummary = Generator("Mean,Standard Deviation,Variance", surfaceAreaSphereGen = Generator( "Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) volumeSphere = Generator("Volume of Sphere", 60, - "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) \ No newline at end of file + "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) +nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) +profitLossPercent = Generator("Profit or Loss Percent", 62, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) +binaryToHex = Generator("Binary to Hexidecimal", 63, "Hexidecimal of a=", "b", binaryToHexFunc) +complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) +geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) +geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) +harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) diff --git a/test.py b/test.py new file mode 100644 index 0000000..288c5b3 --- /dev/null +++ b/test.py @@ -0,0 +1 @@ +from mathgenerator import mathgen From 9241aef6497e674c848bf757151182cfefd3a559 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Sun, 18 Oct 2020 23:57:05 -0400 Subject: [PATCH 064/116] Update test.py --- test.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test.py b/test.py index 288c5b3..925ced3 100644 --- a/test.py +++ b/test.py @@ -1 +1,5 @@ from mathgenerator import mathgen + +#test your generators here + +print(mathgen.addition()) From c55fb9c0818438f406eb7285daeb97b3df6a0946 Mon Sep 17 00:00:00 2001 From: Riei-Joaquim <39650571+Riei-Joaquim@users.noreply.github.com> Date: Mon, 19 Oct 2020 01:01:14 -0300 Subject: [PATCH 065/116] Update mathgen.py --- mathgenerator/mathgen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..ea044d5 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,3 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 20, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) From 3ba50015ef4d9abaa404b5d3b9bb272cfdcf2deb Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 00:06:13 -0400 Subject: [PATCH 066/116] Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 556fd76..e7cf0eb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,6 +28,12 @@ def additionFunc(maxSum, maxAddend): Before coding, please check README.md to see if someone has already created the generator you plan to make. Skillid is determined by the next available id as can be determined in the table. +#### Restructure Notes +We currently just underwent a large reconstruction of the repository. Here is how you commit to the repo. +* Place your generator instance at the bottom of mathgen.py +* Create a new file in the funcs directory with the same name as your function +* Place `.__init__ import *` at the top of your file and then write your function in the lines beneath it +* Add `from .<yourfunc> import *` at the bottom of the `__init__.py` file inside the funcs directory ### Provide Ideas If you have an idea for a generator but don't have the time or know-how to create it, you can add it as an issue. If you have a lot of ideas, I would suggest adding them to the table in README.md so that they are easier for our team to manage. From fab946e09cb153c2631098f44de2f4139f8b3980 Mon Sep 17 00:00:00 2001 From: Riei-Joaquim <39650571+Riei-Joaquim@users.noreply.github.com> Date: Mon, 19 Oct 2020 01:07:54 -0300 Subject: [PATCH 067/116] Create determinantToMatrix22.cpp --- mathgenerator/funcs/determinantToMatrix22.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 mathgenerator/funcs/determinantToMatrix22.cpp diff --git a/mathgenerator/funcs/determinantToMatrix22.cpp b/mathgenerator/funcs/determinantToMatrix22.cpp new file mode 100644 index 0000000..a92ac76 --- /dev/null +++ b/mathgenerator/funcs/determinantToMatrix22.cpp @@ -0,0 +1,12 @@ +from .__init__ import * + +def determinantToMatrix22(maxMatrixVal = 100): + a = random.randint(0, maxMatrixVal) + b = random.randint(0, maxMatrixVal) + c = random.randint(0, maxMatrixVal) + d = random.randint(0, maxMatrixVal) + + determinant = a*d - b*c + problem = f"Det([[{a}, {b}], [{c}, {d}]]) = " + solution = f" {determinant}" + return problem, solution From 2bb6fe90167fa1684fff5a49c38a0e5a2b26d708 Mon Sep 17 00:00:00 2001 From: Riei-Joaquim <39650571+Riei-Joaquim@users.noreply.github.com> Date: Mon, 19 Oct 2020 01:15:47 -0300 Subject: [PATCH 068/116] Update __init__.py --- mathgenerator/funcs/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index efb1ce7..cd6cc90 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -71,3 +71,4 @@ from .multiplyComplexNumbersFunc import * from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * +from .determinantToMatrix22 import * From bd6bea9aa93e2b3603df5b47cfb9ca881571e071 Mon Sep 17 00:00:00 2001 From: Riei-Joaquim <39650571+Riei-Joaquim@users.noreply.github.com> Date: Mon, 19 Oct 2020 01:21:09 -0300 Subject: [PATCH 069/116] 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 ea044d5..e45a24a 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,4 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) -intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 20, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) +intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 68, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) From a60525edbc47bde83a15fc593383f6dee3798a44 Mon Sep 17 00:00:00 2001 From: devansh-07 <sonidev0201@gmail.com> Date: Mon, 19 Oct 2020 11:02:25 +0530 Subject: [PATCH 070/116] Added 2's complement --- mathgenerator/funcs/__init__.py | 1 + mathgenerator/funcs/binary2sComplement.py | 26 +++++++++++++++++++++++ mathgenerator/mathgen.py | 1 + 3 files changed, 28 insertions(+) create mode 100644 mathgenerator/funcs/binary2sComplement.py diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index efb1ce7..b43d727 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -71,3 +71,4 @@ from .multiplyComplexNumbersFunc import * from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * +from .binary2sComplement import * \ No newline at end of file diff --git a/mathgenerator/funcs/binary2sComplement.py b/mathgenerator/funcs/binary2sComplement.py new file mode 100644 index 0000000..f51b797 --- /dev/null +++ b/mathgenerator/funcs/binary2sComplement.py @@ -0,0 +1,26 @@ +from .__init__ import * + +def binary2sComplementFunc(maxDigits=10): + digits = random.randint(1, maxDigits) + question = ''.join([str(random.randint(0, 1)) for i in range(digits)]).lstrip('0') + + answer = [] + for i in question: + answer.append(str(int(not bool(int(i))))) + + carry = True + j = len(answer) - 1 + while j >= 0: + if answer[j] == '0': + answer[j] = '1' + carry = False + break + answer[j] = '0' + j -= 1 + + if j == 0 and carry == True: + answer.insert(0, '1') + + problem = "2's complement of " + question + " =" + solution = ''.join(answer).lstrip('0') + return problem, solution \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..860c89b 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,3 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +binary2sComplement = Generator("Binary 2's Complement", 68, "2's complement of 11010110 = ", "101010", binary2sComplementFunc) \ No newline at end of file From 1e252fec0fe3f98ef77ac0968009a2a4692d696e Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:03:54 +0530 Subject: [PATCH 071/116] Added function for area of Sector --- mathgenerator/funcs/sectorAreaFunc.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 mathgenerator/funcs/sectorAreaFunc.py diff --git a/mathgenerator/funcs/sectorAreaFunc.py b/mathgenerator/funcs/sectorAreaFunc.py new file mode 100644 index 0000000..a4337b4 --- /dev/null +++ b/mathgenerator/funcs/sectorAreaFunc.py @@ -0,0 +1,12 @@ +.__init__ import * + +import random +import math +def sectorAreaFunc(maxRadius = 49,maxAngle = 359): + Radius = random.randint(1, maxRadius) + Angle = random.randint(1, maxAngle) + problem = f"Given radius, {Radius} and angle, {Angle}. Find the area of the sector." + secArea = float((Angle / 360) * math.pi*Radius*Radius) + formatted_float = "{:.5f}".format(secArea) + solution = f"Area of sector = {formatted_float}" + return problem, solution From 587f786d3e7ebe8a984b3813569b6f85f7e0c300 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:06:04 +0530 Subject: [PATCH 072/116] Update __init__.py --- mathgenerator/funcs/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index efb1ce7..aab32a8 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -71,3 +71,4 @@ from .multiplyComplexNumbersFunc import * from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * +from .sectorAreaFunc import* From 7e50827a75ef5b7f97ec9d17497ce61957712992 Mon Sep 17 00:00:00 2001 From: devansh-07 <sonidev0201@gmail.com> Date: Mon, 19 Oct 2020 11:06:36 +0530 Subject: [PATCH 073/116] Added 2's complement function --- mathgenerator/mathgen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 860c89b..302fa34 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,7 +1,7 @@ import random import math import fractions -from .funcs import * +from funcs import * genList = [] @@ -156,4 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) -binary2sComplement = Generator("Binary 2's Complement", 68, "2's complement of 11010110 = ", "101010", binary2sComplementFunc) \ No newline at end of file +binary2sComplement = Generator("Binary 2's Complement", 68, "2's complement of 11010110 =", "101010", binary2sComplementFunc) From 20b93b90ff52c4feceb1351e5e8695c0304b08a0 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:09:28 +0530 Subject: [PATCH 074/116] Update mathgen.py --- mathgenerator/mathgen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..96b8ecb 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,3 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +sectorArea=Generator("Area of a Sector",68,"Area of a sector with radius, r and angle, a ","Area",sectorAreaFunc) From d56f20cf0a2c518460a0fd0f121b114b90ff7b70 Mon Sep 17 00:00:00 2001 From: Jayesh Vasudeva <42416623+0tist@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:15:47 +0530 Subject: [PATCH 075/116] Update mathgen.py --- mathgenerator/mathgen.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..e015c81 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,3 +156,5 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +eucldianNorm=Generator("Euclidian norm or L2 norm of a vector", 68, "Euclidian Norm of a vector V:[v1, v2, ......., vn]", "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNorm) +angleBtwVectors=Generator("Angle between 2 vectors", 69, "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", AngleBtwVectors) From 07cae1b56b7da4882d478cdd951909736928c00f Mon Sep 17 00:00:00 2001 From: Jayesh Vasudeva <42416623+0tist@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:17:40 +0530 Subject: [PATCH 076/116] Add files via upload --- mathgenerator/funcs/AngleBtwVectors.py | 16 ++++++++++++++++ mathgenerator/funcs/eucldianNorm.py | 7 +++++++ 2 files changed, 23 insertions(+) create mode 100644 mathgenerator/funcs/AngleBtwVectors.py create mode 100644 mathgenerator/funcs/eucldianNorm.py diff --git a/mathgenerator/funcs/AngleBtwVectors.py b/mathgenerator/funcs/AngleBtwVectors.py new file mode 100644 index 0000000..09e0a11 --- /dev/null +++ b/mathgenerator/funcs/AngleBtwVectors.py @@ -0,0 +1,16 @@ +import eucldianNorm +import math +from .__init__ import * + + +def AngleBtwVectors(v1: list, v2: list): + sum = 0 + for i in v1: + for j in v2: + sum += i * j + + mags = euclidianNorm(v1) * euclidianNorm(v2) + problem = f"angle between the vectors {v1} and {v2} is:" + solution = math.acos(sum / mags) + # would return the answer in radians + return problem, solution diff --git a/mathgenerator/funcs/eucldianNorm.py b/mathgenerator/funcs/eucldianNorm.py new file mode 100644 index 0000000..b672add --- /dev/null +++ b/mathgenerator/funcs/eucldianNorm.py @@ -0,0 +1,7 @@ +from .__init__ import * + + +def euclidianNorm(v1: list): + problem = f"Euclidian norm or L2 norm of the vector{v1} is:" + solution = sqrt(sum([i**2 for i in v1])) + return problem, solution From 94e35c24e6c392d4e5e4318bd4c1fb843686a369 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:44:34 +0530 Subject: [PATCH 077/116] Update sectorAreaFunc.py --- mathgenerator/funcs/sectorAreaFunc.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mathgenerator/funcs/sectorAreaFunc.py b/mathgenerator/funcs/sectorAreaFunc.py index a4337b4..aaf4573 100644 --- a/mathgenerator/funcs/sectorAreaFunc.py +++ b/mathgenerator/funcs/sectorAreaFunc.py @@ -1,7 +1,5 @@ .__init__ import * -import random -import math def sectorAreaFunc(maxRadius = 49,maxAngle = 359): Radius = random.randint(1, maxRadius) Angle = random.randint(1, maxAngle) From d33de18627aa6db74a4ba8ff5d0644e9a07f58f1 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:45:49 +0530 Subject: [PATCH 078/116] Created mean and median functions --- mathgenerator/funcs/meanMedianFunc.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 mathgenerator/funcs/meanMedianFunc.py diff --git a/mathgenerator/funcs/meanMedianFunc.py b/mathgenerator/funcs/meanMedianFunc.py new file mode 100644 index 0000000..5f06a1c --- /dev/null +++ b/mathgenerator/funcs/meanMedianFunc.py @@ -0,0 +1,13 @@ +.__init__ import * + +def meanMedianFunc(maxlen = 10): + randomlist = random.sample(range(1, 99), maxlen) + total = 0 + for n in randomlist: + total = total + n + mean = total/10 + problem = f"Given the series of numbers {randomlist}. find the arithmatic mean and mdian of the series" + randomlist.sort() + median = (randomlist[4]+randomlist[5])/2 + solution = f"Arithmetic mean of the series is {mean} and Arithmetic median of this series is {median}" + return problem, solution From 5e18c82b7be446e30a095a869ece911d0f7787c6 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:46:30 +0530 Subject: [PATCH 079/116] Update __init__.py --- mathgenerator/funcs/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index aab32a8..576abee 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -72,3 +72,4 @@ from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * from .sectorAreaFunc import* +from .meanMedianFunc import* From c36d7de7d9c4d1383c3e9dba133b3beee63f081c Mon Sep 17 00:00:00 2001 From: Gourav2000 <gouravsarkar67@gmail.com> Date: Mon, 19 Oct 2020 11:47:50 +0530 Subject: [PATCH 080/116] added matrix Inversion --- dev-requirements.txt | 3 +- mathgenerator/funcs/__init__.py | 1 + mathgenerator/funcs/matrixInversion.py | 68 ++++++++++++++++++++++++++ mathgenerator/mathgen.py | 2 + 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 mathgenerator/funcs/matrixInversion.py diff --git a/dev-requirements.txt b/dev-requirements.txt index c29cf4e..7b33738 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,4 +1,5 @@ pytest hypothesis flake8 -autopep8 \ No newline at end of file +autopep8 +sympy \ No newline at end of file diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index efb1ce7..ac2c2a8 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -71,3 +71,4 @@ from .multiplyComplexNumbersFunc import * from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * +from .matrixInversion import * diff --git a/mathgenerator/funcs/matrixInversion.py b/mathgenerator/funcs/matrixInversion.py new file mode 100644 index 0000000..7de9f15 --- /dev/null +++ b/mathgenerator/funcs/matrixInversion.py @@ -0,0 +1,68 @@ +from .__init__ import * + +def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerElementsInInvertedMatrix=False): + if OnlyIntegerElementsInInvertedMatrix is True: + isItOk = False + Mat = list() + while (isItOk is False): + Mat = list() + for i in range(0, SquareMatrixDimension): + z = list() + for j in range(0, SquareMatrixDimension): + z.append(0) + z[i] = 1 + Mat.append(z) + MaxAllowedMatrixElement = math.ceil( + pow(MaxMatrixElement, 1 / (SquareMatrixDimension))) + randomlist = random.sample( + range(0, MaxAllowedMatrixElement + 1), SquareMatrixDimension) + + for i in range(0, SquareMatrixDimension): + if i == SquareMatrixDimension - 1: + Mat[0] = [j + (k * randomlist[i]) + for j, k in zip(Mat[0], Mat[i])] + else: + Mat[i + 1] = [j + (k * randomlist[i]) + for j, k in zip(Mat[i + 1], Mat[i])] + + for i in range(1, SquareMatrixDimension - 1): + Mat[i] = [sum(i) + for i in zip(Mat[SquareMatrixDimension - 1], Mat[i])] + + isItOk = True + for i in Mat: + for j in i: + if j > MaxMatrixElement: + isItOk = False + break + if isItOk is False: + break + + random.shuffle(Mat) + Mat = sympy.Matrix(Mat) + Mat = sympy.Matrix.transpose(Mat) + Mat = Mat.tolist() + random.shuffle(Mat) + Mat = sympy.Matrix(Mat) + Mat = sympy.Matrix.transpose(Mat) + + else: + randomlist = list(sympy.primerange(0, MaxMatrixElement + 1)) + plist = random.sample(randomlist, SquareMatrixDimension) + randomlist = random.sample( + range(0, MaxMatrixElement + 1), SquareMatrixDimension * SquareMatrixDimension) + randomlist = list(set(randomlist) - set(plist)) + n_list = random.sample( + randomlist, SquareMatrixDimension * (SquareMatrixDimension - 1)) + Mat = list() + for i in range(0, SquareMatrixDimension): + z = list() + z.append(plist[i]) + for j in range(0, SquareMatrixDimension - 1): + z.append(n_list[(i * SquareMatrixDimension) + j - i]) + random.shuffle(z) + Mat.append(z) + Mat = sympy.Matrix(Mat) + problem = 'Inverse of Matrix ' + str(Mat) + ' is:' + solution = str(sympy.Matrix.inv(Mat)) + return problem, solution \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..004fbcc 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,6 +1,7 @@ import random import math import fractions +import sympy from .funcs import * genList = [] @@ -156,3 +157,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +invertmatrix = Generator("Inverse of a Matrix", 68, "Inverse of a matrix A is", "A^(-1)", matrixInversion) \ No newline at end of file From f8cc8b3976f2fa0caf9ca25b5ad2cd260d9bd6b2 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 11:48:35 +0530 Subject: [PATCH 081/116] Update mathgen.py --- mathgenerator/mathgen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 96b8ecb..98a605b 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -157,3 +157,4 @@ geometricprogression=Generator("Geometric Progression", 65, "Initial value,Commo geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) sectorArea=Generator("Area of a Sector",68,"Area of a sector with radius, r and angle, a ","Area",sectorAreaFunc) +meanMedian=Generator("Mean and Median",69,"Mean and median of given set of numbers","Mean, Median",meanMedianFunc) From cb2f3e7abe7514e4697d75a9ff0bd5bd2b2453e3 Mon Sep 17 00:00:00 2001 From: himanshu1603 <himanshu30ber@gmail.com> Date: Mon, 19 Oct 2020 12:16:18 +0530 Subject: [PATCH 082/116] added absolute difference --- mathgenerator/funcs/absoluteDifferenceFunc.py | 10 ++++++++++ mathgenerator/mathgen.py | 1 + 2 files changed, 11 insertions(+) create mode 100644 mathgenerator/funcs/absoluteDifferenceFunc.py diff --git a/mathgenerator/funcs/absoluteDifferenceFunc.py b/mathgenerator/funcs/absoluteDifferenceFunc.py new file mode 100644 index 0000000..d578d19 --- /dev/null +++ b/mathgenerator/funcs/absoluteDifferenceFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + +def absoluteDifferenceFunc (maxA = 100, maxB = 100): + a = random.randint(-1*maxA, maxA) + b = random.randint(-1*maxB, maxB) + absDiff = abs(a-b) + + problem = "Absolute difference between numbers " + str(a) + " and " + str(b) + " = " + solution = absDiff + return problem, solution \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..ad94464 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,3 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +absoluteDifference=Generator("Absolute difference between two numbers", 68, "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc) From 13c19f480fc685f5f168a6e517a89b863714d83c Mon Sep 17 00:00:00 2001 From: Stefano Furin <furins@gmail.com> Date: Mon, 19 Oct 2020 09:13:35 +0200 Subject: [PATCH 083/116] fix generators numbering --- README.md | 10 ++++++++-- mathgenerator/mathgen.py | 18 +++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 6777b5c..1afacb8 100644 --- a/README.md +++ b/README.md @@ -91,5 +91,11 @@ problem, solution = mathgen.genById(0) | 57 | Trigonometric Values | What is cos(60)? | 1/2 | basicTrigonometry | | 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | | 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | -| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | -| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | \ No newline at end of file +| 60 | Surface Area of Sphere | Surface area of Sphere with radius = 12m is | 1809.5573684677208 m^2 | surfaceAreaSphereGen | +| 61 | Volume of Sphere | Volume of sphere with radius 14 m = | 11494.040321933857 m^3 | volumeSphere | +| 62 | nth Fibonacci number | What is the 17th Fibonacci number? | 1597 | nthFibonacciNumberGen | +| 64 | Binary to Hexidecimal | 00 | 0x0 | binaryToHex | +| 65 | Multiplication of 2 complex numbers | (13-8j) * (-7-5j) = | (-131-9j) | complexNumMultiply | +| 66 | Geometric Progression | For the given GP [12, 48, 192, 768, 3072, 12288] ,Find the value of a,common ratio,9th term value, sum upto 11th term | The value of a is 12, common ratio is 4 , 9th term is 786432 , sum upto 11th term is 16777212.0 | geometricprogression | +| 67 | Geometric Mean of N Numbers | Geometric mean of 2 numbers 42 and 40 = | (42*40)^(1/2) = 40.98780306383839 | geometricMean | +| 68 | Harmonic Mean of N Numbers | Harmonic mean of 4 numbers 53 , 62 , 72 , 35 = | 4/((1/53) + (1/62) + (1/72) + (1/35)) = 51.64137311701554 | harmonicMean | \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..a10660d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -146,13 +146,13 @@ sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator( - "Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) -volumeSphere = Generator("Volume of Sphere", 60, + "Surface Area of Sphere", 60, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) +volumeSphere = Generator("Volume of Sphere", 61, "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) -nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) -profitLossPercent = Generator("Profit or Loss Percent", 62, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) -binaryToHex = Generator("Binary to Hexidecimal", 63, "Hexidecimal of a=", "b", binaryToHexFunc) -complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) -geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) -geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) -harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +nthFibonacciNumberGen = Generator("nth Fibonacci number", 62, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) +profitLossPercent = Generator("Profit or Loss Percent", 63, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) +binaryToHex = Generator("Binary to Hexidecimal", 64, "Hexidecimal of a=", "b", binaryToHexFunc) +complexNumMultiply = Generator("Multiplication of 2 complex numbers", 65, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) +geometricprogression=Generator("Geometric Progression", 66, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) +geometricMean=Generator("Geometric Mean of N Numbers",67,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) +harmonicMean=Generator("Harmonic Mean of N Numbers",68,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) From ab960534f9de120c21282eb657aa47a97052e291 Mon Sep 17 00:00:00 2001 From: midhun varman <midhunvarman2010@gmail.com> Date: Mon, 19 Oct 2020 13:04:44 +0530 Subject: [PATCH 084/116] added vector dot product --- mathgenerator/funcs/__init__.py | 1 + mathgenerator/funcs/vectorDotFunc.py | 13 +++++++++++++ mathgenerator/mathgen.py | 1 + 3 files changed, 15 insertions(+) create mode 100644 mathgenerator/funcs/vectorDotFunc.py diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index efb1ce7..99ab6b4 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -71,3 +71,4 @@ from .multiplyComplexNumbersFunc import * from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * +from .vectorDotFunc import * diff --git a/mathgenerator/funcs/vectorDotFunc.py b/mathgenerator/funcs/vectorDotFunc.py new file mode 100644 index 0000000..a15cd75 --- /dev/null +++ b/mathgenerator/funcs/vectorDotFunc.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +def vectorDotFunc(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[0] * b[0], + a[1] * b[1] , + a[2] * b[2] ] + + problem = str(a) + " . " + str(b) + " = " + solution = str(c) + return problem, solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..35c657f 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,3 +156,4 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +vectorDot = Generator("Dot Product of 2 Vectors",68, "a . b = ", "c", vectorDotFunc) From e77af6cdef48c660d3a82b80b22d983416da69e7 Mon Sep 17 00:00:00 2001 From: midhun varman <midhunvarman2010@gmail.com> Date: Mon, 19 Oct 2020 15:01:19 +0530 Subject: [PATCH 085/116] added dot product --- mathgenerator/funcs/vectorDotFunc.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mathgenerator/funcs/vectorDotFunc.py b/mathgenerator/funcs/vectorDotFunc.py index a15cd75..0364c65 100644 --- a/mathgenerator/funcs/vectorDotFunc.py +++ b/mathgenerator/funcs/vectorDotFunc.py @@ -4,9 +4,7 @@ from .__init__ import * def vectorDotFunc(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[0] * b[0], - a[1] * b[1] , - a[2] * b[2] ] + c = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] problem = str(a) + " . " + str(b) + " = " solution = str(c) From fe0c86b33e09ee962c373e3ba01b9c0e1bd77a94 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 09:28:09 -0400 Subject: [PATCH 086/116] Fix euclidianNorm and angleBtwVectors issues --- mathgenerator/funcs/__init__.py | 2 ++ .../funcs/{AngleBtwVectors.py => angleBtwVectorsFunc.py} | 6 +++--- .../funcs/{eucldianNorm.py => euclidianNormFunc.py} | 2 +- mathgenerator/mathgen.py | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) rename mathgenerator/funcs/{AngleBtwVectors.py => angleBtwVectorsFunc.py} (65%) rename mathgenerator/funcs/{eucldianNorm.py => euclidianNormFunc.py} (83%) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index efb1ce7..25fb266 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -71,3 +71,5 @@ from .multiplyComplexNumbersFunc import * from .geomProgrFunc import * from .geometricMeanFunc import * from .harmonicMeanFunc import * +from .euclidianNormFunc import * +from .angleBtwVectorsFunc import * diff --git a/mathgenerator/funcs/AngleBtwVectors.py b/mathgenerator/funcs/angleBtwVectorsFunc.py similarity index 65% rename from mathgenerator/funcs/AngleBtwVectors.py rename to mathgenerator/funcs/angleBtwVectorsFunc.py index 09e0a11..bd2d0b5 100644 --- a/mathgenerator/funcs/AngleBtwVectors.py +++ b/mathgenerator/funcs/angleBtwVectorsFunc.py @@ -1,15 +1,15 @@ -import eucldianNorm +from .euclidianNormFunc import euclidianNormFunc import math from .__init__ import * -def AngleBtwVectors(v1: list, v2: list): +def angleBtwVectorsFunc(v1: list, v2: list): sum = 0 for i in v1: for j in v2: sum += i * j - mags = euclidianNorm(v1) * euclidianNorm(v2) + mags = euclidianNormFunc(v1) * euclidianNormFunc(v2) problem = f"angle between the vectors {v1} and {v2} is:" solution = math.acos(sum / mags) # would return the answer in radians diff --git a/mathgenerator/funcs/eucldianNorm.py b/mathgenerator/funcs/euclidianNormFunc.py similarity index 83% rename from mathgenerator/funcs/eucldianNorm.py rename to mathgenerator/funcs/euclidianNormFunc.py index b672add..f66329e 100644 --- a/mathgenerator/funcs/eucldianNorm.py +++ b/mathgenerator/funcs/euclidianNormFunc.py @@ -1,7 +1,7 @@ from .__init__ import * -def euclidianNorm(v1: list): +def euclidianNormFunc(v1: list): problem = f"Euclidian norm or L2 norm of the vector{v1} is:" solution = sqrt(sum([i**2 for i in v1])) return problem, solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 4062a96..fa8fd91 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -156,5 +156,5 @@ complexNumMultiply = Generator("Multiplication of 2 complex numbers", 65, "(x + geometricprogression=Generator("Geometric Progression", 66, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean=Generator("Geometric Mean of N Numbers",67,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) harmonicMean=Generator("Harmonic Mean of N Numbers",68,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) -eucldianNorm=Generator("Euclidian norm or L2 norm of a vector", 69, "Euclidian Norm of a vector V:[v1, v2, ......., vn]", "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNorm) -angleBtwVectors=Generator("Angle between 2 vectors", 70, "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", AngleBtwVectors) +eucldianNorm=Generator("Euclidian norm or L2 norm of a vector", 69, "Euclidian Norm of a vector V:[v1, v2, ......., vn]", "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNormFunc) +angleBtwVectors=Generator("Angle between 2 vectors", 70, "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", angleBtwVectorsFunc) From 3208d6d485f38b230d721160d3cbc27ecc426a30 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 09:30:38 -0400 Subject: [PATCH 087/116] Added to __init__.py --- mathgenerator/funcs/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 25fb266..bb75b5c 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -73,3 +73,4 @@ from .geometricMeanFunc import * from .harmonicMeanFunc import * from .euclidianNormFunc import * from .angleBtwVectorsFunc import * +from .absoluteDifferenceFunc import * From 16ebfb777c6b81aec9bed9bee05e9cb3761af28c Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 09:40:13 -0400 Subject: [PATCH 088/116] 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 0b84297..cdad10d 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,7 +1,7 @@ import random import math import fractions -from funcs import * +from .funcs import * genList = [] From 092088f8b1364ad299c1c966a8144d5933f036ea Mon Sep 17 00:00:00 2001 From: D-T-666 <tabatadzedima20@gamil.com> Date: Mon, 19 Oct 2020 17:43:04 +0400 Subject: [PATCH 089/116] =?UTF-8?q?=F0=9F=A4=96=20made=20makeReadme.py=20f?= =?UTF-8?q?ully=20automated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 136 +++++++------- makeReadme.py | 50 ++++-- .../funcs/matrixMultiplicationFunc.py | 7 +- mathgenerator/funcs/moduloFunc.py | 2 +- mathgenerator/funcs/profitLossPercentFunc.py | 2 + mathgenerator/mathgen.py | 167 ++++++------------ 6 files changed, 177 insertions(+), 187 deletions(-) diff --git a/README.md b/README.md index 6777b5c..6c692b0 100644 --- a/README.md +++ b/README.md @@ -30,66 +30,80 @@ problem, solution = mathgen.genById(0) | Id | Skill | Example problem | Example Solution | Function Name | |------|-----------------------------------|--------------------|-----------------------|--------------------------| -| 0 | Addition | 42+2= | 44 | addition | -| 1 | Subtraction | 32-26= | 6 | subtraction | -| 2 | Multiplication | 77*1= | 77 | multiplication | -| 3 | Division | 66/9= | 7.333333333333333 | division | -| 4 | Binary Complement 1s | 1010000 | 0101111 | binaryComplement1s | -| 5 | Modulo Division | 61%35= | 26 | moduloDivision | -| 6 | Square Root | sqrt(1)= | 1 | squareRoot | -| 7 | Power Rule Differentiation | 5x^5 | 25x^4 | powerRuleDifferentiation | -| 8 | Square | 20^2= | 400 | square | -| 9 | LCM (Least Common Multiple) | LCM of 19 and 5 = | 95 | lcm | -| 10 | GCD (Greatest Common Denominator) | GCD of 10 and 11 = | 1 | gcd | -| 11 | Basic Algebra | 3x + 7 = 8 | 1/3 | basicAlgebra | -| 12 | Logarithm | log2(128) | 7 | log | -| 13 | Easy Division | 306/18 = | 17 | intDivision | -| 14 | Decimal to Binary | Binary of 28= | 11100 | decimalToBinary | -| 15 | Binary to Decimal | 10001101 | 141 | binaryToDecimal | -| 16 | Fraction Division | (4/1)/(6/3) | 2 | fractionDivision | -| 17 | Integer Multiplication with 2x2 Matrix | 5 * [[10, 3], [0, 1]] = | [[50,15],[0,5]] | intMatrix22Multiplication | -| 18 | Area of Triangle | Area of triangle with side lengths: 13 2 14 = | 11.659223816361019 | areaOfTriangle | -| 19 | Triangle exists check | Does triangle with sides 3, 4 and 25 exist? | No | doesTriangleExist | -| 20 | Midpoint of the two point | (4,-11),(17,-5)= | (10.5,-8.0) | midPointOfTwoPoint | +[//]: # list start +| 0 | Addition | 33+23= | 56 | addition | +| 1 | Subtraction | 14-1= | 13 | subtraction | +| 2 | Multiplication | 52*1= | 52 | multiplication | +| 3 | Division | 14/26= | 0.5384615384615384 | division | +| 4 | Binary Complement 1s | 0110111= | 1001000 | binaryComplement1s | +| 5 | Modulo Division | 23%70= | 23 | moduloDivision | +| 6 | Square Root | sqrt(121)= | 11 | squareRoot | +| 7 | Power Rule Differentiation | 3x^2 + 3x^5 + 1x^2 + 6x^4 + 6x^3 | 6x^1 + 15x^4 + 2x^1 + 24x^3 + 18x^2 | powerRuleDifferentiation | +| 8 | Square | 18^2= | 324 | square | +| 9 | LCM (Least Common Multiple) | LCM of 17 and 11 = | 187 | lcm | +| 10 | GCD (Greatest Common Denominator) | GCD of 15 and 12 = | 3 | gcd | +| 11 | Basic Algebra | 2x + 3 = 10 | 7/2 | basicAlgebra | +| 12 | Logarithm | log2(32) | 5 | log | +| 13 | Easy Division | 196/14 = | 14 | intDivision | +| 14 | Decimal to Binary | Binary of 61= | 111101 | decimalToBinary | +| 15 | Binary to Decimal | 1 | 1 | binaryToDecimal | +| 16 | Fraction Division | (2/1)/(10/5) | 1 | fractionDivision | +| 17 | Integer Multiplication with 2x2 Matrix | 16 * [[4, 1], [1, 2]] = | [[64,16],[16,32]] | intMatrix22Multiplication | +| 18 | Area of Triangle | Area of triangle with side lengths: 15 13 11 = | 69.62892717829278 | areaOfTriangle | +| 19 | Triangle exists check | Does triangle with sides 35, 14 and 37 exist? | Yes | doesTriangleExist | +| 20 | Midpoint of the two point | (15,5),(9,10)= | (12.0,7.5) | midPointOfTwoPoint | | 21 | Factoring Quadratic | x^2-12x+35 | (x-7)(x-5) | factoring | -| 22 | Third Angle of Triangle | Third angle of triangle with angles 20 and 62 = | 98 | thirdAngleOfTriangle | -| 23 | Solve a System of Equations in R^2 | 5x - 7y = -84, 4x + 5y = 7 | x = -7, y = 7 | systemOfEquations | -| 24 | Distance between 2 points | Find the distance between (5, -18) and (1, 19) | sqrt(1385) | distance2Point | -| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 15 and 5 = | 15.81 | pythagoreanTheorem | -| 26 | Linear Equations | -6x + -17y = -220 --13x + -19y = -120 | x = -20, y = 20 | linearEquations | -| 27 | Prime Factorisation | Find prime factors of 62 | [2, 31] | primeFactors | -| 28 | Fraction Multiplication | (8/4)*(1/2) | 1 | fractionMultiplication | -| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 19 sides | 161.05 | angleRegularPolygon | -| 30 | Combinations of Objects | Number of combinations from 12 objects picked 1 at a time | 12 | combinations | -| 31 | Factorial | 0! = | 1 | factorial | -| 32 | Surface Area of Cube | Surface area of cube with side = 8m is | 384 m^2 | surfaceAreaCubeGen | -| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 18m, 17m, 1m is | 682 m^2 | surfaceAreaCuboidGen | -| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 31m and radius = 1m is | 201 m^2 | surfaceAreaCylinderGen | -| 35 | Volum of Cube | Volume of cube with side = 9m is | 729 m^3 | volumeCubeGen | -| 36 | Volume of Cuboid | Volume of cuboid with sides = 20m, 1m, 10m is | 200 m^3 | volumeCuboidGen | -| 37 | Volume of cylinder | Volume of cylinder with height = 7m and radius = 7m is | 1077 m^3 | volumeCylinderGen | -| 38 | Surface Area of cone | Surface area of cone with height = 47m and radius = 13m is | 2522 m^2 | surfaceAreaConeGen | -| 39 | Volume of cone | Volume of cone with height = 4m and radius = 4m is | 67 m^3 | volumeConeGen | -| 40 | Common Factors | Common Factors of 20 and 90 = | [1, 2, 5, 10] | commonFactors | -| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = -3/6x + 1 and y = 0/2x + 6 | (-10, 6) | intersectionOfTwoLines | -| 42 | Permutations | Number of Permutations from 11 objects picked 2 at a time = | 110 | permutations | -| 43 | Cross Product of 2 Vectors | [-19, -3, 2] X [-15, -12, 7] = | [3, 103, 183] | vectorCross | -| 44 | Compare Fractions | Which symbol represents the comparison between 8/6 and 3/1? | < | compareFractions | -| 45 | Simple Interest | Simple interest for a principle amount of 9862 dollars, 4% rate of interest and for a time period of 1 years is = | 394.48 | simpleInterest | -| 46 | Multiplication of two matrices | Multiply <table><tr><td>-50</td><td>36</td><td>7</td><td>-26</td><td>-2</td><td>63</td></tr><tr><td>88</td><td>-37</td><td>60</td><td>-19</td><td>61</td><td>-56</td></tr><tr><td>48</td><td>-5</td><td>69</td><td>-87</td><td>-64</td><td>-92</td></tr><tr><td>-84</td><td>-50</td><td>-79</td><td>-19</td><td>86</td><td>-13</td></tr><tr><td>0</td><td>28</td><td>12</td><td>-14</td><td>73</td><td>-49</td></tr><tr><td>94</td><td>-90</td><td>2</td><td>26</td><td>-38</td><td>19</td></tr><tr><td>2</td><td>-11</td><td>79</td><td>-77</td><td>98</td><td>-77</td></tr><tr><td>-87</td><td>70</td><td>72</td><td>-32</td><td>64</td><td>-99</td></tr></table> and <table><tr><td>34</td><td>32</td><td>-6</td><td>-32</td><td>46</td><td>-23</td><td>78</td><td>-81</td><td>-18</td></tr><tr><td>-17</td><td>24</td><td>49</td><td>-62</td><td>-50</td><td>77</td><td>38</td><td>-98</td><td>-64</td></tr><tr><td>-23</td><td>-78</td><td>43</td><td> 5</td><td>-83</td><td>-5</td><td> 4</td><td>-92</td><td>-16</td></tr><tr><td> 46</td><td>-47</td><td>-92</td><td>52</td><td>-25</td><td>-37</td><td>44</td><td>51</td><td>-7</td></tr><tr><td> 20</td><td>26</td><td>70</td><td>37</td><td>96</td><td>-73</td><td>49</td><td>84</td><td>42</td></tr><tr><td>-72</td><td>-15</td><td>-80</td><td>-24</td><td>58</td><td>-47</td><td>-41</td><td>45</td><td>-69</td></tr></table>| <table><tr><td>-8245</td><td>-1057</td><td>-423</td><td>-3535</td><td>-569</td><td>2034</td><td>-6329</td><td>1219</td><td>-5765</td></tr><tr><td>6619</td><td> 567</td><td>10737</td><td>2391</td><td>4001</td><td>-6291</td><td>10147</td><td>-7387</td><td>6383</td></tr><tr><td>1472</td><td>-161</td><td>13318</td><td>-5565<td>-12574</td><td>10381</td><td> 638<td>-23699</td><td>2621</td></tr><tr><td>1593</td><td>5598</td><td>3465</td><td>7899</td><td>13170</td><td>-6487</td><td>-4857</td><td>24642</td><td>10618</td></tr><tr><td>3592</td><td>3027</td><td>12206</td><td>1473</td><td>2120</td><td>-412</td><td>6082</td><td>-635</td><td>4561</td></tr><tr><td>3748</td><td>-1803<td>-11460</td><td>2072</td><td>5462</td><td>-8183</td><td>2423</td><td>11</td><td> 947</td></tr><tr><td>2400</td><td> 960</td><td>22950</td><td>2483</td><td> 952</td><td>-1974</td><td>4625</td><td>-5512</td><td>9372</td></tr><tr><td>1132</td><td>-2067</td><td>22392</td><td>1884<td>-12276</td><td>8196</td><td>1949</td><td>-7148</td><td>5677</td></tr></table> | matrixMultiplication | -| 47 | Cube Root | cuberoot of 771 upto 2 decimal places is: | 9.17 | CubeRoot | -| 48 | Power Rule Integration | 1x^3 + 8x^8 + 10x^10 | (1/3)x^4 + (8/8)x^9 + (10/10)x^11 + c | powerRuleIntegration | -| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 52 , 84, 154 = | 70 | fourthAngleOfQuadrilateral | -| 50 | Quadratic Equation | Zeros of the Quadratic Equation 51x^2+152x+80=0 | [-0.68, -2.3] | quadraticEquationSolve | -| 51 | HCF (Highest Common Factor) | HCF of 11 and 7 = | 1 | hcf | +| 22 | Third Angle of Triangle | Third angle of triangle with angles 37 and 54 = | 89 | thirdAngleOfTriangle | +| 23 | Solve a System of Equations in R^2 | -4x - 8y = 60, -9x + 10y = 51 | x = -9, y = -3 | systemOfEquations | +| 24 | Distance between 2 points | Find the distance between (16, 7) and (19, 14) | sqrt(58) | distance2Point | +| 25 | Pythagorean Theorem | The hypotenuse of a right triangle given the other two lengths 18 and 8 = | 19.70 | pythagoreanTheorem | +| 26 | Linear Equations | -8x + 15y = -109 +6x + -14y = 90 | x = 8, y = -3 | linearEquations | +| 27 | Prime Factorisation | Find prime factors of 130 | [2, 5, 13] | primeFactors | +| 28 | Fraction Multiplication | (8/9)*(3/2) | 4/3 | fractionMultiplication | +| 29 | Angle of a Regular Polygon | Find the angle of a regular polygon with 8 sides | 135.0 | angleRegularPolygon | +| 30 | Combinations of Objects | Number of combinations from 11 objects picked 9 at a time | 55 | combinations | +| 31 | Factorial | 2! = | 2 | factorial | +| 32 | Surface Area of Cube | Surface area of cube with side = 17m is | 1734 m^2 | surfaceAreaCubeGen | +| 33 | Surface Area of Cuboid | Surface area of cuboid with sides = 8m, 4m, 17m is | 472 m^2 | surfaceAreaCuboidGen | +| 34 | Surface Area of Cylinder | Surface area of cylinder with height = 32m and radius = 18m is | 5654 m^2 | surfaceAreaCylinderGen | +| 35 | Volum of Cube | Volume of cube with side = 11m is | 1331 m^3 | volumeCubeGen | +| 36 | Volume of Cuboid | Volume of cuboid with sides = 14m, 19m, 1m is | 266 m^3 | volumeCuboidGen | +| 37 | Volume of cylinder | Volume of cylinder with height = 16m and radius = 18m is | 16286 m^3 | volumeCylinderGen | +| 38 | Surface Area of cone | Surface area of cone with height = 48m and radius = 20m is | 4523 m^2 | surfaceAreaConeGen | +| 39 | Volume of cone | Volume of cone with height = 29m and radius = 6m is | 1093 m^3 | volumeConeGen | +| 40 | Common Factors | Common Factors of 59 and 57 = | [1] | commonFactors | +| 41 | Intersection of Two Lines | Find the point of intersection of the two lines: y = -1/4x - 2 and y = 4/5x + 3 | (-100/21, -17/21) | intersectionOfTwoLines | +| 42 | Permutations | Number of Permutations from 13 objects picked 8 at a time = | 51891840 | permutations | +| 43 | Cross Product of 2 Vectors | [4, -11, 9] X [-8, -19, -5] = | [226, -52, -164] | vectorCross | +| 44 | Compare Fractions | Which symbol represents the comparison between 3/7 and 2/4? | < | compareFractions | +| 45 | Simple Interest | Simple interest for a principle amount of 2398 dollars, 9% rate of interest and for a time period of 5 years is = | 1079.1 | simpleInterest | +| 46 | Multiplication of two matrices | Multiply +<table><tr><td> -83</td><td> 6</td><td> 91</td><td> 4</td><td> -58</td><td> 91</td><td> -91</td><td> 47</td><td> -87</td></tr> <tr><td> 4</td><td> -2</td><td> 24</td><td> 66</td><td> -58</td><td> -58</td><td> -46</td><td> -96</td><td> 52</td></tr> <tr><td> -5</td><td> 5</td><td> -53</td><td> 74</td><td> 31</td><td> -67</td><td> 65</td><td> -31</td><td> 56</td></tr> <tr><td> 77</td><td> -16</td><td> -73</td><td> 50</td><td> 54</td><td> -46</td><td> -11</td><td> 91</td><td> 64</td></tr></table> and + +<table><tr><td> -59</td><td> -20</td><td> -50</td><td> -79</td><td> 75</td><td> 96</td></tr> <tr><td> -56</td><td> 36</td><td> 70</td><td> 47</td><td> -79</td><td> 64</td></tr> <tr><td> 6</td><td> 0</td><td> -8</td><td> -53</td><td> -23</td><td> -83</td></tr> <tr><td> -42</td><td> -84</td><td> 21</td><td> -10</td><td> -42</td><td> 98</td></tr> <tr><td> -9</td><td> -62</td><td> -15</td><td> -68</td><td> -49</td><td> -59</td></tr> <tr><td> -81</td><td> -84</td><td> 3</td><td> 58</td><td> -84</td><td> -59</td></tr> <tr><td> -56</td><td> 33</td><td> 73</td><td> 98</td><td> 51</td><td> -19</td></tr> <tr><td> -81</td><td> -96</td><td> -98</td><td> 61</td><td> -32</td><td> 73</td></tr> <tr><td> -43</td><td> 66</td><td> 83</td><td> 90</td><td> -22</td><td> -94]] | [[ 3120, -15765, -13401, -2683, -17993, -3354] + [ 10584, 13902, 11916, -7446, 4430, 554] + [ -1800, 6587, 14343, 6224, 4525, 4853] + [-12452, -10675, -8693, 427, 2955, 17691]] | matrixMultiplication | +| 47 | Cube Root | cuberoot of 221 upto 2 decimal places is: | 6.05 | CubeRoot | +| 48 | Power Rule Integration | 4x^5 + 2x^5 + 9x^8 + 9x^5 | (4/5)x^6 + (2/5)x^6 + (9/8)x^9 + (9/5)x^6 + c | powerRuleIntegration | +| 49 | Fourth Angle of Quadrilateral | Fourth angle of quadrilateral with angles 27 , 155, 116 = | 62 | fourthAngleOfQuadrilateral | +| 50 | Quadratic Equation | Zeros of the Quadratic Equation 53x^2+200x+78=0 | [-0.44, -3.33] | quadraticEquationSolve | +| 51 | HCF (Highest Common Factor) | HCF of 7 and 4 = | 1 | hcf | | 52 | Probability of a certain sum appearing on faces of dice | If 2 dice are rolled at the same time, the probability of getting a sum of 11 = | 2/36 | diceSumProbability | -| 53 | Exponentiation | 9^9 = | 387420489 | exponentiation | -| 54 | Confidence interval For sample S | The confidence interval for sample [291, 254, 274, 207, 253, 289, 268, 280, 225, 240, 278, 270, 247, 252, 211, 212, 295, 241, 290, 206, 222, 263, 264, 228, 229, 256, 209, 292] with 99% confidence is | (265.560249263099, 237.72546502261523) | confidenceInterval | -| 55 | Comparing surds | Fill in the blanks 16^(1/7) _ 67^(1/6) | < | surdsComparison | -| 56 | Fibonacci Series | The Fibonacci Series of the first 11 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | fibonacciSeries | -| 57 | Trigonometric Values | What is cos(60)? | 1/2 | basicTrigonometry | -| 58 | Sum of Angles of Polygon | Sum of angles of polygon with 5 sides = | 540 | sumOfAnglesOfPolygon | -| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[38, 29, 43, 25, 7, 10, 13, 14, 43, 44, 30, 42, 48, 48, 42] | The Mean is 31.733333333333334 , Standard Deviation is 199.26222222222222, Variance is 14.116027140177303 | dataSummary | -| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surfaceAreaSphereGen | -| 60 | Volume of Sphere | Volume of sphere with radius 84 m = | 2482712.7095377133 m^3 | volumeSphere | \ No newline at end of file +| 53 | Exponentiation | 9^10 = | 3486784401 | exponentiation | +| 54 | Confidence interval For sample S | The confidence interval for sample [266, 201, 278, 209, 229, 275, 216, 234, 219, 276, 282, 281, 208, 247, 265, 273, 286, 202, 231, 207, 251, 203, 259, 288, 291, 260, 210, 263, 222] with 99% confidence is | (260.5668079141175, 231.29526105139982) | confidenceInterval | +| 55 | Comparing surds | Fill in the blanks 15^(1/9) _ 55^(1/1) | < | surdsComparison | +| 56 | Fibonacci Series | The Fibonacci Series of the first 10 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] | fibonacciSeries | +| 57 | Trigonometric Values | What is tan(30)? | 1/√3 | basicTrigonometry | +| 58 | Sum of Angles of Polygon | Sum of angles of polygon with 3 sides = | 180 | sumOfAnglesOfPolygon | +| 59 | Mean,Standard Deviation,Variance | Find the mean,standard deviation and variance for the data[36, 13, 31, 23, 38, 34, 24, 20, 41, 14, 19, 31, 11, 49, 49] | The Mean is 28.866666666666667 , Standard Deviation is 143.5822222222222, Variance is 11.982579948501167 | dataSummary | +| 59 | Surface Area of Sphere | Surface area of Sphere with radius = 11m is | 1520.5308443374597 m^2 | surfaceAreaSphereGen | +| 60 | Volume of Sphere | Volume of sphere with radius 73 m = | 1629510.5990953872 m^3 | volumeSphere | +| 61 | nth Fibonacci number | What is the 68th Fibonacci number? | 72723460248141 | nthFibonacciNumberGen | +| 62 | Profit or Loss Percent | Profit percent when CP = 825 and SP = 972 is: | 17.81818181818182 | profitLossPercent | +| 63 | Binary to Hexidecimal | 100000 | 0x20 | binaryToHex | +| 64 | Multiplication of 2 complex numbers | (3+14j) * (-3+16j) = | (-233+6j) | complexNumMultiply | +| 65 | Geometric Progression | For the given GP [4, 16, 64, 256, 1024, 4096] ,Find the value of a,common ratio,8th term value, sum upto 7th term | The value of a is 4, common ratio is 4 , 8th term is 65536 , sum upto 7th term is 21844.0 | geometricprogression | +| 66 | Geometric Mean of N Numbers | Geometric mean of 3 numbers 81 , 35 and 99 = | (81*35*99)^(1/3) = 65.47307713912309 | geometricMean | +| 67 | Harmonic Mean of N Numbers | Harmonic mean of 2 numbers 99 and 25 = | 2/((1/99) + (1/25)) = 39.91935483870967 | harmonicMean | diff --git a/makeReadme.py b/makeReadme.py index 64f7989..796dc00 100644 --- a/makeReadme.py +++ b/makeReadme.py @@ -1,25 +1,51 @@ # To use, paste at bottom of mathgen.py code, change line variable and remove all table rows in README.md except for the top 2 and run mathgen.py +# NOTE: not anymore. but still leaving this comment in. +from mathgenerator.mathgen import * wList = getGenList() +lines = [] +with open('mathgenerator/mathgen.py', 'r') as f: + lines=f.readlines() + allRows = [] -f = open('mathgen.py') -lines = f.readlines() -line = 720 # This has to be changed depending on which line the first generator appears on +line = lines.index('# Funcs_start - DO NOT REMOVE!\n')+1 # get the first line of the functions in mathgen.py for item in wList: myGen = item[2] - prob, sol = myGen() + # NOTE: renamed 'sol' to 'solu' to make it look nicer + prob, solu = myGen() prob = str(prob).rstrip("\n") - sol = str(sol).rstrip("\n") + solu = str(solu).rstrip("\n") + # edge case for matrixMultiplication + if item[0] == 46: + print(prob) + + prob = prob.replace("[[", "<table><tr><td>") + prob = prob.replace("[", "<tr><td>") + prob = prob.replace(", ", "</td><td>") + prob = prob.replace("]]\n", "</td></tr></table>") + prob = prob.replace("]\n", "</td></tr>") + print(prob) + instName = lines[line] - def_name = instName[:instName.find('=')].strip() - row = [myGen.id, myGen.title, prob, sol, def_name] + func_name = instName[:instName.find('=')].strip() # NOTE: renamed 'def_name' to 'func_name' because it suits it more + row = [myGen.id, myGen.title, prob, solu, func_name] + # print(item[1], func_name) line += 1 + if line > len(lines): + break allRows.append(row) -g = open('../README.md', "a") -for row in allRows: - tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" - g.write(tableLine) -g.close() +with open('README.md', "r") as g: + lines = g.readlines() + + line = lines.index('[//]: # list start\n') + lines = lines[:line+1] + + for row in allRows: + tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" + lines.append(tableLine) + +with open('README.md', "w") as g: + g.writelines(lines) print("New README.md table generated") diff --git a/mathgenerator/funcs/matrixMultiplicationFunc.py b/mathgenerator/funcs/matrixMultiplicationFunc.py index de69218..eeaa265 100644 --- a/mathgenerator/funcs/matrixMultiplicationFunc.py +++ b/mathgenerator/funcs/matrixMultiplicationFunc.py @@ -40,11 +40,12 @@ def matrixMultiplicationFuncHelper(inp): m = len(inp) n = len(inp[0]) - string = "" + string = "[[" for i in range(m): for j in range(n): string += f"{inp[i][j]: 6d}" - string += " " - string += "\n" + string += ", "if j < n-1 else "" + string += "]\n [" if i < m-1 else "" + string += "]]" return string \ No newline at end of file diff --git a/mathgenerator/funcs/moduloFunc.py b/mathgenerator/funcs/moduloFunc.py index 5f8d2af..71f1421 100644 --- a/mathgenerator/funcs/moduloFunc.py +++ b/mathgenerator/funcs/moduloFunc.py @@ -4,7 +4,7 @@ from .__init__ import * def moduloFunc(maxRes=99, maxModulo=99): a = random.randint(0, maxModulo) b = random.randint(0, min(maxRes, maxModulo)) - c = a % b + c = a % b if b != 0 else 0 problem = str(a) + "%" + str(b) + "=" solution = str(c) diff --git a/mathgenerator/funcs/profitLossPercentFunc.py b/mathgenerator/funcs/profitLossPercentFunc.py index 533c294..05a3653 100644 --- a/mathgenerator/funcs/profitLossPercentFunc.py +++ b/mathgenerator/funcs/profitLossPercentFunc.py @@ -12,3 +12,5 @@ def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): percent = diff/cP * 100 problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " solution = percent + + return problem, solution \ No newline at end of file diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 0e813a6..3265a0f 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -33,126 +33,73 @@ def getGenList(): # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) +# Funcs_start - DO NOT REMOVE! addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) -multiplication = Generator( - "Multiplication", 2, "a*b=", "c", multiplicationFunc) +multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) division = Generator("Division", 3, "a/b=", "c", divisionFunc) -binaryComplement1s = Generator( - "Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) +binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) -powerRuleDifferentiation = Generator( - "Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) +powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) square = Generator("Square", 8, "a^2", "b", squareFunc) -lcm = Generator("LCM (Least Common Multiple)", 9, - "LCM of a and b = ", "c", lcmFunc) -gcd = Generator("GCD (Greatest Common Denominator)", - 10, "GCD of a and b = ", "c", gcdFunc) -basicAlgebra = Generator( - "Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) +lcm = Generator("LCM (Least Common Multiple)", 9,"LCM of a and b = ", "c", lcmFunc) +gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", "c", gcdFunc) +basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary", 14, - "Binary of a=", "b", DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal", 15, - "Decimal of a=", "b", BinaryToDecimalFunc) -fractionDivision = Generator( - "Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) -intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", - 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) -areaOfTriangle = Generator( - "Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) -doesTriangleExist = Generator("Triangle exists check", 19, - "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) -midPointOfTwoPoint = Generator("Midpoint of the two point", 20, - "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) -factoring = Generator("Factoring Quadratic", 21, - "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) -thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, - "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, - "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) -distance2Point = Generator("Distance between 2 points", 24, - "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) -pythagoreanTheorem = Generator( - "Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -# This has multiple variables whereas #23 has only x and y -linearEquations = Generator( - "Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) -primeFactors = Generator("Prime Factorisation", 27, - "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) -fractionMultiplication = Generator( - "Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, - "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects", 30, - "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) +decimalToBinary = Generator("Decimal to Binary", 14,"Binary of a=", "b", DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15,"Decimal of a=", "b", BinaryToDecimalFunc) +fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) +intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix",17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) +areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) +doesTriangleExist = Generator("Triangle exists check", 19,"Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) +midPointOfTwoPoint = Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) +factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) +distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) +pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) +linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc)# This has multiple variables whereas #23 has only x and y +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) +fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) +angleRegularPolygon = Generator("Angle of a Regular Polygon", 29,"Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) +combinations = Generator("Combinations of Objects", 30, "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator( - "Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) -surfaceAreaCuboidGen = Generator( - "Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) -surfaceAreaCylinderGen = Generator( - "Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator( - "Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) -volumeCuboidGen = Generator( - "Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) -volumeCylinderGen = Generator( - "Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) -surfaceAreaConeGen = Generator( - "Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) -volumeConeGen = Generator( - "Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) -commonFactors = Generator( - "Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) -intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, - "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -permutations = Generator( - "Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) -vectorCross = Generator("Cross Product of 2 Vectors", - 43, "a X b = ", "c", vectorCrossFunc) -compareFractions = Generator( - "Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) -simpleInterest = Generator( - "Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices", - 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator( - "Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) -powerRuleIntegration = Generator( - "Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, - "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) -quadraticEquationSolve = Generator( - "Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) -hcf = Generator("HCF (Highest Common Factor)", 51, - "HCF of a and b = ", "c", hcfFunc) -diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice", - 52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) -exponentiation = Generator( - "Exponentiation", 53, "a^b = ", "c", exponentiationFunc) -confidenceInterval = Generator("Confidence interval For sample S", - 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) -surdsComparison = Generator( - "Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers", - "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) -basicTrigonometry = Generator( - "Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, - "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) -dataSummary = Generator("Mean,Standard Deviation,Variance", - 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator( - "Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) -volumeSphere = Generator("Volume of Sphere", 60, - "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) +surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) +volumeCuboidGen = Generator( "Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) +volumeCylinderGen = Generator( "Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) +surfaceAreaConeGen = Generator("Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) +volumeConeGen = Generator("Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) +commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) +intersectionOfTwoLines = Generator("Intersection of Two Lines", 41,"Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +permutations = Generator("Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) +vectorCross = Generator("Cross Product of 2 Vectors", 43, "a X b = ", "c", vectorCrossFunc) +compareFractions = Generator( "Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) +simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) +matrixMultiplication = Generator("Multiplication of two matrices",46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) +CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) +powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49,"Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) +quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) +hcf = Generator("HCF (Highest Common Factor)", 51,"HCF of a and b = ", "c", hcfFunc) +diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice",52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) +exponentiation = Generator("Exponentiation", 53, "a^b = ", "c", exponentiationFunc) +confidenceInterval = Generator("Confidence interval For sample S", 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) +surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) +fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) +basicTrigonometry = Generator("Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +dataSummary = Generator("Mean,Standard Deviation,Variance",59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) +surfaceAreaSphereGen = Generator("Surface Area of Sphere", 59, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) +volumeSphere = Generator("Volume of Sphere", 60,"Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) nthFibonacciNumberGen = Generator("nth Fibonacci number", 61, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) profitLossPercent = Generator("Profit or Loss Percent", 62, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) binaryToHex = Generator("Binary to Hexidecimal", 63, "Hexidecimal of a=", "b", binaryToHexFunc) complexNumMultiply = Generator("Multiplication of 2 complex numbers", 64, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) -geometricprogression=Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) -geometricMean=Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) -harmonicMean=Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) +geometricprogression = Generator("Geometric Progression", 65, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) +geometricMean = Generator("Geometric Mean of N Numbers",66,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) +harmonicMean = Generator("Harmonic Mean of N Numbers",67,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) From b3a80ee8cef0ee86b02ee1a8b95e7ecb70d07178 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 09:49:32 -0400 Subject: [PATCH 090/116] localized sympy --- mathgenerator/funcs/matrixInversion.py | 3 ++- mathgenerator/mathgen.py | 1 - test.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mathgenerator/funcs/matrixInversion.py b/mathgenerator/funcs/matrixInversion.py index 7de9f15..822cb83 100644 --- a/mathgenerator/funcs/matrixInversion.py +++ b/mathgenerator/funcs/matrixInversion.py @@ -1,4 +1,5 @@ from .__init__ import * +import sympy def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerElementsInInvertedMatrix=False): if OnlyIntegerElementsInInvertedMatrix is True: @@ -65,4 +66,4 @@ def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerEle Mat = sympy.Matrix(Mat) problem = 'Inverse of Matrix ' + str(Mat) + ' is:' solution = str(sympy.Matrix.inv(Mat)) - return problem, solution \ No newline at end of file + return problem, solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 4a0810c..01456be 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -1,7 +1,6 @@ import random import math import fractions -import sympy from .funcs import * genList = [] diff --git a/test.py b/test.py index 925ced3..e5bb2c1 100644 --- a/test.py +++ b/test.py @@ -3,3 +3,4 @@ from mathgenerator import mathgen #test your generators here print(mathgen.addition()) +print(mathgen.genById(74)) From ac1581e9410b9a92dd2fffd17167377d2a302134 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 10:01:43 -0400 Subject: [PATCH 091/116] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 6c692b0..f2d81dc 100644 --- a/README.md +++ b/README.md @@ -78,10 +78,7 @@ problem, solution = mathgen.genById(0) | 43 | Cross Product of 2 Vectors | [4, -11, 9] X [-8, -19, -5] = | [226, -52, -164] | vectorCross | | 44 | Compare Fractions | Which symbol represents the comparison between 3/7 and 2/4? | < | compareFractions | | 45 | Simple Interest | Simple interest for a principle amount of 2398 dollars, 9% rate of interest and for a time period of 5 years is = | 1079.1 | simpleInterest | -| 46 | Multiplication of two matrices | Multiply -<table><tr><td> -83</td><td> 6</td><td> 91</td><td> 4</td><td> -58</td><td> 91</td><td> -91</td><td> 47</td><td> -87</td></tr> <tr><td> 4</td><td> -2</td><td> 24</td><td> 66</td><td> -58</td><td> -58</td><td> -46</td><td> -96</td><td> 52</td></tr> <tr><td> -5</td><td> 5</td><td> -53</td><td> 74</td><td> 31</td><td> -67</td><td> 65</td><td> -31</td><td> 56</td></tr> <tr><td> 77</td><td> -16</td><td> -73</td><td> 50</td><td> 54</td><td> -46</td><td> -11</td><td> 91</td><td> 64</td></tr></table> and - -<table><tr><td> -59</td><td> -20</td><td> -50</td><td> -79</td><td> 75</td><td> 96</td></tr> <tr><td> -56</td><td> 36</td><td> 70</td><td> 47</td><td> -79</td><td> 64</td></tr> <tr><td> 6</td><td> 0</td><td> -8</td><td> -53</td><td> -23</td><td> -83</td></tr> <tr><td> -42</td><td> -84</td><td> 21</td><td> -10</td><td> -42</td><td> 98</td></tr> <tr><td> -9</td><td> -62</td><td> -15</td><td> -68</td><td> -49</td><td> -59</td></tr> <tr><td> -81</td><td> -84</td><td> 3</td><td> 58</td><td> -84</td><td> -59</td></tr> <tr><td> -56</td><td> 33</td><td> 73</td><td> 98</td><td> 51</td><td> -19</td></tr> <tr><td> -81</td><td> -96</td><td> -98</td><td> 61</td><td> -32</td><td> 73</td></tr> <tr><td> -43</td><td> 66</td><td> 83</td><td> 90</td><td> -22</td><td> -94]] | [[ 3120, -15765, -13401, -2683, -17993, -3354] +| 46 | Multiplication of two matrices | Multiply <table><tr><td>-50</td><td>36</td><td>7</td><td>-26</td><td>-2</td><td>63</td></tr><tr><td>88</td><td>-37</td><td>60</td><td>-19</td><td>61</td><td>-56</td></tr><tr><td>48</td><td>-5</td><td>69</td><td>-87</td><td>-64</td><td>-92</td></tr><tr><td>-84</td><td>-50</td><td>-79</td><td>-19</td><td>86</td><td>-13</td></tr><tr><td>0</td><td>28</td><td>12</td><td>-14</td><td>73</td><td>-49</td></tr><tr><td>94</td><td>-90</td><td>2</td><td>26</td><td>-38</td><td>19</td></tr><tr><td>2</td><td>-11</td><td>79</td><td>-77</td><td>98</td><td>-77</td></tr><tr><td>-87</td><td>70</td><td>72</td><td>-32</td><td>64</td><td>-99</td></tr></table> and <table><tr><td>34</td><td>32</td><td>-6</td><td>-32</td><td>46</td><td>-23</td><td>78</td><td>-81</td><td>-18</td></tr><tr><td>-17</td><td>24</td><td>49</td><td>-62</td><td>-50</td><td>77</td><td>38</td><td>-98</td><td>-64</td></tr><tr><td>-23</td><td>-78</td><td>43</td><td> 5</td><td>-83</td><td>-5</td><td> 4</td><td>-92</td><td>-16</td></tr><tr><td> 46</td><td>-47</td><td>-92</td><td>52</td><td>-25</td><td>-37</td><td>44</td><td>51</td><td>-7</td></tr><tr><td> 20</td><td>26</td><td>70</td><td>37</td><td>96</td><td>-73</td><td>49</td><td>84</td><td>42</td></tr><tr><td>-72</td><td>-15</td><td>-80</td><td>-24</td><td>58</td><td>-47</td><td>-41</td><td>45</td><td>-69</td></tr></table>| <table><tr><td>-8245</td><td>-1057</td><td>-423</td><td>-3535</td><td>-569</td><td>2034</td><td>-6329</td><td>1219</td><td>-5765</td></tr><tr><td>6619</td><td> 567</td><td>10737</td><td>2391</td><td>4001</td><td>-6291</td><td>10147</td><td>-7387</td><td>6383</td></tr><tr><td>1472</td><td>-161</td><td>13318</td><td>-5565<td>-12574</td><td>10381</td><td> 638<td>-23699</td><td>2621</td></tr><tr><td>1593</td><td>5598</td><td>3465</td><td>7899</td><td>13170</td><td>-6487</td><td>-4857</td><td>24642</td><td>10618</td></tr><tr><td>3592</td><td>3027</td><td>12206</td><td>1473</td><td>2120</td><td>-412</td><td>6082</td><td>-635</td><td>4561</td></tr><tr><td>3748</td><td>-1803<td>-11460</td><td>2072</td><td>5462</td><td>-8183</td><td>2423</td><td>11</td><td> 947</td></tr><tr><td>2400</td><td> 960</td><td>22950</td><td>2483</td><td> 952</td><td>-1974</td><td>4625</td><td>-5512</td><td>9372</td></tr><tr><td>1132</td><td>-2067</td><td>22392</td><td>1884<td>-12276</td><td>8196</td><td>1949</td><td>-7148</td><td>5677</td></tr></table> | matrixMultiplication | [ 10584, 13902, 11916, -7446, 4430, 554] [ -1800, 6587, 14343, 6224, 4525, 4853] [-12452, -10675, -8693, 427, 2955, 17691]] | matrixMultiplication | From 76c8d0e5609ba471e49f6c205b247494733157e2 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 19:33:00 +0530 Subject: [PATCH 092/116] Add files via upload --- mathgenerator/funcs/BinaryToDecimalFunc.py | 12 +++ mathgenerator/funcs/DecimalToBinaryFunc.py | 11 +++ mathgenerator/funcs/DiceSumProbFunc.py | 25 ++++++ mathgenerator/funcs/MidPointOfTwoPointFunc.py | 12 +++ mathgenerator/funcs/__init__.py | 79 +++++++++++++++++++ mathgenerator/funcs/absoluteDifferenceFunc.py | 10 +++ mathgenerator/funcs/additionFunc.py | 10 +++ mathgenerator/funcs/angleBtwVectorsFunc.py | 16 ++++ mathgenerator/funcs/areaOfTriangleFunc.py | 14 ++++ mathgenerator/funcs/basicAlgebraFunc.py | 25 ++++++ mathgenerator/funcs/basicTrigonometryFunc.py | 14 ++++ mathgenerator/funcs/binary2sComplement.py | 26 ++++++ mathgenerator/funcs/binaryComplement1sFunc.py | 15 ++++ mathgenerator/funcs/binaryToHexFunc.py | 11 +++ mathgenerator/funcs/combinationsFunc.py | 19 +++++ mathgenerator/funcs/commonFactorsFunc.py | 24 ++++++ mathgenerator/funcs/compareFractionsFunc.py | 26 ++++++ mathgenerator/funcs/confidenceIntervalFunc.py | 30 +++++++ mathgenerator/funcs/cubeRootFunc.py | 10 +++ mathgenerator/funcs/dataSummaryFunc.py | 26 ++++++ mathgenerator/funcs/distanceTwoPointsFunc.py | 14 ++++ mathgenerator/funcs/divideFractionsFunc.py | 32 ++++++++ mathgenerator/funcs/divisionFunc.py | 11 +++ mathgenerator/funcs/divisionToIntFunc.py | 13 +++ mathgenerator/funcs/euclidianNormFunc.py | 7 ++ mathgenerator/funcs/exponentiationFunc.py | 10 +++ mathgenerator/funcs/factorialFunc.py | 15 ++++ mathgenerator/funcs/factoringFunc.py | 29 +++++++ mathgenerator/funcs/fibonacciSeriesFunc.py | 21 +++++ .../funcs/fourthAngleOfQuadriFunc.py | 14 ++++ mathgenerator/funcs/gcdFunc.py | 12 +++ mathgenerator/funcs/geomProgrFunc.py | 15 ++++ mathgenerator/funcs/geometricMeanFunc.py | 27 +++++++ mathgenerator/funcs/harmonicMeanFunc.py | 28 +++++++ mathgenerator/funcs/hcfFunc.py | 11 +++ .../funcs/intersectionOfTwoLinesFunc.py | 62 +++++++++++++++ mathgenerator/funcs/isTriangleValidFunc.py | 19 +++++ mathgenerator/funcs/lcmFunc.py | 17 ++++ mathgenerator/funcs/linearEquationsFunc.py | 25 ++++++ mathgenerator/funcs/logFunc.py | 12 +++ mathgenerator/funcs/matrixInversion.py | 69 ++++++++++++++++ .../funcs/matrixMultiplicationFunc.py | 51 ++++++++++++ mathgenerator/funcs/moduloFunc.py | 11 +++ mathgenerator/funcs/multiplicationFunc.py | 11 +++ .../funcs/multiplyComplexNumbersFunc.py | 9 +++ mathgenerator/funcs/multiplyFractionsFunc.py | 32 ++++++++ mathgenerator/funcs/multiplyIntToMatrix22.py | 13 +++ mathgenerator/funcs/nthFibonacciNumberFunc.py | 10 +++ mathgenerator/funcs/permutationFunc.py | 10 +++ .../funcs/powerRuleDifferentiationFunc.py | 18 +++++ .../funcs/powerRuleIntegrationFunc.py | 20 +++++ mathgenerator/funcs/primeFactorsFunc.py | 22 ++++++ mathgenerator/funcs/profitLossPercentFunc.py | 16 ++++ mathgenerator/funcs/pythagoreanTheoremFunc.py | 11 +++ mathgenerator/funcs/quadraticEquation.py | 12 +++ .../funcs/regularPolygonAngleFunc.py | 10 +++ mathgenerator/funcs/simpleInterestFunc.py | 12 +++ mathgenerator/funcs/squareFunc.py | 10 +++ mathgenerator/funcs/squareRootFunc.py | 10 +++ mathgenerator/funcs/subtractionFunc.py | 11 +++ .../funcs/sumOfAnglesOfPolygonFunc.py | 10 +++ mathgenerator/funcs/surdsComparisonFunc.py | 17 ++++ mathgenerator/funcs/surfaceAreaCone.py | 13 +++ mathgenerator/funcs/surfaceAreaCube.py | 9 +++ mathgenerator/funcs/surfaceAreaCuboid.py | 12 +++ mathgenerator/funcs/surfaceAreaCylinder.py | 11 +++ mathgenerator/funcs/surfaceAreaSphere.py | 10 +++ mathgenerator/funcs/systemOfEquationsFunc.py | 45 +++++++++++ .../funcs/thirdAngleOfTriangleFunc.py | 11 +++ mathgenerator/funcs/vectorCrossFunc.py | 13 +++ mathgenerator/funcs/vectorDotFunc.py | 11 +++ mathgenerator/funcs/volumeCone.py | 11 +++ mathgenerator/funcs/volumeCube.py | 10 +++ mathgenerator/funcs/volumeCuboid.py | 12 +++ mathgenerator/funcs/volumeCylinder.py | 11 +++ mathgenerator/funcs/volumeSphereFunc.py | 10 +++ 76 files changed, 1393 insertions(+) create mode 100644 mathgenerator/funcs/BinaryToDecimalFunc.py create mode 100644 mathgenerator/funcs/DecimalToBinaryFunc.py create mode 100644 mathgenerator/funcs/DiceSumProbFunc.py create mode 100644 mathgenerator/funcs/MidPointOfTwoPointFunc.py create mode 100644 mathgenerator/funcs/__init__.py create mode 100644 mathgenerator/funcs/absoluteDifferenceFunc.py create mode 100644 mathgenerator/funcs/additionFunc.py create mode 100644 mathgenerator/funcs/angleBtwVectorsFunc.py create mode 100644 mathgenerator/funcs/areaOfTriangleFunc.py create mode 100644 mathgenerator/funcs/basicAlgebraFunc.py create mode 100644 mathgenerator/funcs/basicTrigonometryFunc.py create mode 100644 mathgenerator/funcs/binary2sComplement.py create mode 100644 mathgenerator/funcs/binaryComplement1sFunc.py create mode 100644 mathgenerator/funcs/binaryToHexFunc.py create mode 100644 mathgenerator/funcs/combinationsFunc.py create mode 100644 mathgenerator/funcs/commonFactorsFunc.py create mode 100644 mathgenerator/funcs/compareFractionsFunc.py create mode 100644 mathgenerator/funcs/confidenceIntervalFunc.py create mode 100644 mathgenerator/funcs/cubeRootFunc.py create mode 100644 mathgenerator/funcs/dataSummaryFunc.py create mode 100644 mathgenerator/funcs/distanceTwoPointsFunc.py create mode 100644 mathgenerator/funcs/divideFractionsFunc.py create mode 100644 mathgenerator/funcs/divisionFunc.py create mode 100644 mathgenerator/funcs/divisionToIntFunc.py create mode 100644 mathgenerator/funcs/euclidianNormFunc.py create mode 100644 mathgenerator/funcs/exponentiationFunc.py create mode 100644 mathgenerator/funcs/factorialFunc.py create mode 100644 mathgenerator/funcs/factoringFunc.py create mode 100644 mathgenerator/funcs/fibonacciSeriesFunc.py create mode 100644 mathgenerator/funcs/fourthAngleOfQuadriFunc.py create mode 100644 mathgenerator/funcs/gcdFunc.py create mode 100644 mathgenerator/funcs/geomProgrFunc.py create mode 100644 mathgenerator/funcs/geometricMeanFunc.py create mode 100644 mathgenerator/funcs/harmonicMeanFunc.py create mode 100644 mathgenerator/funcs/hcfFunc.py create mode 100644 mathgenerator/funcs/intersectionOfTwoLinesFunc.py create mode 100644 mathgenerator/funcs/isTriangleValidFunc.py create mode 100644 mathgenerator/funcs/lcmFunc.py create mode 100644 mathgenerator/funcs/linearEquationsFunc.py create mode 100644 mathgenerator/funcs/logFunc.py create mode 100644 mathgenerator/funcs/matrixInversion.py create mode 100644 mathgenerator/funcs/matrixMultiplicationFunc.py create mode 100644 mathgenerator/funcs/moduloFunc.py create mode 100644 mathgenerator/funcs/multiplicationFunc.py create mode 100644 mathgenerator/funcs/multiplyComplexNumbersFunc.py create mode 100644 mathgenerator/funcs/multiplyFractionsFunc.py create mode 100644 mathgenerator/funcs/multiplyIntToMatrix22.py create mode 100644 mathgenerator/funcs/nthFibonacciNumberFunc.py create mode 100644 mathgenerator/funcs/permutationFunc.py create mode 100644 mathgenerator/funcs/powerRuleDifferentiationFunc.py create mode 100644 mathgenerator/funcs/powerRuleIntegrationFunc.py create mode 100644 mathgenerator/funcs/primeFactorsFunc.py create mode 100644 mathgenerator/funcs/profitLossPercentFunc.py create mode 100644 mathgenerator/funcs/pythagoreanTheoremFunc.py create mode 100644 mathgenerator/funcs/quadraticEquation.py create mode 100644 mathgenerator/funcs/regularPolygonAngleFunc.py create mode 100644 mathgenerator/funcs/simpleInterestFunc.py create mode 100644 mathgenerator/funcs/squareFunc.py create mode 100644 mathgenerator/funcs/squareRootFunc.py create mode 100644 mathgenerator/funcs/subtractionFunc.py create mode 100644 mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py create mode 100644 mathgenerator/funcs/surdsComparisonFunc.py create mode 100644 mathgenerator/funcs/surfaceAreaCone.py create mode 100644 mathgenerator/funcs/surfaceAreaCube.py create mode 100644 mathgenerator/funcs/surfaceAreaCuboid.py create mode 100644 mathgenerator/funcs/surfaceAreaCylinder.py create mode 100644 mathgenerator/funcs/surfaceAreaSphere.py create mode 100644 mathgenerator/funcs/systemOfEquationsFunc.py create mode 100644 mathgenerator/funcs/thirdAngleOfTriangleFunc.py create mode 100644 mathgenerator/funcs/vectorCrossFunc.py create mode 100644 mathgenerator/funcs/vectorDotFunc.py create mode 100644 mathgenerator/funcs/volumeCone.py create mode 100644 mathgenerator/funcs/volumeCube.py create mode 100644 mathgenerator/funcs/volumeCuboid.py create mode 100644 mathgenerator/funcs/volumeCylinder.py create mode 100644 mathgenerator/funcs/volumeSphereFunc.py diff --git a/mathgenerator/funcs/BinaryToDecimalFunc.py b/mathgenerator/funcs/BinaryToDecimalFunc.py new file mode 100644 index 0000000..27b165d --- /dev/null +++ b/mathgenerator/funcs/BinaryToDecimalFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def BinaryToDecimalFunc(max_dig=10): + problem = '' + + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = int(problem, 2) + return problem, solution diff --git a/mathgenerator/funcs/DecimalToBinaryFunc.py b/mathgenerator/funcs/DecimalToBinaryFunc.py new file mode 100644 index 0000000..8df2d8a --- /dev/null +++ b/mathgenerator/funcs/DecimalToBinaryFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def DecimalToBinaryFunc(max_dec=99): + a = random.randint(1, max_dec) + b = bin(a).replace("0b", "") + + problem = "Binary of " + str(a) + "=" + solution = str(b) + + return problem, solution diff --git a/mathgenerator/funcs/DiceSumProbFunc.py b/mathgenerator/funcs/DiceSumProbFunc.py new file mode 100644 index 0000000..2180ee4 --- /dev/null +++ b/mathgenerator/funcs/DiceSumProbFunc.py @@ -0,0 +1,25 @@ +from .__init__ import * + + +def DiceSumProbFunc(maxDice=3): + a = random.randint(1,maxDice) + b = random.randint(a,6*a) + + count=0 + for i in [1,2,3,4,5,6]: + if a==1: + if i==b: + count=count+1 + elif a==2: + for j in [1,2,3,4,5,6]: + if i+j==b: + count=count+1 + elif a==3: + for j in [1,2,3,4,5,6]: + for k in [1,2,3,4,5,6]: + if i+j+k==b: + count=count+1 + + problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) + solution="{}/{}".format(count, 6**a) + return problem, solution diff --git a/mathgenerator/funcs/MidPointOfTwoPointFunc.py b/mathgenerator/funcs/MidPointOfTwoPointFunc.py new file mode 100644 index 0000000..3c9202a --- /dev/null +++ b/mathgenerator/funcs/MidPointOfTwoPointFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def MidPointOfTwoPointFunc(maxValue=20): + x1 = random.randint(-20, maxValue) + y1 = random.randint(-20, maxValue) + x2 = random.randint(-20, maxValue) + y2 = random.randint(-20, maxValue) + + problem = f"({x1},{y1}),({x2},{y2})=" + solution = f"({(x1+x2)/2},{(y1+y2)/2})" + return problem, solution diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py new file mode 100644 index 0000000..f054a11 --- /dev/null +++ b/mathgenerator/funcs/__init__.py @@ -0,0 +1,79 @@ +import random +import math +import fractions + +from .additionFunc import * +from .subtractionFunc import * +from .multiplicationFunc import * +from .divisionFunc import * +from .binaryComplement1sFunc import * +from .moduloFunc import * +from .squareRootFunc import * +from .powerRuleDifferentiationFunc import * +from .squareFunc import * +from .gcdFunc import * +from .lcmFunc import * +from .basicAlgebraFunc import * +from .logFunc import * +from .divisionToIntFunc import * +from .DecimalToBinaryFunc import * +from .BinaryToDecimalFunc import * +from .divideFractionsFunc import * +from .multiplyIntToMatrix22 import * +from .areaOfTriangleFunc import * +from .isTriangleValidFunc import * +from .MidPointOfTwoPointFunc import * +from .factoringFunc import * +from .thirdAngleOfTriangleFunc import * +from .systemOfEquationsFunc import * +from .distanceTwoPointsFunc import * +from .pythagoreanTheoremFunc import * +from .linearEquationsFunc import * +from .primeFactorsFunc import * +from .multiplyFractionsFunc import * +from .regularPolygonAngleFunc import * +from .combinationsFunc import * +from .factorialFunc import * +from .surfaceAreaCube import * +from .volumeCube import * +from .surfaceAreaCuboid import * +from .volumeCuboid import * +from .surfaceAreaCylinder import * +from .volumeCylinder import * +from .surfaceAreaCone import * +from .volumeCone import * +from .commonFactorsFunc import * +from .intersectionOfTwoLinesFunc import * +from .permutationFunc import * +from .vectorCrossFunc import * +from .compareFractionsFunc import * +from .simpleInterestFunc import * +from .matrixMultiplicationFunc import * +from .cubeRootFunc import * +from .powerRuleIntegrationFunc import * +from .fourthAngleOfQuadriFunc import * +from .quadraticEquation import * +from .hcfFunc import * +from .DiceSumProbFunc import * +from .exponentiationFunc import * +from .confidenceIntervalFunc import * +from .surdsComparisonFunc import * +from .fibonacciSeriesFunc import * +from .basicTrigonometryFunc import * +from .sumOfAnglesOfPolygonFunc import * +from .dataSummaryFunc import * +from .surfaceAreaSphere import * +from .volumeSphereFunc import * +from .nthFibonacciNumberFunc import * +from .profitLossPercentFunc import * +from .binaryToHexFunc import * +from .multiplyComplexNumbersFunc import * +from .geomProgrFunc import * +from .geometricMeanFunc import * +from .harmonicMeanFunc import * +from .euclidianNormFunc import * +from .angleBtwVectorsFunc import * +from .absoluteDifferenceFunc import * +from .vectorDotFunc import * +from .binary2sComplement import * +from .matrixInversion import * diff --git a/mathgenerator/funcs/absoluteDifferenceFunc.py b/mathgenerator/funcs/absoluteDifferenceFunc.py new file mode 100644 index 0000000..d578d19 --- /dev/null +++ b/mathgenerator/funcs/absoluteDifferenceFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + +def absoluteDifferenceFunc (maxA = 100, maxB = 100): + a = random.randint(-1*maxA, maxA) + b = random.randint(-1*maxB, maxB) + absDiff = abs(a-b) + + problem = "Absolute difference between numbers " + str(a) + " and " + str(b) + " = " + solution = absDiff + return problem, solution \ No newline at end of file diff --git a/mathgenerator/funcs/additionFunc.py b/mathgenerator/funcs/additionFunc.py new file mode 100644 index 0000000..30dfefe --- /dev/null +++ b/mathgenerator/funcs/additionFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def additionFunc(maxSum=99, maxAddend=50): + a = random.randint(0, maxAddend) + b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + c = a + b + problem = str(a) + "+" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/angleBtwVectorsFunc.py b/mathgenerator/funcs/angleBtwVectorsFunc.py new file mode 100644 index 0000000..bd2d0b5 --- /dev/null +++ b/mathgenerator/funcs/angleBtwVectorsFunc.py @@ -0,0 +1,16 @@ +from .euclidianNormFunc import euclidianNormFunc +import math +from .__init__ import * + + +def angleBtwVectorsFunc(v1: list, v2: list): + sum = 0 + for i in v1: + for j in v2: + sum += i * j + + mags = euclidianNormFunc(v1) * euclidianNormFunc(v2) + problem = f"angle between the vectors {v1} and {v2} is:" + solution = math.acos(sum / mags) + # would return the answer in radians + return problem, solution diff --git a/mathgenerator/funcs/areaOfTriangleFunc.py b/mathgenerator/funcs/areaOfTriangleFunc.py new file mode 100644 index 0000000..a5e1250 --- /dev/null +++ b/mathgenerator/funcs/areaOfTriangleFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/basicAlgebraFunc.py b/mathgenerator/funcs/basicAlgebraFunc.py new file mode 100644 index 0000000..939ac5e --- /dev/null +++ b/mathgenerator/funcs/basicAlgebraFunc.py @@ -0,0 +1,25 @@ +from .__init__ import * + + +def basicAlgebraFunc(maxVariable=10): + a = random.randint(1, maxVariable) + b = random.randint(1, maxVariable) + c = random.randint(b, maxVariable) + + # calculate gcd + def calculate_gcd(x, y): + while(y): + x, y = y, x % y + return x + + i = calculate_gcd((c - b), a) + x = f"{(c - b)//i}/{a//i}" + + if (c - b == 0): + x = "0" + elif a == 1 or a == i: + x = f"{c - b}" + + problem = f"{a}x + {b} = {c}" + solution = x + return problem, solution diff --git a/mathgenerator/funcs/basicTrigonometryFunc.py b/mathgenerator/funcs/basicTrigonometryFunc.py new file mode 100644 index 0000000..dd4fe5d --- /dev/null +++ b/mathgenerator/funcs/basicTrigonometryFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one + angle=random.choice(angles) + function=random.choice(functions) + + problem=f"What is {function}({angle})?" + + expression='math.'+function+'(math.radians(angle))' + result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} + + solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition + return problem,solution diff --git a/mathgenerator/funcs/binary2sComplement.py b/mathgenerator/funcs/binary2sComplement.py new file mode 100644 index 0000000..f51b797 --- /dev/null +++ b/mathgenerator/funcs/binary2sComplement.py @@ -0,0 +1,26 @@ +from .__init__ import * + +def binary2sComplementFunc(maxDigits=10): + digits = random.randint(1, maxDigits) + question = ''.join([str(random.randint(0, 1)) for i in range(digits)]).lstrip('0') + + answer = [] + for i in question: + answer.append(str(int(not bool(int(i))))) + + carry = True + j = len(answer) - 1 + while j >= 0: + if answer[j] == '0': + answer[j] = '1' + carry = False + break + answer[j] = '0' + j -= 1 + + if j == 0 and carry == True: + answer.insert(0, '1') + + problem = "2's complement of " + question + " =" + solution = ''.join(answer).lstrip('0') + return problem, solution \ No newline at end of file diff --git a/mathgenerator/funcs/binaryComplement1sFunc.py b/mathgenerator/funcs/binaryComplement1sFunc.py new file mode 100644 index 0000000..2568303 --- /dev/null +++ b/mathgenerator/funcs/binaryComplement1sFunc.py @@ -0,0 +1,15 @@ +from .__init__ import * + + +def binaryComplement1sFunc(maxDigits=10): + question = '' + answer = '' + + for i in range(random.randint(1, maxDigits)): + temp = str(random.randint(0, 1)) + question += temp + answer += "0" if temp == "1" else "1" + + problem = question+"=" + solution = answer + return problem, solution diff --git a/mathgenerator/funcs/binaryToHexFunc.py b/mathgenerator/funcs/binaryToHexFunc.py new file mode 100644 index 0000000..0f3e962 --- /dev/null +++ b/mathgenerator/funcs/binaryToHexFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def binaryToHexFunc(max_dig=10): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = hex(int(problem, 2)) + return problem, solution diff --git a/mathgenerator/funcs/combinationsFunc.py b/mathgenerator/funcs/combinationsFunc.py new file mode 100644 index 0000000..79390a6 --- /dev/null +++ b/mathgenerator/funcs/combinationsFunc.py @@ -0,0 +1,19 @@ +from .__init__ import * + + +def combinationsFunc(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 diff --git a/mathgenerator/funcs/commonFactorsFunc.py b/mathgenerator/funcs/commonFactorsFunc.py new file mode 100644 index 0000000..633abb3 --- /dev/null +++ b/mathgenerator/funcs/commonFactorsFunc.py @@ -0,0 +1,24 @@ +from .__init__ import * + + +def commonFactorsFunc(maxVal=100): + a = x = random.randint(1, maxVal) + b = y = random.randint(1, maxVal) + + 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 diff --git a/mathgenerator/funcs/compareFractionsFunc.py b/mathgenerator/funcs/compareFractionsFunc.py new file mode 100644 index 0000000..d0d08a4 --- /dev/null +++ b/mathgenerator/funcs/compareFractionsFunc.py @@ -0,0 +1,26 @@ +from .__init__ import * + + +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 < second): + solution = "<" + else: + solution = "=" + + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" + return problem, solution diff --git a/mathgenerator/funcs/confidenceIntervalFunc.py b/mathgenerator/funcs/confidenceIntervalFunc.py new file mode 100644 index 0000000..32bd26a --- /dev/null +++ b/mathgenerator/funcs/confidenceIntervalFunc.py @@ -0,0 +1,30 @@ +from .__init__ import * + + +def confidenceIntervalFunc(): + n=random.randint(20,40) + j=random.randint(0,3) + + lst=random.sample(range(200,300),n) + lst_per=[80 ,90, 95, 99] + lst_t = [1.282, 1.645, 1.960, 2.576] + + mean=0 + sd=0 + + for i in lst: + count= i + mean + mean=count + + mean = mean/n + + for i in lst: + x=(i-mean)**2+sd + sd=x + + sd=sd/n + standard_error = lst_t[j]*math.sqrt(sd/n) + + problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) + solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + return problem, solution diff --git a/mathgenerator/funcs/cubeRootFunc.py b/mathgenerator/funcs/cubeRootFunc.py new file mode 100644 index 0000000..c9de53c --- /dev/null +++ b/mathgenerator/funcs/cubeRootFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/dataSummaryFunc.py b/mathgenerator/funcs/dataSummaryFunc.py new file mode 100644 index 0000000..016737c --- /dev/null +++ b/mathgenerator/funcs/dataSummaryFunc.py @@ -0,0 +1,26 @@ +from .__init__ import * + + +def dataSummaryFunc(number_values=15,minval=5,maxval=50): + random_list=[] + + for i in range(number_values): + n=random.randint(minval,maxval) + random_list.append(n) + + a=sum(random_list) + mean=a/number_values + + var=0 + for i in range(number_values): + var+=(random_list[i]-mean)**2 + + # we're printing stuff here? + print(random_list) + print(mean) + print(var/number_values) + print((var/number_values)**0.5) + + problem="Find the mean,standard deviation and variance for the data"+str(random_list) + solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) + return problem,solution diff --git a/mathgenerator/funcs/distanceTwoPointsFunc.py b/mathgenerator/funcs/distanceTwoPointsFunc.py new file mode 100644 index 0000000..1f48f90 --- /dev/null +++ b/mathgenerator/funcs/distanceTwoPointsFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): + point1X = random.randint(minValXY, maxValXY + 1) + point1Y = random.randint(minValXY, maxValXY + 1) + point2X = random.randint(minValXY, maxValXY + 1) + point2Y = random.randint(minValXY, maxValXY + 1) + + distanceSq = (point1X - point2X) ** 2 + (point1Y - point2Y) ** 2 + + solution = f"sqrt({distanceSq})" + problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" + return problem, solution diff --git a/mathgenerator/funcs/divideFractionsFunc.py b/mathgenerator/funcs/divideFractionsFunc.py new file mode 100644 index 0000000..abfbec6 --- /dev/null +++ b/mathgenerator/funcs/divideFractionsFunc.py @@ -0,0 +1,32 @@ +from .__init__ import * + + +def divideFractionsFunc(maxVal=10): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + + while (a == b): + b = random.randint(1, maxVal) + + c = random.randint(1, maxVal) + d = random.randint(1, maxVal) + while (c == d): + d = random.randint(1, maxVal) + + def calculate_gcd(x, y): + while(y): + x, y = y, x % y + return x + + tmp_n = a * d + tmp_d = b * c + + 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}" + # for equal numerator and denominators + problem = f"({a}/{b})/({c}/{d})" + solution = x + return problem, solution diff --git a/mathgenerator/funcs/divisionFunc.py b/mathgenerator/funcs/divisionFunc.py new file mode 100644 index 0000000..60af33d --- /dev/null +++ b/mathgenerator/funcs/divisionFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def divisionFunc(maxRes=99, maxDivid=99): + a = random.randint(0, maxDivid) + b = random.randint(0, min(maxRes, maxDivid)) + c = a / b + + problem = str(a) + "/" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/divisionToIntFunc.py b/mathgenerator/funcs/divisionToIntFunc.py new file mode 100644 index 0000000..d5f3cfd --- /dev/null +++ b/mathgenerator/funcs/divisionToIntFunc.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +def divisionToIntFunc(maxA=25, maxB=25): + a = random.randint(1, maxA) + b = random.randint(1, maxB) + + divisor = a * b + dividend = random.choice([a, b]) + + problem = f"{divisor}/{dividend} = " + solution = int(divisor / dividend) + return problem, solution diff --git a/mathgenerator/funcs/euclidianNormFunc.py b/mathgenerator/funcs/euclidianNormFunc.py new file mode 100644 index 0000000..f66329e --- /dev/null +++ b/mathgenerator/funcs/euclidianNormFunc.py @@ -0,0 +1,7 @@ +from .__init__ import * + + +def euclidianNormFunc(v1: list): + problem = f"Euclidian norm or L2 norm of the vector{v1} is:" + solution = sqrt(sum([i**2 for i in v1])) + return problem, solution diff --git a/mathgenerator/funcs/exponentiationFunc.py b/mathgenerator/funcs/exponentiationFunc.py new file mode 100644 index 0000000..4ff1ba1 --- /dev/null +++ b/mathgenerator/funcs/exponentiationFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def exponentiationFunc(maxBase = 20,maxExpo = 10): + base = random.randint(1, maxBase) + expo = random.randint(1, maxExpo) + + problem = f"{base}^{expo} =" + solution = str(base ** expo) + return problem, solution diff --git a/mathgenerator/funcs/factorialFunc.py b/mathgenerator/funcs/factorialFunc.py new file mode 100644 index 0000000..ac4536c --- /dev/null +++ b/mathgenerator/funcs/factorialFunc.py @@ -0,0 +1,15 @@ +from .__init__ import * + + +def factorialFunc(maxInput=6): + a = random.randint(0, maxInput) + n = a + + problem = str(a) + "! = " + b = 1 + + while a != 1 and n > 0: + b *= n + n -= 1 + solution = str(b) + return problem, solution diff --git a/mathgenerator/funcs/factoringFunc.py b/mathgenerator/funcs/factoringFunc.py new file mode 100644 index 0000000..c52482f --- /dev/null +++ b/mathgenerator/funcs/factoringFunc.py @@ -0,0 +1,29 @@ +from .__init__ import * + + +def factoringFunc(range_x1=10, range_x2=10): + x1 = random.randint(-range_x1, range_x1) + x2 = random.randint(-range_x2, range_x2) + + def intParser(z): + if (z == 0): + return "" + if (z > 0): + return "+" + str(z) + if (z < 0): + return "-" + str(abs(z)) + + b = intParser(x1 + x2) + c = intParser(x1 * x2) + + if b == "+1": + b = "+" + if b == "": + problem = f"x^2{c}" + else: + problem = f"x^2{b}x{c}" + + x1 = intParser(x1) + x2 = intParser(x2) + solution = f"(x{x1})(x{x2})" + return problem, solution \ No newline at end of file diff --git a/mathgenerator/funcs/fibonacciSeriesFunc.py b/mathgenerator/funcs/fibonacciSeriesFunc.py new file mode 100644 index 0000000..42de00d --- /dev/null +++ b/mathgenerator/funcs/fibonacciSeriesFunc.py @@ -0,0 +1,21 @@ +from .__init__ import * + + +def fibonacciSeriesFunc(minNo=1): + n = random.randint(minNo,20) + + def createFibList(n): + l=[] + for i in range(n): + if i<2: + l.append(i) + else: + val = l[i-1]+l[i-2] + l.append(val) + return l + + fibList=createFibList(n) + + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + solution = fibList + return problem,solution diff --git a/mathgenerator/funcs/fourthAngleOfQuadriFunc.py b/mathgenerator/funcs/fourthAngleOfQuadriFunc.py new file mode 100644 index 0000000..d183e17 --- /dev/null +++ b/mathgenerator/funcs/fourthAngleOfQuadriFunc.py @@ -0,0 +1,14 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/gcdFunc.py b/mathgenerator/funcs/gcdFunc.py new file mode 100644 index 0000000..505c7fb --- /dev/null +++ b/mathgenerator/funcs/gcdFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def gcdFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + while y: + x, y = y, x % y + problem = f"GCD of {a} and {b} = " + solution = str(x) + return problem, solution diff --git a/mathgenerator/funcs/geomProgrFunc.py b/mathgenerator/funcs/geomProgrFunc.py new file mode 100644 index 0000000..3e3ad5c --- /dev/null +++ b/mathgenerator/funcs/geomProgrFunc.py @@ -0,0 +1,15 @@ +from .__init__ import * + +def geomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, sum_term=5): + r=random.randint(min_value,max_value) + a=random.randint(min_value,max_value) + n_term=random.randint(number_values,number_values+5) + sum_term=random.randint(number_values,number_values+5) + GP=[] + for i in range(number_values): + GP.append(a*(r**i)) + problem="For the given GP "+str(GP)+" ,Find the value of a,common ratio,"+str(n_term)+"th term value, sum upto "+str(sum_term)+"th term" + value_nth_term=a*(r**(n_term-1)) + sum_till_nth_term=a*((r**sum_term-1)/(r-1)) + solution="The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format(a,r,n_term,value_nth_term,sum_term,sum_till_nth_term) + return problem,solution diff --git a/mathgenerator/funcs/geometricMeanFunc.py b/mathgenerator/funcs/geometricMeanFunc.py new file mode 100644 index 0000000..05ded2b --- /dev/null +++ b/mathgenerator/funcs/geometricMeanFunc.py @@ -0,0 +1,27 @@ +from .__init__ import * + + +def geometricMeanFunc(maxValue=100, maxNum=4): + a=random.randint(1,maxValue) + b=random.randint(1,maxValue) + c=random.randint(1,maxValue) + d=random.randint(1,maxValue) + num=random.randint(2,4) + if num==2: + product=a*b + elif num==3: + product=a*b*c + elif num==4: + product=a*b*c*d + + ans=product**(1/num) + if num==2: + problem=f"Geometric mean of {num} numbers {a} and {b} = " + solution = f"({a}*{b})^(1/{num}) = {ans}" + elif num==3: + problem=f"Geometric mean of {num} numbers {a} , {b} and {c} = " + solution = f"({a}*{b}*{c})^(1/{num}) = {ans}" + elif num==4: + problem=f"Geometric mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f"({a}*{b}*{c}*{d})^(1/{num}) = {ans}" + return problem,solution diff --git a/mathgenerator/funcs/harmonicMeanFunc.py b/mathgenerator/funcs/harmonicMeanFunc.py new file mode 100644 index 0000000..035273f --- /dev/null +++ b/mathgenerator/funcs/harmonicMeanFunc.py @@ -0,0 +1,28 @@ +from .__init__ import * + + +def harmonicMeanFunc(maxValue=100, maxNum=4): + + a=random.randint(1,maxValue) + b=random.randint(1,maxValue) + c=random.randint(1,maxValue) + d=random.randint(1,maxValue) + num=random.randint(2,4) + if num==2: + sum=(1/a)+(1/b) + elif num==3: + sum=(1/a)+(1/b)+(1/c) + elif num==4: + sum=(1/a)+(1/b)+(1/c)+(1/d) + + ans=num/sum + if num==2: + problem=f"Harmonic mean of {num} numbers {a} and {b} = " + solution = f" {num}/((1/{a}) + (1/{b})) = {ans}" + elif num==3: + problem=f"Harmonic mean of {num} numbers {a} , {b} and {c} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c})) = {ans}" + elif num==4: + problem=f"Harmonic mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c}) + (1/{d})) = {ans}" + return problem,solution diff --git a/mathgenerator/funcs/hcfFunc.py b/mathgenerator/funcs/hcfFunc.py new file mode 100644 index 0000000..40be783 --- /dev/null +++ b/mathgenerator/funcs/hcfFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + +def hcfFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + x, y = a, b + while(y): + x, y = y, x % y + problem = f"HCF of {a} and {b} = " + solution = str(x) + return problem, solution diff --git a/mathgenerator/funcs/intersectionOfTwoLinesFunc.py b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py new file mode 100644 index 0000000..96f681d --- /dev/null +++ b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py @@ -0,0 +1,62 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/isTriangleValidFunc.py b/mathgenerator/funcs/isTriangleValidFunc.py new file mode 100644 index 0000000..a80a05d --- /dev/null +++ b/mathgenerator/funcs/isTriangleValidFunc.py @@ -0,0 +1,19 @@ +from .__init__ import * + + +def isTriangleValidFunc(maxSideLength=50): + sideA = random.randint(1, maxSideLength) + sideB = random.randint(1, maxSideLength) + sideC = random.randint(1, maxSideLength) + + sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] + sides = [sideC, sideA, sideB] + + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" + + if exists: + solution = "Yes" + return problem, solution + solution = "No" + return problem, solution diff --git a/mathgenerator/funcs/lcmFunc.py b/mathgenerator/funcs/lcmFunc.py new file mode 100644 index 0000000..af2ee41 --- /dev/null +++ b/mathgenerator/funcs/lcmFunc.py @@ -0,0 +1,17 @@ +from .__init__ import * + + +def lcmFunc(maxVal=20): + a = random.randint(1, maxVal) + b = random.randint(1, maxVal) + c = a * b + x, y = a, b + + while y: + x, y = y, x % y + d = c // x + + problem = f"LCM of {a} and {b} =" + solution = str(d) + + return problem, solution diff --git a/mathgenerator/funcs/linearEquationsFunc.py b/mathgenerator/funcs/linearEquationsFunc.py new file mode 100644 index 0000000..4aa1fba --- /dev/null +++ b/mathgenerator/funcs/linearEquationsFunc.py @@ -0,0 +1,25 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/logFunc.py b/mathgenerator/funcs/logFunc.py new file mode 100644 index 0000000..8d16214 --- /dev/null +++ b/mathgenerator/funcs/logFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def logFunc(maxBase=3, maxVal=8): + a = random.randint(1, maxVal) + b = random.randint(2, maxBase) + c = pow(b, a) + + problem = "log" + str(b) + "(" + str(c) + ")" + solution = str(a) + + return problem, solution diff --git a/mathgenerator/funcs/matrixInversion.py b/mathgenerator/funcs/matrixInversion.py new file mode 100644 index 0000000..822cb83 --- /dev/null +++ b/mathgenerator/funcs/matrixInversion.py @@ -0,0 +1,69 @@ +from .__init__ import * +import sympy + +def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerElementsInInvertedMatrix=False): + if OnlyIntegerElementsInInvertedMatrix is True: + isItOk = False + Mat = list() + while (isItOk is False): + Mat = list() + for i in range(0, SquareMatrixDimension): + z = list() + for j in range(0, SquareMatrixDimension): + z.append(0) + z[i] = 1 + Mat.append(z) + MaxAllowedMatrixElement = math.ceil( + pow(MaxMatrixElement, 1 / (SquareMatrixDimension))) + randomlist = random.sample( + range(0, MaxAllowedMatrixElement + 1), SquareMatrixDimension) + + for i in range(0, SquareMatrixDimension): + if i == SquareMatrixDimension - 1: + Mat[0] = [j + (k * randomlist[i]) + for j, k in zip(Mat[0], Mat[i])] + else: + Mat[i + 1] = [j + (k * randomlist[i]) + for j, k in zip(Mat[i + 1], Mat[i])] + + for i in range(1, SquareMatrixDimension - 1): + Mat[i] = [sum(i) + for i in zip(Mat[SquareMatrixDimension - 1], Mat[i])] + + isItOk = True + for i in Mat: + for j in i: + if j > MaxMatrixElement: + isItOk = False + break + if isItOk is False: + break + + random.shuffle(Mat) + Mat = sympy.Matrix(Mat) + Mat = sympy.Matrix.transpose(Mat) + Mat = Mat.tolist() + random.shuffle(Mat) + Mat = sympy.Matrix(Mat) + Mat = sympy.Matrix.transpose(Mat) + + else: + randomlist = list(sympy.primerange(0, MaxMatrixElement + 1)) + plist = random.sample(randomlist, SquareMatrixDimension) + randomlist = random.sample( + range(0, MaxMatrixElement + 1), SquareMatrixDimension * SquareMatrixDimension) + randomlist = list(set(randomlist) - set(plist)) + n_list = random.sample( + randomlist, SquareMatrixDimension * (SquareMatrixDimension - 1)) + Mat = list() + for i in range(0, SquareMatrixDimension): + z = list() + z.append(plist[i]) + for j in range(0, SquareMatrixDimension - 1): + z.append(n_list[(i * SquareMatrixDimension) + j - i]) + random.shuffle(z) + Mat.append(z) + Mat = sympy.Matrix(Mat) + problem = 'Inverse of Matrix ' + str(Mat) + ' is:' + solution = str(sympy.Matrix.inv(Mat)) + return problem, solution diff --git a/mathgenerator/funcs/matrixMultiplicationFunc.py b/mathgenerator/funcs/matrixMultiplicationFunc.py new file mode 100644 index 0000000..eeaa265 --- /dev/null +++ b/mathgenerator/funcs/matrixMultiplicationFunc.py @@ -0,0 +1,51 @@ +from .__init__ import * + + +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}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + solution = matrixMultiplicationFuncHelper(res) + return problem, solution + +def matrixMultiplicationFuncHelper(inp): + m = len(inp) + n = len(inp[0]) + + string = "[[" + for i in range(m): + for j in range(n): + string += f"{inp[i][j]: 6d}" + string += ", "if j < n-1 else "" + string += "]\n [" if i < m-1 else "" + string += "]]" + + return string \ No newline at end of file diff --git a/mathgenerator/funcs/moduloFunc.py b/mathgenerator/funcs/moduloFunc.py new file mode 100644 index 0000000..71f1421 --- /dev/null +++ b/mathgenerator/funcs/moduloFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def moduloFunc(maxRes=99, maxModulo=99): + a = random.randint(0, maxModulo) + b = random.randint(0, min(maxRes, maxModulo)) + c = a % b if b != 0 else 0 + + problem = str(a) + "%" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/multiplicationFunc.py b/mathgenerator/funcs/multiplicationFunc.py new file mode 100644 index 0000000..00ebb26 --- /dev/null +++ b/mathgenerator/funcs/multiplicationFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def multiplicationFunc(maxRes=99, maxMulti=99): + a = random.randint(0, maxMulti) + b = random.randint(0, min(int(maxMulti / a), maxRes)) + c = a * b + + problem = str(a) + "*" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/multiplyComplexNumbersFunc.py b/mathgenerator/funcs/multiplyComplexNumbersFunc.py new file mode 100644 index 0000000..f959d4d --- /dev/null +++ b/mathgenerator/funcs/multiplyComplexNumbersFunc.py @@ -0,0 +1,9 @@ +from .__init__ import * + + +def multiplyComplexNumbersFunc(minRealImaginaryNum = -20, maxRealImaginaryNum = 20): + num1 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + num2 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + problem = f"{num1} * {num2} = " + solution = num1 * num2 + return problem, solution diff --git a/mathgenerator/funcs/multiplyFractionsFunc.py b/mathgenerator/funcs/multiplyFractionsFunc.py new file mode 100644 index 0000000..14614d6 --- /dev/null +++ b/mathgenerator/funcs/multiplyFractionsFunc.py @@ -0,0 +1,32 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/multiplyIntToMatrix22.py b/mathgenerator/funcs/multiplyIntToMatrix22.py new file mode 100644 index 0000000..120c202 --- /dev/null +++ b/mathgenerator/funcs/multiplyIntToMatrix22.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/nthFibonacciNumberFunc.py b/mathgenerator/funcs/nthFibonacciNumberFunc.py new file mode 100644 index 0000000..023a007 --- /dev/null +++ b/mathgenerator/funcs/nthFibonacciNumberFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def nthFibonacciNumberFunc(maxN = 100): + golden_ratio = (1 + math.sqrt(5))/2 + n = random.randint(1,maxN) + problem = f"What is the {n}th Fibonacci number?" + ans = round((math.pow(golden_ratio,n) - math.pow(-golden_ratio,-n))/(math.sqrt(5))) + solution = f"{ans}" + return problem, solution diff --git a/mathgenerator/funcs/permutationFunc.py b/mathgenerator/funcs/permutationFunc.py new file mode 100644 index 0000000..ffae44e --- /dev/null +++ b/mathgenerator/funcs/permutationFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/powerRuleDifferentiationFunc.py b/mathgenerator/funcs/powerRuleDifferentiationFunc.py new file mode 100644 index 0000000..9dac2db --- /dev/null +++ b/mathgenerator/funcs/powerRuleDifferentiationFunc.py @@ -0,0 +1,18 @@ +from .__init__ import * + + +def powerRuleDifferentiationFunc(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 * exponent) + "x^" + str(exponent - 1) + return problem, solution diff --git a/mathgenerator/funcs/powerRuleIntegrationFunc.py b/mathgenerator/funcs/powerRuleIntegrationFunc.py new file mode 100644 index 0000000..112f5b5 --- /dev/null +++ b/mathgenerator/funcs/powerRuleIntegrationFunc.py @@ -0,0 +1,20 @@ +from .__init__ import * + + +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 += " + c" + return problem, solution diff --git a/mathgenerator/funcs/primeFactorsFunc.py b/mathgenerator/funcs/primeFactorsFunc.py new file mode 100644 index 0000000..5e645d2 --- /dev/null +++ b/mathgenerator/funcs/primeFactorsFunc.py @@ -0,0 +1,22 @@ +from .__init__ import * + + +def primeFactorsFunc(minVal=1, maxVal=200): + a = random.randint(minVal, maxVal) + n = a + i = 2 + factors = [] + + while i * i <= n: + if n % i: + i += 1 + else: + n //= i + factors.append(i) + + if n > 1: + factors.append(n) + + problem = f"Find prime factors of {a}" + solution = f"{factors}" + return problem, solution diff --git a/mathgenerator/funcs/profitLossPercentFunc.py b/mathgenerator/funcs/profitLossPercentFunc.py new file mode 100644 index 0000000..05a3653 --- /dev/null +++ b/mathgenerator/funcs/profitLossPercentFunc.py @@ -0,0 +1,16 @@ +from .__init__ import * + + +def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): + cP = random.randint(1, maxCP) + sP = random.randint(1, maxSP) + diff = abs(sP-cP) + if (sP-cP >= 0): + profitOrLoss = "Profit" + else: + profitOrLoss = "Loss" + percent = diff/cP * 100 + problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " + solution = percent + + return problem, solution \ No newline at end of file diff --git a/mathgenerator/funcs/pythagoreanTheoremFunc.py b/mathgenerator/funcs/pythagoreanTheoremFunc.py new file mode 100644 index 0000000..2776592 --- /dev/null +++ b/mathgenerator/funcs/pythagoreanTheoremFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/quadraticEquation.py b/mathgenerator/funcs/quadraticEquation.py new file mode 100644 index 0000000..98f895e --- /dev/null +++ b/mathgenerator/funcs/quadraticEquation.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +def quadraticEquation(maxVal=100): + a = random.randint(1, maxVal) + c = random.randint(1, maxVal) + b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) + + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) + D = math.sqrt(b * b - 4 * a * c) + solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + return problem, solution diff --git a/mathgenerator/funcs/regularPolygonAngleFunc.py b/mathgenerator/funcs/regularPolygonAngleFunc.py new file mode 100644 index 0000000..569d2d5 --- /dev/null +++ b/mathgenerator/funcs/regularPolygonAngleFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def regularPolygonAngleFunc(minVal=3, maxVal=20): + sideNum = random.randint(minVal, maxVal) + problem = f"Find the angle of a regular polygon with {sideNum} sides" + + exteriorAngle = round((360 / sideNum), 2) + solution = 180 - exteriorAngle + return problem, solution diff --git a/mathgenerator/funcs/simpleInterestFunc.py b/mathgenerator/funcs/simpleInterestFunc.py new file mode 100644 index 0000000..de997d0 --- /dev/null +++ b/mathgenerator/funcs/simpleInterestFunc.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/squareFunc.py b/mathgenerator/funcs/squareFunc.py new file mode 100644 index 0000000..6384197 --- /dev/null +++ b/mathgenerator/funcs/squareFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def squareFunc(maxSquareNum=20): + a = random.randint(1, maxSquareNum) + b = a * a + + problem = str(a) + "^2" + "=" + solution = str(b) + return problem, solution diff --git a/mathgenerator/funcs/squareRootFunc.py b/mathgenerator/funcs/squareRootFunc.py new file mode 100644 index 0000000..87152c8 --- /dev/null +++ b/mathgenerator/funcs/squareRootFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def squareRootFunc(minNo=1, maxNo=12): + b = random.randint(minNo, maxNo) + a = b * b + + problem = "sqrt(" + str(a) + ")=" + solution = str(b) + return problem, solution diff --git a/mathgenerator/funcs/subtractionFunc.py b/mathgenerator/funcs/subtractionFunc.py new file mode 100644 index 0000000..91c8e74 --- /dev/null +++ b/mathgenerator/funcs/subtractionFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def subtractionFunc(maxMinuend=99, maxDiff=99): + a = random.randint(0, maxMinuend) + b = random.randint(max(0, (a - maxDiff)), a) + c = a - b + + problem = str(a) + "-" + str(b) + "=" + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py b/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py new file mode 100644 index 0000000..6181e96 --- /dev/null +++ b/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def sumOfAnglesOfPolygonFunc(maxSides = 12): + side = random.randint(3, maxSides) + sum = (side - 2) * 180 + + problem = f"Sum of angles of polygon with {side} sides = " + solution = sum + return problem, solution diff --git a/mathgenerator/funcs/surdsComparisonFunc.py b/mathgenerator/funcs/surdsComparisonFunc.py new file mode 100644 index 0000000..161aac3 --- /dev/null +++ b/mathgenerator/funcs/surdsComparisonFunc.py @@ -0,0 +1,17 @@ +from .__init__ import * + + +def surdsComparisonFunc(maxValue = 100, maxRoot = 10): + radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) + degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) + + problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" + first = math.pow(radicand1, 1/degree1) + second = math.pow(radicand2, 1/degree2) + + solution = "=" + if first > second: + solution = ">" + elif first < second: + solution = "<" + return problem, solution diff --git a/mathgenerator/funcs/surfaceAreaCone.py b/mathgenerator/funcs/surfaceAreaCone.py new file mode 100644 index 0000000..8132e7d --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCone.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaCube.py b/mathgenerator/funcs/surfaceAreaCube.py new file mode 100644 index 0000000..9f9d07f --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCube.py @@ -0,0 +1,9 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaCuboid.py b/mathgenerator/funcs/surfaceAreaCuboid.py new file mode 100644 index 0000000..3630abc --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCuboid.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaCylinder.py b/mathgenerator/funcs/surfaceAreaCylinder.py new file mode 100644 index 0000000..92035ba --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaCylinder.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/surfaceAreaSphere.py b/mathgenerator/funcs/surfaceAreaSphere.py new file mode 100644 index 0000000..84ce3e1 --- /dev/null +++ b/mathgenerator/funcs/surfaceAreaSphere.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def surfaceAreaSphere(maxSide = 20, unit = 'm'): + r = random.randint(1, maxSide) + + problem = f"Surface area of Sphere with radius = {r}{unit} is" + ans = 4 * math.pi * r * r + solution = f"{ans} {unit}^2" + return problem, solution diff --git a/mathgenerator/funcs/systemOfEquationsFunc.py b/mathgenerator/funcs/systemOfEquationsFunc.py new file mode 100644 index 0000000..fd28eaf --- /dev/null +++ b/mathgenerator/funcs/systemOfEquationsFunc.py @@ -0,0 +1,45 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/thirdAngleOfTriangleFunc.py b/mathgenerator/funcs/thirdAngleOfTriangleFunc.py new file mode 100644 index 0000000..688b209 --- /dev/null +++ b/mathgenerator/funcs/thirdAngleOfTriangleFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def thirdAngleOfTriangleFunc(maxAngle=89): + angle1 = random.randint(1, maxAngle) + angle2 = random.randint(1, maxAngle) + angle3 = 180 - (angle1 + angle2) + + problem = f"Third angle of triangle with angles {angle1} and {angle2} = " + solution = angle3 + return problem, solution diff --git a/mathgenerator/funcs/vectorCrossFunc.py b/mathgenerator/funcs/vectorCrossFunc.py new file mode 100644 index 0000000..07ff0b2 --- /dev/null +++ b/mathgenerator/funcs/vectorCrossFunc.py @@ -0,0 +1,13 @@ +from .__init__ import * + + +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]] + + problem = str(a) + " X " + str(b) + " = " + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/vectorDotFunc.py b/mathgenerator/funcs/vectorDotFunc.py new file mode 100644 index 0000000..0364c65 --- /dev/null +++ b/mathgenerator/funcs/vectorDotFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def vectorDotFunc(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[0] * b[0] + a[1] * b[1] + a[2] * b[2] + + problem = str(a) + " . " + str(b) + " = " + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/volumeCone.py b/mathgenerator/funcs/volumeCone.py new file mode 100644 index 0000000..4cd5512 --- /dev/null +++ b/mathgenerator/funcs/volumeCone.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeCube.py b/mathgenerator/funcs/volumeCube.py new file mode 100644 index 0000000..e487173 --- /dev/null +++ b/mathgenerator/funcs/volumeCube.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeCuboid.py b/mathgenerator/funcs/volumeCuboid.py new file mode 100644 index 0000000..a435784 --- /dev/null +++ b/mathgenerator/funcs/volumeCuboid.py @@ -0,0 +1,12 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeCylinder.py b/mathgenerator/funcs/volumeCylinder.py new file mode 100644 index 0000000..ecd78da --- /dev/null +++ b/mathgenerator/funcs/volumeCylinder.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +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 diff --git a/mathgenerator/funcs/volumeSphereFunc.py b/mathgenerator/funcs/volumeSphereFunc.py new file mode 100644 index 0000000..618dbd3 --- /dev/null +++ b/mathgenerator/funcs/volumeSphereFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def volumeSphereFunc(maxRadius = 100): + r=random.randint(1,maxRadius) + + problem=f"Volume of sphere with radius {r} m = " + ans=(4*math.pi/3)*r*r*r + solution = f"{ans} m^3" + return problem,solution From ed7cbc3e6983f496ec257a4e4f456bae55ab9e5a Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 19:39:34 +0530 Subject: [PATCH 093/116] Create compoundInterestFunc.py --- mathgenerator/funcs/compoundInterestFunc.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 mathgenerator/funcs/compoundInterestFunc.py diff --git a/mathgenerator/funcs/compoundInterestFunc.py b/mathgenerator/funcs/compoundInterestFunc.py new file mode 100644 index 0000000..dec3e54 --- /dev/null +++ b/mathgenerator/funcs/compoundInterestFunc.py @@ -0,0 +1,11 @@ +from .__init__ import * + +def compoundInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10, maxPeriod = ): + p = random.randint(100, maxPrinciple) + r = random.randint(1, maxRate) + t = random.randint(1, maxTime) + n = random.randint(1, maxPeriod) + A = p * ((1 + (r/(100*n))**(n*t))) + problem = "Compound Interest for a principle amount of " + str(p) + " dollars, " + str(r) + "% rate of interest and for a time period of " + str(t) + " compounded monthly is = " + solution = round(A, 2) + return problem, solution From 24493200820139ca0ba53e16074fcf077dfcc921 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:10:45 +0530 Subject: [PATCH 094/116] Create binaryToHexaFunction.py Binary to Hexadecimal conversion function file --- mathgenerator/funcs/binaryToHexaFunction.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 mathgenerator/funcs/binaryToHexaFunction.py diff --git a/mathgenerator/funcs/binaryToHexaFunction.py b/mathgenerator/funcs/binaryToHexaFunction.py new file mode 100644 index 0000000..e40f775 --- /dev/null +++ b/mathgenerator/funcs/binaryToHexaFunction.py @@ -0,0 +1,11 @@ +from .__init__ import * + + +def binaryToHexaFunc(max_dig=1000): + problem = '' + for i in range(random.randint(1, max_dig)): + temp = str(random.randint(0, 1)) + problem += temp + + solution = hex(int(problem)) + return problem, solution From 5b4088b1e0471cfa6f4c136c2950052890e8f197 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:14:51 +0530 Subject: [PATCH 095/116] Update __init__.py Updated init.py --- mathgenerator/funcs/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index f054a11..4e4a196 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -77,3 +77,4 @@ from .absoluteDifferenceFunc import * from .vectorDotFunc import * from .binary2sComplement import * from .matrixInversion import * +from .binaryToHexaFunction import * From e797c8fa5ccd4d1c116769465a3c7dde57188d0e Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:16:30 +0530 Subject: [PATCH 096/116] Delete binaryToHexaFunction.py --- mathgenerator/funcs/binaryToHexaFunction.py | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 mathgenerator/funcs/binaryToHexaFunction.py diff --git a/mathgenerator/funcs/binaryToHexaFunction.py b/mathgenerator/funcs/binaryToHexaFunction.py deleted file mode 100644 index e40f775..0000000 --- a/mathgenerator/funcs/binaryToHexaFunction.py +++ /dev/null @@ -1,11 +0,0 @@ -from .__init__ import * - - -def binaryToHexaFunc(max_dig=1000): - problem = '' - for i in range(random.randint(1, max_dig)): - temp = str(random.randint(0, 1)) - problem += temp - - solution = hex(int(problem)) - return problem, solution From f723fb18818277415d6781fd98627f137d8a6d3b Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 10:46:32 -0400 Subject: [PATCH 097/116] Fix build issues --- .../{determinantToMatrix22.cpp => determinantToMatrix22.py} | 0 mathgenerator/funcs/meanMedianFunc.py | 2 +- mathgenerator/funcs/sectorAreaFunc.py | 2 +- setup.py | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) rename mathgenerator/funcs/{determinantToMatrix22.cpp => determinantToMatrix22.py} (100%) diff --git a/mathgenerator/funcs/determinantToMatrix22.cpp b/mathgenerator/funcs/determinantToMatrix22.py similarity index 100% rename from mathgenerator/funcs/determinantToMatrix22.cpp rename to mathgenerator/funcs/determinantToMatrix22.py diff --git a/mathgenerator/funcs/meanMedianFunc.py b/mathgenerator/funcs/meanMedianFunc.py index 5f06a1c..f1d2596 100644 --- a/mathgenerator/funcs/meanMedianFunc.py +++ b/mathgenerator/funcs/meanMedianFunc.py @@ -1,4 +1,4 @@ -.__init__ import * +from .__init__ import * def meanMedianFunc(maxlen = 10): randomlist = random.sample(range(1, 99), maxlen) diff --git a/mathgenerator/funcs/sectorAreaFunc.py b/mathgenerator/funcs/sectorAreaFunc.py index aaf4573..6130ad0 100644 --- a/mathgenerator/funcs/sectorAreaFunc.py +++ b/mathgenerator/funcs/sectorAreaFunc.py @@ -1,4 +1,4 @@ -.__init__ import * +from .__init__ import * def sectorAreaFunc(maxRadius = 49,maxAngle = 359): Radius = random.randint(1, maxRadius) diff --git a/setup.py b/setup.py index 0b546c2..8a88d21 100644 --- a/setup.py +++ b/setup.py @@ -10,6 +10,7 @@ setup( license='MIT', packages=find_packages(), install_requires=[ + ], entry_points={ } From 6d66bf53000da470fdd9a5af91784acb396dac97 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:17:52 +0530 Subject: [PATCH 098/116] Update mathgen.py added generator class --- mathgenerator/mathgen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 3bf1417..1009a28 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -108,4 +108,5 @@ angleBtwVectors=Generator("Angle between 2 vectors", 70, "Angle Between 2 vector absoluteDifference=Generator("Absolute difference between two numbers", 71, "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc) vectorDot = Generator("Dot Product of 2 Vectors", 72, "a . b = ", "c", vectorDotFunc) binary2sComplement = Generator("Binary 2's Complement", 73, "2's complement of 11010110 =", "101010", binary2sComplementFunc) -invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion) \ No newline at end of file +invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion) +compoundInterest = Generator("Compound Interest", 75, "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", "A dollars", compoundInterestFunc) From 65a56b69156415b28cd4fab77e786ef925be61f1 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:23:11 +0530 Subject: [PATCH 099/116] Create deciToHexaFunc.py --- mathgenerator/funcs/deciToHexaFunc.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 mathgenerator/funcs/deciToHexaFunc.py diff --git a/mathgenerator/funcs/deciToHexaFunc.py b/mathgenerator/funcs/deciToHexaFunc.py new file mode 100644 index 0000000..a815e34 --- /dev/null +++ b/mathgenerator/funcs/deciToHexaFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + + +def deciToHexaFunc(max_dec=1000): + a = random.randint(0, max_dec) + b = hex(a) + problem = "Binary of " + str(a) + "=" + solution = str(b) + + return problem, solution From 649bccd330fde850500a32c883780596a1a9e121 Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:29:22 +0530 Subject: [PATCH 100/116] Update __init__.py updated init.py --- mathgenerator/funcs/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 4e4a196..288327f 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -77,4 +77,4 @@ from .absoluteDifferenceFunc import * from .vectorDotFunc import * from .binary2sComplement import * from .matrixInversion import * -from .binaryToHexaFunction import * +from .deciToHexaFunc import * From 90c4c43aea151ff6120e14c9704ab47b929b39bd Mon Sep 17 00:00:00 2001 From: helplessThor <66440538+helplessThor@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:33:45 +0530 Subject: [PATCH 101/116] Update mathgen.py added generator class --- mathgenerator/mathgen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 3bf1417..7589e04 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -108,4 +108,5 @@ angleBtwVectors=Generator("Angle between 2 vectors", 70, "Angle Between 2 vector absoluteDifference=Generator("Absolute difference between two numbers", 71, "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc) vectorDot = Generator("Dot Product of 2 Vectors", 72, "a . b = ", "c", vectorDotFunc) binary2sComplement = Generator("Binary 2's Complement", 73, "2's complement of 11010110 =", "101010", binary2sComplementFunc) -invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion) \ No newline at end of file +invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion) +decimalToHexadeci = Generator("Decimal to Hexadecimal", 78,"Binary of a=", "b", deciToHexaFunc) From 6a0aff765280e1f9772b1d92e13f8b39cd95053a Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 12:16:03 -0400 Subject: [PATCH 102/116] Improved module format --- mathgenerator/__init__.py | 20 +++++++++++++++++++ mathgenerator/funcs/__init__.py | 2 +- .../funcs/{additionFunc.py => addition.py} | 4 +++- mathgenerator/mathgen.py | 11 +++++----- test.py | 2 +- 5 files changed, 31 insertions(+), 8 deletions(-) rename mathgenerator/funcs/{additionFunc.py => addition.py} (80%) diff --git a/mathgenerator/__init__.py b/mathgenerator/__init__.py index e69de29..9a5f3ea 100644 --- a/mathgenerator/__init__.py +++ b/mathgenerator/__init__.py @@ -0,0 +1,20 @@ + +genList = [] + +class Generator: + def __init__(self, title, id, generalProb, generalSol, func): + self.title = title + self.id = id + self.generalProb = generalProb + self.generalSol = generalSol + self.func = func + genList.append([id, title, self]) + + def __str__(self): + return str(self.id) + " " + self.title + " " + self.generalProb + " " + self.generalSol + + def __call__(self, **kwargs): + return self.func(**kwargs) + +def getGenList(): + return genList diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 4bfd99e..0cca17b 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -2,7 +2,7 @@ import random import math import fractions -from .additionFunc import * +from .addition import * from .subtractionFunc import * from .multiplicationFunc import * from .divisionFunc import * diff --git a/mathgenerator/funcs/additionFunc.py b/mathgenerator/funcs/addition.py similarity index 80% rename from mathgenerator/funcs/additionFunc.py rename to mathgenerator/funcs/addition.py index 30dfefe..b1cc1d6 100644 --- a/mathgenerator/funcs/additionFunc.py +++ b/mathgenerator/funcs/addition.py @@ -1,5 +1,5 @@ from .__init__ import * - +from ..__init__ import Generator def additionFunc(maxSum=99, maxAddend=50): a = random.randint(0, maxAddend) @@ -8,3 +8,5 @@ def additionFunc(maxSum=99, maxAddend=50): problem = str(a) + "+" + str(b) + "=" solution = str(c) return problem, solution + +addition = Generator("Addition", 0, "a+b=", "c", additionFunc) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 89bf086..064c69a 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -2,8 +2,9 @@ import random import math import fractions from .funcs import * +from .__init__ import getGenList -genList = [] +genList = getGenList() # || Generator class class Generator: @@ -28,13 +29,13 @@ def genById(id): return(generator()) # -def getGenList(): - return(genList) +#def getGenList(): +# return(genList) # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) # Funcs_start - DO NOT REMOVE! -addition = Generator("Addition", 0, "a+b=", "c", additionFunc) +#addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) division = Generator("Division", 3, "a/b=", "c", divisionFunc) @@ -111,4 +112,4 @@ binary2sComplement = Generator("Binary 2's Complement", 73, "2's complement of 1 invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion) sectorArea=Generator("Area of a Sector", 75,"Area of a sector with radius, r and angle, a ","Area",sectorAreaFunc) meanMedian=Generator("Mean and Median", 76,"Mean and median of given set of numbers","Mean, Median",meanMedianFunc) -intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 77, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) +intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 77, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) diff --git a/test.py b/test.py index e5bb2c1..a1fb4dd 100644 --- a/test.py +++ b/test.py @@ -3,4 +3,4 @@ from mathgenerator import mathgen #test your generators here print(mathgen.addition()) -print(mathgen.genById(74)) +print(mathgen.genById(10)) From 74aaec3fc60c450fe2409ba6769f14efcdcb5baa Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 21:51:14 +0530 Subject: [PATCH 103/116] Create percentageFunc.py --- mathgenerator/funcs/percentageFunc.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 mathgenerator/funcs/percentageFunc.py diff --git a/mathgenerator/funcs/percentageFunc.py b/mathgenerator/funcs/percentageFunc.py new file mode 100644 index 0000000..19a4203 --- /dev/null +++ b/mathgenerator/funcs/percentageFunc.py @@ -0,0 +1,10 @@ +from .__init__ import * + +def percentageFunc(maxValue = 99, maxpercentage=99): + a = random.randint(1, maxpercentage) + b = random.randint(1, maxValue) + problem = f"What is {a}% of {b}?" + percentage = a/100*b + formatted_float = "{:.2f}".format(percentage) + solution = f"Required percentage = {formatted_float}%" + return problem, solution From 848454787fa9627863e98951c5e880c676ff55b1 Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 21:51:42 +0530 Subject: [PATCH 104/116] Update __init__.py --- mathgenerator/funcs/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 73849f0..b0cc39e 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -82,3 +82,4 @@ from .meanMedianFunc import* from .determinantToMatrix22 import * from .compoundInterestFunc import * from .deciToHexaFunc import * +from .percentageFunc import * From 290e6852694641ff5cc73ef85fd6be88ffd3284f Mon Sep 17 00:00:00 2001 From: Souvikdeb2612 <62352386+Souvikdeb2612@users.noreply.github.com> Date: Mon, 19 Oct 2020 21:53:51 +0530 Subject: [PATCH 105/116] Update mathgen.py --- mathgenerator/mathgen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index 997b8e2..ae84143 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -115,3 +115,4 @@ meanMedian=Generator("Mean and Median", 76,"Mean and median of given set of numb intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 77, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) compoundInterest = Generator("Compound Interest", 78, "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", "A dollars", compoundInterestFunc) decimalToHexadeci = Generator("Decimal to Hexadecimal", 79,"Binary of a=", "b", deciToHexaFunc) +percentage = Generator("Percentage of a number",80,"What is a% of b?","percentage",percentageFunc) From 91358f5b1bd1099857f6efa411d5550beb3fadd9 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 13:54:31 -0400 Subject: [PATCH 106/116] pep8 fixes --- makeReadme.py | 11 +- mathgenerator/__init__.py | 2 + mathgenerator/funcs/BinaryToDecimalFunc.py | 6 +- mathgenerator/funcs/DecimalToBinaryFunc.py | 2 +- mathgenerator/funcs/DiceSumProbFunc.py | 39 +-- mathgenerator/funcs/MidPointOfTwoPointFunc.py | 2 +- mathgenerator/funcs/absoluteDifferenceFunc.py | 18 +- mathgenerator/funcs/addition.py | 7 +- mathgenerator/funcs/areaOfTriangleFunc.py | 5 +- mathgenerator/funcs/basicAlgebraFunc.py | 4 +- mathgenerator/funcs/basicTrigonometryFunc.py | 23 +- mathgenerator/funcs/binary2sComplement.py | 8 +- mathgenerator/funcs/binaryComplement1sFunc.py | 4 +- mathgenerator/funcs/binaryToHexFunc.py | 2 +- mathgenerator/funcs/combinationsFunc.py | 7 +- mathgenerator/funcs/commonFactorsFunc.py | 4 +- mathgenerator/funcs/compareFractionsFunc.py | 2 +- mathgenerator/funcs/compoundInterestFunc.py | 6 +- mathgenerator/funcs/confidenceIntervalFunc.py | 29 +-- mathgenerator/funcs/cubeRootFunc.py | 2 +- mathgenerator/funcs/dataSummaryFunc.py | 22 +- mathgenerator/funcs/deciToHexaFunc.py | 2 +- mathgenerator/funcs/determinantToMatrix22.py | 5 +- mathgenerator/funcs/distanceTwoPointsFunc.py | 2 +- mathgenerator/funcs/divideFractionsFunc.py | 2 +- mathgenerator/funcs/divisionFunc.py | 2 +- mathgenerator/funcs/divisionToIntFunc.py | 2 +- mathgenerator/funcs/exponentiationFunc.py | 4 +- mathgenerator/funcs/factorialFunc.py | 6 +- mathgenerator/funcs/factoringFunc.py | 2 +- mathgenerator/funcs/fibonacciSeriesFunc.py | 12 +- .../funcs/fourthAngleOfQuadriFunc.py | 2 +- mathgenerator/funcs/geomProgrFunc.py | 25 +- mathgenerator/funcs/geometricMeanFunc.py | 46 ++-- mathgenerator/funcs/harmonicMeanFunc.py | 46 ++-- mathgenerator/funcs/hcfFunc.py | 3 +- .../funcs/intersectionOfTwoLinesFunc.py | 8 +- mathgenerator/funcs/isTriangleValidFunc.py | 3 +- mathgenerator/funcs/lcmFunc.py | 2 +- mathgenerator/funcs/linearEquationsFunc.py | 8 +- mathgenerator/funcs/logFunc.py | 2 +- mathgenerator/funcs/matrixInversion.py | 1 + .../funcs/matrixMultiplicationFunc.py | 8 +- mathgenerator/funcs/meanMedianFunc.py | 3 +- mathgenerator/funcs/moduloFunc.py | 2 +- mathgenerator/funcs/multiplicationFunc.py | 2 +- .../funcs/multiplyComplexNumbersFunc.py | 10 +- mathgenerator/funcs/multiplyFractionsFunc.py | 2 +- mathgenerator/funcs/multiplyIntToMatrix22.py | 2 +- mathgenerator/funcs/nthFibonacciNumberFunc.py | 9 +- mathgenerator/funcs/percentageFunc.py | 3 +- mathgenerator/funcs/permutationFunc.py | 3 +- .../funcs/powerRuleDifferentiationFunc.py | 2 +- .../funcs/powerRuleIntegrationFunc.py | 3 +- mathgenerator/funcs/primeFactorsFunc.py | 2 +- mathgenerator/funcs/profitLossPercentFunc.py | 8 +- mathgenerator/funcs/pythagoreanTheoremFunc.py | 2 +- mathgenerator/funcs/quadraticEquation.py | 8 +- .../funcs/regularPolygonAngleFunc.py | 2 +- mathgenerator/funcs/sectorAreaFunc.py | 5 +- mathgenerator/funcs/simpleInterestFunc.py | 5 +- mathgenerator/funcs/squareFunc.py | 2 +- mathgenerator/funcs/squareRootFunc.py | 2 +- mathgenerator/funcs/subtractionFunc.py | 2 +- .../funcs/sumOfAnglesOfPolygonFunc.py | 4 +- mathgenerator/funcs/surdsComparisonFunc.py | 8 +- mathgenerator/funcs/surfaceAreaCone.py | 2 +- mathgenerator/funcs/surfaceAreaCuboid.py | 2 +- mathgenerator/funcs/surfaceAreaCylinder.py | 2 +- mathgenerator/funcs/surfaceAreaSphere.py | 4 +- mathgenerator/funcs/systemOfEquationsFunc.py | 5 +- .../funcs/thirdAngleOfTriangleFunc.py | 2 +- mathgenerator/funcs/vectorCrossFunc.py | 12 +- mathgenerator/funcs/vectorDotFunc.py | 12 +- mathgenerator/funcs/volumeCone.py | 2 +- mathgenerator/funcs/volumeCube.py | 2 +- mathgenerator/funcs/volumeCuboid.py | 2 +- mathgenerator/funcs/volumeCylinder.py | 2 +- mathgenerator/funcs/volumeSphereFunc.py | 12 +- mathgenerator/mathgen.py | 222 ++++++++++++------ setup.py | 2 +- test.py | 2 +- 82 files changed, 450 insertions(+), 326 deletions(-) diff --git a/makeReadme.py b/makeReadme.py index 796dc00..35c3b8a 100644 --- a/makeReadme.py +++ b/makeReadme.py @@ -5,10 +5,11 @@ from mathgenerator.mathgen import * wList = getGenList() lines = [] with open('mathgenerator/mathgen.py', 'r') as f: - lines=f.readlines() + lines = f.readlines() allRows = [] -line = lines.index('# Funcs_start - DO NOT REMOVE!\n')+1 # get the first line of the functions in mathgen.py +# get the first line of the functions in mathgen.py +line = lines.index('# Funcs_start - DO NOT REMOVE!\n')+1 for item in wList: myGen = item[2] # NOTE: renamed 'sol' to 'solu' to make it look nicer @@ -27,7 +28,8 @@ for item in wList: print(prob) instName = lines[line] - func_name = instName[:instName.find('=')].strip() # NOTE: renamed 'def_name' to 'func_name' because it suits it more + # NOTE: renamed 'def_name' to 'func_name' because it suits it more + func_name = instName[:instName.find('=')].strip() row = [myGen.id, myGen.title, prob, solu, func_name] # print(item[1], func_name) line += 1 @@ -42,7 +44,8 @@ with open('README.md', "r") as g: lines = lines[:line+1] for row in allRows: - tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str(row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" + tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str( + row[2]) + " | " + str(row[3]) + " | " + str(row[4]) + " |\n" lines.append(tableLine) with open('README.md', "w") as g: diff --git a/mathgenerator/__init__.py b/mathgenerator/__init__.py index 9a5f3ea..01875a9 100644 --- a/mathgenerator/__init__.py +++ b/mathgenerator/__init__.py @@ -1,6 +1,7 @@ genList = [] + class Generator: def __init__(self, title, id, generalProb, generalSol, func): self.title = title @@ -16,5 +17,6 @@ class Generator: def __call__(self, **kwargs): return self.func(**kwargs) + def getGenList(): return genList diff --git a/mathgenerator/funcs/BinaryToDecimalFunc.py b/mathgenerator/funcs/BinaryToDecimalFunc.py index 27b165d..9d2b25d 100644 --- a/mathgenerator/funcs/BinaryToDecimalFunc.py +++ b/mathgenerator/funcs/BinaryToDecimalFunc.py @@ -1,12 +1,12 @@ -from .__init__ import * +from .__init__ import * def BinaryToDecimalFunc(max_dig=10): problem = '' - + for i in range(random.randint(1, max_dig)): temp = str(random.randint(0, 1)) problem += temp - + solution = int(problem, 2) return problem, solution diff --git a/mathgenerator/funcs/DecimalToBinaryFunc.py b/mathgenerator/funcs/DecimalToBinaryFunc.py index 8df2d8a..872e105 100644 --- a/mathgenerator/funcs/DecimalToBinaryFunc.py +++ b/mathgenerator/funcs/DecimalToBinaryFunc.py @@ -7,5 +7,5 @@ def DecimalToBinaryFunc(max_dec=99): problem = "Binary of " + str(a) + "=" solution = str(b) - + return problem, solution diff --git a/mathgenerator/funcs/DiceSumProbFunc.py b/mathgenerator/funcs/DiceSumProbFunc.py index 2180ee4..f9be9aa 100644 --- a/mathgenerator/funcs/DiceSumProbFunc.py +++ b/mathgenerator/funcs/DiceSumProbFunc.py @@ -2,24 +2,25 @@ from .__init__ import * def DiceSumProbFunc(maxDice=3): - a = random.randint(1,maxDice) - b = random.randint(a,6*a) + a = random.randint(1, maxDice) + b = random.randint(a, 6*a) - count=0 - for i in [1,2,3,4,5,6]: - if a==1: - if i==b: - count=count+1 - elif a==2: - for j in [1,2,3,4,5,6]: - if i+j==b: - count=count+1 - elif a==3: - for j in [1,2,3,4,5,6]: - for k in [1,2,3,4,5,6]: - if i+j+k==b: - count=count+1 - - problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format(a,b) - solution="{}/{}".format(count, 6**a) + count = 0 + for i in [1, 2, 3, 4, 5, 6]: + if a == 1: + if i == b: + count = count+1 + elif a == 2: + for j in [1, 2, 3, 4, 5, 6]: + if i+j == b: + count = count+1 + elif a == 3: + for j in [1, 2, 3, 4, 5, 6]: + for k in [1, 2, 3, 4, 5, 6]: + if i+j+k == b: + count = count+1 + + problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format( + a, b) + solution = "{}/{}".format(count, 6**a) return problem, solution diff --git a/mathgenerator/funcs/MidPointOfTwoPointFunc.py b/mathgenerator/funcs/MidPointOfTwoPointFunc.py index 3c9202a..f8cd8a1 100644 --- a/mathgenerator/funcs/MidPointOfTwoPointFunc.py +++ b/mathgenerator/funcs/MidPointOfTwoPointFunc.py @@ -6,7 +6,7 @@ def MidPointOfTwoPointFunc(maxValue=20): 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 diff --git a/mathgenerator/funcs/absoluteDifferenceFunc.py b/mathgenerator/funcs/absoluteDifferenceFunc.py index d578d19..075d1c2 100644 --- a/mathgenerator/funcs/absoluteDifferenceFunc.py +++ b/mathgenerator/funcs/absoluteDifferenceFunc.py @@ -1,10 +1,12 @@ -from .__init__ import * +from .__init__ import * -def absoluteDifferenceFunc (maxA = 100, maxB = 100): - a = random.randint(-1*maxA, maxA) - b = random.randint(-1*maxB, maxB) - absDiff = abs(a-b) - problem = "Absolute difference between numbers " + str(a) + " and " + str(b) + " = " - solution = absDiff - return problem, solution \ No newline at end of file +def absoluteDifferenceFunc(maxA=100, maxB=100): + a = random.randint(-1*maxA, maxA) + b = random.randint(-1*maxB, maxB) + absDiff = abs(a-b) + + problem = "Absolute difference between numbers " + \ + str(a) + " and " + str(b) + " = " + solution = absDiff + return problem, solution diff --git a/mathgenerator/funcs/addition.py b/mathgenerator/funcs/addition.py index b1cc1d6..df74496 100644 --- a/mathgenerator/funcs/addition.py +++ b/mathgenerator/funcs/addition.py @@ -1,12 +1,15 @@ -from .__init__ import * +from .__init__ import * from ..__init__ import Generator + def additionFunc(maxSum=99, maxAddend=50): a = random.randint(0, maxAddend) - b = random.randint(0, min((maxSum - a), maxAddend)) # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + # The highest value of b will be no higher than the maxsum minus the first number and no higher than the maxAddend as well + b = random.randint(0, min((maxSum - a), maxAddend)) c = a + b problem = str(a) + "+" + str(b) + "=" solution = str(c) return problem, solution + addition = Generator("Addition", 0, "a+b=", "c", additionFunc) diff --git a/mathgenerator/funcs/areaOfTriangleFunc.py b/mathgenerator/funcs/areaOfTriangleFunc.py index a5e1250..8506b55 100644 --- a/mathgenerator/funcs/areaOfTriangleFunc.py +++ b/mathgenerator/funcs/areaOfTriangleFunc.py @@ -1,4 +1,4 @@ -from .__init__ import * +from .__init__ import * def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): @@ -9,6 +9,7 @@ def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): 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 diff --git a/mathgenerator/funcs/basicAlgebraFunc.py b/mathgenerator/funcs/basicAlgebraFunc.py index 939ac5e..1d927ef 100644 --- a/mathgenerator/funcs/basicAlgebraFunc.py +++ b/mathgenerator/funcs/basicAlgebraFunc.py @@ -1,4 +1,4 @@ -from .__init__ import * +from .__init__ import * def basicAlgebraFunc(maxVariable=10): @@ -19,7 +19,7 @@ def basicAlgebraFunc(maxVariable=10): x = "0" elif a == 1 or a == i: x = f"{c - b}" - + problem = f"{a}x + {b} = {c}" solution = x return problem, solution diff --git a/mathgenerator/funcs/basicTrigonometryFunc.py b/mathgenerator/funcs/basicTrigonometryFunc.py index dd4fe5d..8ce32a4 100644 --- a/mathgenerator/funcs/basicTrigonometryFunc.py +++ b/mathgenerator/funcs/basicTrigonometryFunc.py @@ -1,14 +1,17 @@ -from .__init__ import * +from .__init__ import * -def basicTrigonometryFunc(angles=[0,30,45,60,90],functions=["sin","cos","tan"]): #Handles degrees in quadrant one - angle=random.choice(angles) - function=random.choice(functions) +# Handles degrees in quadrant one +def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], functions=["sin", "cos", "tan"]): + angle = random.choice(angles) + function = random.choice(functions) - problem=f"What is {function}({angle})?" - - expression='math.'+function+'(math.radians(angle))' - result_fraction_map={0.0:"0",0.5:"1/2",0.71:"1/√2",0.87:"√3/2",1.0:"1",0.58:"1/√3",1.73:"√3"} + problem = f"What is {function}({angle})?" - solution=result_fraction_map[round(eval(expression),2)] if round(eval(expression),2)<=99999 else "∞" #for handling the ∞ condition - return problem,solution + expression = 'math.'+function+'(math.radians(angle))' + result_fraction_map = {0.0: "0", 0.5: "1/2", 0.71: "1/√2", + 0.87: "√3/2", 1.0: "1", 0.58: "1/√3", 1.73: "√3"} + + solution = result_fraction_map[round(eval(expression), 2)] if round( + eval(expression), 2) <= 99999 else "∞" # for handling the ∞ condition + return problem, solution diff --git a/mathgenerator/funcs/binary2sComplement.py b/mathgenerator/funcs/binary2sComplement.py index f51b797..478b2c9 100644 --- a/mathgenerator/funcs/binary2sComplement.py +++ b/mathgenerator/funcs/binary2sComplement.py @@ -1,8 +1,10 @@ -from .__init__ import * +from .__init__ import * + def binary2sComplementFunc(maxDigits=10): digits = random.randint(1, maxDigits) - question = ''.join([str(random.randint(0, 1)) for i in range(digits)]).lstrip('0') + question = ''.join([str(random.randint(0, 1)) + for i in range(digits)]).lstrip('0') answer = [] for i in question: @@ -23,4 +25,4 @@ def binary2sComplementFunc(maxDigits=10): problem = "2's complement of " + question + " =" solution = ''.join(answer).lstrip('0') - return problem, solution \ No newline at end of file + return problem, solution diff --git a/mathgenerator/funcs/binaryComplement1sFunc.py b/mathgenerator/funcs/binaryComplement1sFunc.py index 2568303..1dbb1b2 100644 --- a/mathgenerator/funcs/binaryComplement1sFunc.py +++ b/mathgenerator/funcs/binaryComplement1sFunc.py @@ -1,4 +1,4 @@ -from .__init__ import * +from .__init__ import * def binaryComplement1sFunc(maxDigits=10): @@ -9,7 +9,7 @@ def binaryComplement1sFunc(maxDigits=10): temp = str(random.randint(0, 1)) question += temp answer += "0" if temp == "1" else "1" - + problem = question+"=" solution = answer return problem, solution diff --git a/mathgenerator/funcs/binaryToHexFunc.py b/mathgenerator/funcs/binaryToHexFunc.py index 0f3e962..f06fcfc 100644 --- a/mathgenerator/funcs/binaryToHexFunc.py +++ b/mathgenerator/funcs/binaryToHexFunc.py @@ -1,4 +1,4 @@ -from .__init__ import * +from .__init__ import * def binaryToHexFunc(max_dig=10): diff --git a/mathgenerator/funcs/combinationsFunc.py b/mathgenerator/funcs/combinationsFunc.py index 79390a6..6ea2e6d 100644 --- a/mathgenerator/funcs/combinationsFunc.py +++ b/mathgenerator/funcs/combinationsFunc.py @@ -1,4 +1,4 @@ -from .__init__ import * +from .__init__ import * def combinationsFunc(maxlength=20): @@ -14,6 +14,7 @@ def combinationsFunc(maxlength=20): b = random.randint(0, 9) solution = int(factorial(a) / (factorial(b) * factorial(a - b))) - problem = "Number of combinations from {} objects picked {} at a time ".format(a, b) - + problem = "Number of combinations from {} objects picked {} at a time ".format( + a, b) + return problem, solution diff --git a/mathgenerator/funcs/commonFactorsFunc.py b/mathgenerator/funcs/commonFactorsFunc.py index 633abb3..82a0e3b 100644 --- a/mathgenerator/funcs/commonFactorsFunc.py +++ b/mathgenerator/funcs/commonFactorsFunc.py @@ -1,4 +1,4 @@ -from .__init__ import * +from .__init__ import * def commonFactorsFunc(maxVal=100): @@ -18,7 +18,7 @@ def commonFactorsFunc(maxVal=100): if (y % i == 0): count = count + 1 arr.append(i) - + problem = f"Common Factors of {a} and {b} = " solution = arr return problem, solution diff --git a/mathgenerator/funcs/compareFractionsFunc.py b/mathgenerator/funcs/compareFractionsFunc.py index d0d08a4..56c4714 100644 --- a/mathgenerator/funcs/compareFractionsFunc.py +++ b/mathgenerator/funcs/compareFractionsFunc.py @@ -21,6 +21,6 @@ def compareFractionsFunc(maxVal=10): solution = "<" else: solution = "=" - + problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" return problem, solution diff --git a/mathgenerator/funcs/compoundInterestFunc.py b/mathgenerator/funcs/compoundInterestFunc.py index 6f4fba3..59cac26 100644 --- a/mathgenerator/funcs/compoundInterestFunc.py +++ b/mathgenerator/funcs/compoundInterestFunc.py @@ -1,11 +1,13 @@ from .__init__ import * -def compoundInterestFunc(maxPrinciple = 10000, maxRate = 10, maxTime = 10, maxPeriod = 10): + +def compoundInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10, maxPeriod=10): p = random.randint(100, maxPrinciple) r = random.randint(1, maxRate) t = random.randint(1, maxTime) n = random.randint(1, maxPeriod) A = p * ((1 + (r/(100*n))**(n*t))) - problem = "Compound Interest for a principle amount of " + str(p) + " dollars, " + str(r) + "% rate of interest and for a time period of " + str(t) + " compounded monthly is = " + problem = "Compound Interest for a principle amount of " + str(p) + " dollars, " + str( + r) + "% rate of interest and for a time period of " + str(t) + " compounded monthly is = " solution = round(A, 2) return problem, solution diff --git a/mathgenerator/funcs/confidenceIntervalFunc.py b/mathgenerator/funcs/confidenceIntervalFunc.py index 32bd26a..babdabe 100644 --- a/mathgenerator/funcs/confidenceIntervalFunc.py +++ b/mathgenerator/funcs/confidenceIntervalFunc.py @@ -2,29 +2,30 @@ from .__init__ import * def confidenceIntervalFunc(): - n=random.randint(20,40) - j=random.randint(0,3) + n = random.randint(20, 40) + j = random.randint(0, 3) - lst=random.sample(range(200,300),n) - lst_per=[80 ,90, 95, 99] + lst = random.sample(range(200, 300), n) + lst_per = [80, 90, 95, 99] lst_t = [1.282, 1.645, 1.960, 2.576] - mean=0 - sd=0 + mean = 0 + sd = 0 for i in lst: - count= i + mean - mean=count + count = i + mean + mean = count mean = mean/n for i in lst: - x=(i-mean)**2+sd - sd=x + x = (i-mean)**2+sd + sd = x - sd=sd/n + sd = sd/n standard_error = lst_t[j]*math.sqrt(sd/n) - - problem= 'The confidence interval for sample {} with {}% confidence is'.format([x for x in lst], lst_per[j]) - solution= '({}, {})'.format(mean+standard_error, mean-standard_error) + + problem = 'The confidence interval for sample {} with {}% confidence is'.format( + [x for x in lst], lst_per[j]) + solution = '({}, {})'.format(mean+standard_error, mean-standard_error) return problem, solution diff --git a/mathgenerator/funcs/cubeRootFunc.py b/mathgenerator/funcs/cubeRootFunc.py index c9de53c..97b978d 100644 --- a/mathgenerator/funcs/cubeRootFunc.py +++ b/mathgenerator/funcs/cubeRootFunc.py @@ -4,7 +4,7 @@ from .__init__ import * 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 diff --git a/mathgenerator/funcs/dataSummaryFunc.py b/mathgenerator/funcs/dataSummaryFunc.py index 016737c..e0e0bad 100644 --- a/mathgenerator/funcs/dataSummaryFunc.py +++ b/mathgenerator/funcs/dataSummaryFunc.py @@ -1,19 +1,19 @@ from .__init__ import * -def dataSummaryFunc(number_values=15,minval=5,maxval=50): - random_list=[] +def dataSummaryFunc(number_values=15, minval=5, maxval=50): + random_list = [] for i in range(number_values): - n=random.randint(minval,maxval) + n = random.randint(minval, maxval) random_list.append(n) - a=sum(random_list) - mean=a/number_values + a = sum(random_list) + mean = a/number_values - var=0 + var = 0 for i in range(number_values): - var+=(random_list[i]-mean)**2 + var += (random_list[i]-mean)**2 # we're printing stuff here? print(random_list) @@ -21,6 +21,8 @@ def dataSummaryFunc(number_values=15,minval=5,maxval=50): print(var/number_values) print((var/number_values)**0.5) - problem="Find the mean,standard deviation and variance for the data"+str(random_list) - solution="The Mean is {} , Standard Deviation is {}, Variance is {}".format(mean,var/number_values,(var/number_values)**0.5) - return problem,solution + problem = "Find the mean,standard deviation and variance for the data" + \ + str(random_list) + solution = "The Mean is {} , Standard Deviation is {}, Variance is {}".format( + mean, var/number_values, (var/number_values)**0.5) + return problem, solution diff --git a/mathgenerator/funcs/deciToHexaFunc.py b/mathgenerator/funcs/deciToHexaFunc.py index a815e34..5958dfa 100644 --- a/mathgenerator/funcs/deciToHexaFunc.py +++ b/mathgenerator/funcs/deciToHexaFunc.py @@ -5,6 +5,6 @@ def deciToHexaFunc(max_dec=1000): a = random.randint(0, max_dec) b = hex(a) problem = "Binary of " + str(a) + "=" - solution = str(b) + solution = str(b) return problem, solution diff --git a/mathgenerator/funcs/determinantToMatrix22.py b/mathgenerator/funcs/determinantToMatrix22.py index a92ac76..c54028d 100644 --- a/mathgenerator/funcs/determinantToMatrix22.py +++ b/mathgenerator/funcs/determinantToMatrix22.py @@ -1,6 +1,7 @@ -from .__init__ import * +from .__init__ import * -def determinantToMatrix22(maxMatrixVal = 100): + +def determinantToMatrix22(maxMatrixVal=100): a = random.randint(0, maxMatrixVal) b = random.randint(0, maxMatrixVal) c = random.randint(0, maxMatrixVal) diff --git a/mathgenerator/funcs/distanceTwoPointsFunc.py b/mathgenerator/funcs/distanceTwoPointsFunc.py index 1f48f90..7bd1ef2 100644 --- a/mathgenerator/funcs/distanceTwoPointsFunc.py +++ b/mathgenerator/funcs/distanceTwoPointsFunc.py @@ -8,7 +8,7 @@ def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): 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 diff --git a/mathgenerator/funcs/divideFractionsFunc.py b/mathgenerator/funcs/divideFractionsFunc.py index abfbec6..0f6bf30 100644 --- a/mathgenerator/funcs/divideFractionsFunc.py +++ b/mathgenerator/funcs/divideFractionsFunc.py @@ -20,7 +20,7 @@ def divideFractionsFunc(maxVal=10): tmp_n = a * d tmp_d = b * c - + gcd = calculate_gcd(tmp_n, tmp_d) x = f"{tmp_n//gcd}/{tmp_d//gcd}" diff --git a/mathgenerator/funcs/divisionFunc.py b/mathgenerator/funcs/divisionFunc.py index 60af33d..930e34b 100644 --- a/mathgenerator/funcs/divisionFunc.py +++ b/mathgenerator/funcs/divisionFunc.py @@ -5,7 +5,7 @@ def divisionFunc(maxRes=99, maxDivid=99): a = random.randint(0, maxDivid) b = random.randint(0, min(maxRes, maxDivid)) c = a / b - + problem = str(a) + "/" + str(b) + "=" solution = str(c) return problem, solution diff --git a/mathgenerator/funcs/divisionToIntFunc.py b/mathgenerator/funcs/divisionToIntFunc.py index d5f3cfd..fcc62f5 100644 --- a/mathgenerator/funcs/divisionToIntFunc.py +++ b/mathgenerator/funcs/divisionToIntFunc.py @@ -7,7 +7,7 @@ def divisionToIntFunc(maxA=25, maxB=25): divisor = a * b dividend = random.choice([a, b]) - + problem = f"{divisor}/{dividend} = " solution = int(divisor / dividend) return problem, solution diff --git a/mathgenerator/funcs/exponentiationFunc.py b/mathgenerator/funcs/exponentiationFunc.py index 4ff1ba1..d58f00d 100644 --- a/mathgenerator/funcs/exponentiationFunc.py +++ b/mathgenerator/funcs/exponentiationFunc.py @@ -1,10 +1,10 @@ from .__init__ import * -def exponentiationFunc(maxBase = 20,maxExpo = 10): +def exponentiationFunc(maxBase=20, maxExpo=10): base = random.randint(1, maxBase) expo = random.randint(1, maxExpo) - + problem = f"{base}^{expo} =" solution = str(base ** expo) return problem, solution diff --git a/mathgenerator/funcs/factorialFunc.py b/mathgenerator/funcs/factorialFunc.py index ac4536c..71dc3a2 100644 --- a/mathgenerator/funcs/factorialFunc.py +++ b/mathgenerator/funcs/factorialFunc.py @@ -4,12 +4,12 @@ from .__init__ import * def factorialFunc(maxInput=6): a = random.randint(0, maxInput) n = a - + problem = str(a) + "! = " b = 1 while a != 1 and n > 0: - b *= n - n -= 1 + b *= n + n -= 1 solution = str(b) return problem, solution diff --git a/mathgenerator/funcs/factoringFunc.py b/mathgenerator/funcs/factoringFunc.py index c52482f..1cb43c0 100644 --- a/mathgenerator/funcs/factoringFunc.py +++ b/mathgenerator/funcs/factoringFunc.py @@ -26,4 +26,4 @@ def factoringFunc(range_x1=10, range_x2=10): x1 = intParser(x1) x2 = intParser(x2) solution = f"(x{x1})(x{x2})" - return problem, solution \ No newline at end of file + return problem, solution diff --git a/mathgenerator/funcs/fibonacciSeriesFunc.py b/mathgenerator/funcs/fibonacciSeriesFunc.py index 42de00d..c043567 100644 --- a/mathgenerator/funcs/fibonacciSeriesFunc.py +++ b/mathgenerator/funcs/fibonacciSeriesFunc.py @@ -2,20 +2,20 @@ from .__init__ import * def fibonacciSeriesFunc(minNo=1): - n = random.randint(minNo,20) + n = random.randint(minNo, 20) def createFibList(n): - l=[] + l = [] for i in range(n): - if i<2: + if i < 2: l.append(i) else: val = l[i-1]+l[i-2] l.append(val) return l - fibList=createFibList(n) - + fibList = createFibList(n) + problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" solution = fibList - return problem,solution + return problem, solution diff --git a/mathgenerator/funcs/fourthAngleOfQuadriFunc.py b/mathgenerator/funcs/fourthAngleOfQuadriFunc.py index d183e17..59a05c4 100644 --- a/mathgenerator/funcs/fourthAngleOfQuadriFunc.py +++ b/mathgenerator/funcs/fourthAngleOfQuadriFunc.py @@ -8,7 +8,7 @@ def fourthAngleOfQuadriFunc(maxAngle=180): sum_ = angle1 + angle2 + angle3 angle4 = 360 - sum_ - + problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" solution = angle4 return problem, solution diff --git a/mathgenerator/funcs/geomProgrFunc.py b/mathgenerator/funcs/geomProgrFunc.py index 3e3ad5c..d051f85 100644 --- a/mathgenerator/funcs/geomProgrFunc.py +++ b/mathgenerator/funcs/geomProgrFunc.py @@ -1,15 +1,18 @@ -from .__init__ import * +from .__init__ import * + def geomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, sum_term=5): - r=random.randint(min_value,max_value) - a=random.randint(min_value,max_value) - n_term=random.randint(number_values,number_values+5) - sum_term=random.randint(number_values,number_values+5) - GP=[] + r = random.randint(min_value, max_value) + a = random.randint(min_value, max_value) + n_term = random.randint(number_values, number_values+5) + sum_term = random.randint(number_values, number_values+5) + GP = [] for i in range(number_values): GP.append(a*(r**i)) - problem="For the given GP "+str(GP)+" ,Find the value of a,common ratio,"+str(n_term)+"th term value, sum upto "+str(sum_term)+"th term" - value_nth_term=a*(r**(n_term-1)) - sum_till_nth_term=a*((r**sum_term-1)/(r-1)) - solution="The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format(a,r,n_term,value_nth_term,sum_term,sum_till_nth_term) - return problem,solution + problem = "For the given GP "+str(GP)+" ,Find the value of a,common ratio,"+str( + n_term)+"th term value, sum upto "+str(sum_term)+"th term" + value_nth_term = a*(r**(n_term-1)) + sum_till_nth_term = a*((r**sum_term-1)/(r-1)) + solution = "The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format( + a, r, n_term, value_nth_term, sum_term, sum_till_nth_term) + return problem, solution diff --git a/mathgenerator/funcs/geometricMeanFunc.py b/mathgenerator/funcs/geometricMeanFunc.py index 05ded2b..07dc4cd 100644 --- a/mathgenerator/funcs/geometricMeanFunc.py +++ b/mathgenerator/funcs/geometricMeanFunc.py @@ -1,27 +1,27 @@ -from .__init__ import * +from .__init__ import * def geometricMeanFunc(maxValue=100, maxNum=4): - a=random.randint(1,maxValue) - b=random.randint(1,maxValue) - c=random.randint(1,maxValue) - d=random.randint(1,maxValue) - num=random.randint(2,4) - if num==2: - product=a*b - elif num==3: - product=a*b*c - elif num==4: - product=a*b*c*d + a = random.randint(1, maxValue) + b = random.randint(1, maxValue) + c = random.randint(1, maxValue) + d = random.randint(1, maxValue) + num = random.randint(2, 4) + if num == 2: + product = a*b + elif num == 3: + product = a*b*c + elif num == 4: + product = a*b*c*d - ans=product**(1/num) - if num==2: - problem=f"Geometric mean of {num} numbers {a} and {b} = " - solution = f"({a}*{b})^(1/{num}) = {ans}" - elif num==3: - problem=f"Geometric mean of {num} numbers {a} , {b} and {c} = " - solution = f"({a}*{b}*{c})^(1/{num}) = {ans}" - elif num==4: - problem=f"Geometric mean of {num} numbers {a} , {b} , {c} , {d} = " - solution = f"({a}*{b}*{c}*{d})^(1/{num}) = {ans}" - return problem,solution + ans = product**(1/num) + if num == 2: + problem = f"Geometric mean of {num} numbers {a} and {b} = " + solution = f"({a}*{b})^(1/{num}) = {ans}" + elif num == 3: + problem = f"Geometric mean of {num} numbers {a} , {b} and {c} = " + solution = f"({a}*{b}*{c})^(1/{num}) = {ans}" + elif num == 4: + problem = f"Geometric mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f"({a}*{b}*{c}*{d})^(1/{num}) = {ans}" + return problem, solution diff --git a/mathgenerator/funcs/harmonicMeanFunc.py b/mathgenerator/funcs/harmonicMeanFunc.py index 035273f..1c9e397 100644 --- a/mathgenerator/funcs/harmonicMeanFunc.py +++ b/mathgenerator/funcs/harmonicMeanFunc.py @@ -1,28 +1,28 @@ -from .__init__ import * +from .__init__ import * def harmonicMeanFunc(maxValue=100, maxNum=4): - a=random.randint(1,maxValue) - b=random.randint(1,maxValue) - c=random.randint(1,maxValue) - d=random.randint(1,maxValue) - num=random.randint(2,4) - if num==2: - sum=(1/a)+(1/b) - elif num==3: - sum=(1/a)+(1/b)+(1/c) - elif num==4: - sum=(1/a)+(1/b)+(1/c)+(1/d) + a = random.randint(1, maxValue) + b = random.randint(1, maxValue) + c = random.randint(1, maxValue) + d = random.randint(1, maxValue) + num = random.randint(2, 4) + if num == 2: + sum = (1/a)+(1/b) + elif num == 3: + sum = (1/a)+(1/b)+(1/c) + elif num == 4: + sum = (1/a)+(1/b)+(1/c)+(1/d) - ans=num/sum - if num==2: - problem=f"Harmonic mean of {num} numbers {a} and {b} = " - solution = f" {num}/((1/{a}) + (1/{b})) = {ans}" - elif num==3: - problem=f"Harmonic mean of {num} numbers {a} , {b} and {c} = " - solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c})) = {ans}" - elif num==4: - problem=f"Harmonic mean of {num} numbers {a} , {b} , {c} , {d} = " - solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c}) + (1/{d})) = {ans}" - return problem,solution + ans = num/sum + if num == 2: + problem = f"Harmonic mean of {num} numbers {a} and {b} = " + solution = f" {num}/((1/{a}) + (1/{b})) = {ans}" + elif num == 3: + problem = f"Harmonic mean of {num} numbers {a} , {b} and {c} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c})) = {ans}" + elif num == 4: + problem = f"Harmonic mean of {num} numbers {a} , {b} , {c} , {d} = " + solution = f" {num}/((1/{a}) + (1/{b}) + (1/{c}) + (1/{d})) = {ans}" + return problem, solution diff --git a/mathgenerator/funcs/hcfFunc.py b/mathgenerator/funcs/hcfFunc.py index 40be783..a9f4e96 100644 --- a/mathgenerator/funcs/hcfFunc.py +++ b/mathgenerator/funcs/hcfFunc.py @@ -1,4 +1,5 @@ -from .__init__ import * +from .__init__ import * + def hcfFunc(maxVal=20): a = random.randint(1, maxVal) diff --git a/mathgenerator/funcs/intersectionOfTwoLinesFunc.py b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py index 96f681d..2e6fbb6 100644 --- a/mathgenerator/funcs/intersectionOfTwoLinesFunc.py +++ b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py @@ -33,8 +33,10 @@ def intersectionOfTwoLinesFunc( x = f"{x.numerator}/{x.denominator}" return x - m1 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) - m2 = (random.randint(minM, maxM), random.randint(minDenominator, maxDenominator)) + m1 = (random.randint(minM, maxM), random.randint( + minDenominator, maxDenominator)) + m2 = (random.randint(minM, maxM), random.randint( + minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) b2 = random.randint(minB, maxB) @@ -58,5 +60,5 @@ def intersectionOfTwoLinesFunc( 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 diff --git a/mathgenerator/funcs/isTriangleValidFunc.py b/mathgenerator/funcs/isTriangleValidFunc.py index a80a05d..304c549 100644 --- a/mathgenerator/funcs/isTriangleValidFunc.py +++ b/mathgenerator/funcs/isTriangleValidFunc.py @@ -9,7 +9,8 @@ def isTriangleValidFunc(maxSideLength=50): sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & ( + sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: diff --git a/mathgenerator/funcs/lcmFunc.py b/mathgenerator/funcs/lcmFunc.py index af2ee41..32e1868 100644 --- a/mathgenerator/funcs/lcmFunc.py +++ b/mathgenerator/funcs/lcmFunc.py @@ -13,5 +13,5 @@ def lcmFunc(maxVal=20): problem = f"LCM of {a} and {b} =" solution = str(d) - + return problem, solution diff --git a/mathgenerator/funcs/linearEquationsFunc.py b/mathgenerator/funcs/linearEquationsFunc.py index 4aa1fba..14a65f1 100644 --- a/mathgenerator/funcs/linearEquationsFunc.py +++ b/mathgenerator/funcs/linearEquationsFunc.py @@ -9,13 +9,15 @@ def linearEquationsFunc(n=2, varRange=20, coeffRange=20): 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)]) + 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)] - + 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) diff --git a/mathgenerator/funcs/logFunc.py b/mathgenerator/funcs/logFunc.py index 8d16214..6fc651b 100644 --- a/mathgenerator/funcs/logFunc.py +++ b/mathgenerator/funcs/logFunc.py @@ -8,5 +8,5 @@ def logFunc(maxBase=3, maxVal=8): problem = "log" + str(b) + "(" + str(c) + ")" solution = str(a) - + return problem, solution diff --git a/mathgenerator/funcs/matrixInversion.py b/mathgenerator/funcs/matrixInversion.py index 822cb83..28080e5 100644 --- a/mathgenerator/funcs/matrixInversion.py +++ b/mathgenerator/funcs/matrixInversion.py @@ -1,6 +1,7 @@ from .__init__ import * import sympy + def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerElementsInInvertedMatrix=False): if OnlyIntegerElementsInInvertedMatrix is True: isItOk = False diff --git a/mathgenerator/funcs/matrixMultiplicationFunc.py b/mathgenerator/funcs/matrixMultiplicationFunc.py index eeaa265..a85cca5 100644 --- a/mathgenerator/funcs/matrixMultiplicationFunc.py +++ b/mathgenerator/funcs/matrixMultiplicationFunc.py @@ -32,10 +32,12 @@ def matrixMultiplicationFunc(maxVal=100): temp += a[r][t] * b[t][c] res[r].append(temp) - problem = f"Multiply \n{a_string}\n and \n\n{b_string}" # consider using a, b instead of a_string, b_string if the problem doesn't look right + # consider using a, b instead of a_string, b_string if the problem doesn't look right + problem = f"Multiply \n{a_string}\n and \n\n{b_string}" solution = matrixMultiplicationFuncHelper(res) return problem, solution + def matrixMultiplicationFuncHelper(inp): m = len(inp) n = len(inp[0]) @@ -47,5 +49,5 @@ def matrixMultiplicationFuncHelper(inp): string += ", "if j < n-1 else "" string += "]\n [" if i < m-1 else "" string += "]]" - - return string \ No newline at end of file + + return string diff --git a/mathgenerator/funcs/meanMedianFunc.py b/mathgenerator/funcs/meanMedianFunc.py index f1d2596..36fc986 100644 --- a/mathgenerator/funcs/meanMedianFunc.py +++ b/mathgenerator/funcs/meanMedianFunc.py @@ -1,6 +1,7 @@ from .__init__ import * -def meanMedianFunc(maxlen = 10): + +def meanMedianFunc(maxlen=10): randomlist = random.sample(range(1, 99), maxlen) total = 0 for n in randomlist: diff --git a/mathgenerator/funcs/moduloFunc.py b/mathgenerator/funcs/moduloFunc.py index 71f1421..2a447c4 100644 --- a/mathgenerator/funcs/moduloFunc.py +++ b/mathgenerator/funcs/moduloFunc.py @@ -5,7 +5,7 @@ def moduloFunc(maxRes=99, maxModulo=99): a = random.randint(0, maxModulo) b = random.randint(0, min(maxRes, maxModulo)) c = a % b if b != 0 else 0 - + problem = str(a) + "%" + str(b) + "=" solution = str(c) return problem, solution diff --git a/mathgenerator/funcs/multiplicationFunc.py b/mathgenerator/funcs/multiplicationFunc.py index 00ebb26..8ad25f6 100644 --- a/mathgenerator/funcs/multiplicationFunc.py +++ b/mathgenerator/funcs/multiplicationFunc.py @@ -5,7 +5,7 @@ def multiplicationFunc(maxRes=99, maxMulti=99): a = random.randint(0, maxMulti) b = random.randint(0, min(int(maxMulti / a), maxRes)) c = a * b - + problem = str(a) + "*" + str(b) + "=" solution = str(c) return problem, solution diff --git a/mathgenerator/funcs/multiplyComplexNumbersFunc.py b/mathgenerator/funcs/multiplyComplexNumbersFunc.py index f959d4d..69ca238 100644 --- a/mathgenerator/funcs/multiplyComplexNumbersFunc.py +++ b/mathgenerator/funcs/multiplyComplexNumbersFunc.py @@ -1,9 +1,11 @@ -from .__init__ import * +from .__init__ import * -def multiplyComplexNumbersFunc(minRealImaginaryNum = -20, maxRealImaginaryNum = 20): - num1 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) - num2 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) +def multiplyComplexNumbersFunc(minRealImaginaryNum=-20, maxRealImaginaryNum=20): + num1 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), + random.randint(minRealImaginaryNum, maxRealImaginaryNum)) + num2 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), + random.randint(minRealImaginaryNum, maxRealImaginaryNum)) problem = f"{num1} * {num2} = " solution = num1 * num2 return problem, solution diff --git a/mathgenerator/funcs/multiplyFractionsFunc.py b/mathgenerator/funcs/multiplyFractionsFunc.py index 14614d6..67c5017 100644 --- a/mathgenerator/funcs/multiplyFractionsFunc.py +++ b/mathgenerator/funcs/multiplyFractionsFunc.py @@ -20,7 +20,7 @@ def multiplyFractionsFunc(maxVal=10): tmp_n = a * c tmp_d = b * d - + gcd = calculate_gcd(tmp_n, tmp_d) x = f"{tmp_n//gcd}/{tmp_d//gcd}" diff --git a/mathgenerator/funcs/multiplyIntToMatrix22.py b/mathgenerator/funcs/multiplyIntToMatrix22.py index 120c202..7808afe 100644 --- a/mathgenerator/funcs/multiplyIntToMatrix22.py +++ b/mathgenerator/funcs/multiplyIntToMatrix22.py @@ -6,7 +6,7 @@ def multiplyIntToMatrix22(maxMatrixVal=10, maxRes=100): 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}]]" diff --git a/mathgenerator/funcs/nthFibonacciNumberFunc.py b/mathgenerator/funcs/nthFibonacciNumberFunc.py index 023a007..d559f1f 100644 --- a/mathgenerator/funcs/nthFibonacciNumberFunc.py +++ b/mathgenerator/funcs/nthFibonacciNumberFunc.py @@ -1,10 +1,11 @@ -from .__init__ import * +from .__init__ import * -def nthFibonacciNumberFunc(maxN = 100): +def nthFibonacciNumberFunc(maxN=100): golden_ratio = (1 + math.sqrt(5))/2 - n = random.randint(1,maxN) + n = random.randint(1, maxN) problem = f"What is the {n}th Fibonacci number?" - ans = round((math.pow(golden_ratio,n) - math.pow(-golden_ratio,-n))/(math.sqrt(5))) + ans = round((math.pow(golden_ratio, n) - + math.pow(-golden_ratio, -n))/(math.sqrt(5))) solution = f"{ans}" return problem, solution diff --git a/mathgenerator/funcs/percentageFunc.py b/mathgenerator/funcs/percentageFunc.py index 19a4203..e69749d 100644 --- a/mathgenerator/funcs/percentageFunc.py +++ b/mathgenerator/funcs/percentageFunc.py @@ -1,6 +1,7 @@ from .__init__ import * -def percentageFunc(maxValue = 99, maxpercentage=99): + +def percentageFunc(maxValue=99, maxpercentage=99): a = random.randint(1, maxpercentage) b = random.randint(1, maxValue) problem = f"What is {a}% of {b}?" diff --git a/mathgenerator/funcs/permutationFunc.py b/mathgenerator/funcs/permutationFunc.py index ffae44e..c62841f 100644 --- a/mathgenerator/funcs/permutationFunc.py +++ b/mathgenerator/funcs/permutationFunc.py @@ -6,5 +6,6 @@ def permutationFunc(maxlength=20): b = random.randint(0, 9) solution = int(math.factorial(a) / (math.factorial(a - b))) - problem = "Number of Permutations from {} objects picked {} at a time = ".format(a, b) + problem = "Number of Permutations from {} objects picked {} at a time = ".format( + a, b) return problem, solution diff --git a/mathgenerator/funcs/powerRuleDifferentiationFunc.py b/mathgenerator/funcs/powerRuleDifferentiationFunc.py index 9dac2db..a14bd90 100644 --- a/mathgenerator/funcs/powerRuleDifferentiationFunc.py +++ b/mathgenerator/funcs/powerRuleDifferentiationFunc.py @@ -12,7 +12,7 @@ def powerRuleDifferentiationFunc(maxCoef=10, maxExp=10, maxTerms=5): solution += " + " coefficient = random.randint(1, maxCoef) exponent = random.randint(1, maxExp) - + problem += str(coefficient) + "x^" + str(exponent) solution += str(coefficient * exponent) + "x^" + str(exponent - 1) return problem, solution diff --git a/mathgenerator/funcs/powerRuleIntegrationFunc.py b/mathgenerator/funcs/powerRuleIntegrationFunc.py index 112f5b5..fb1f62d 100644 --- a/mathgenerator/funcs/powerRuleIntegrationFunc.py +++ b/mathgenerator/funcs/powerRuleIntegrationFunc.py @@ -14,7 +14,8 @@ def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): exponent = random.randint(1, maxExp) problem += str(coefficient) + "x^" + str(exponent) - solution += "(" + str(coefficient) + "/" + str(exponent) + ")x^" + str(exponent + 1) + solution += "(" + str(coefficient) + "/" + \ + str(exponent) + ")x^" + str(exponent + 1) solution += " + c" return problem, solution diff --git a/mathgenerator/funcs/primeFactorsFunc.py b/mathgenerator/funcs/primeFactorsFunc.py index 5e645d2..852821c 100644 --- a/mathgenerator/funcs/primeFactorsFunc.py +++ b/mathgenerator/funcs/primeFactorsFunc.py @@ -16,7 +16,7 @@ def primeFactorsFunc(minVal=1, maxVal=200): if n > 1: factors.append(n) - + problem = f"Find prime factors of {a}" solution = f"{factors}" return problem, solution diff --git a/mathgenerator/funcs/profitLossPercentFunc.py b/mathgenerator/funcs/profitLossPercentFunc.py index 05a3653..49d7f27 100644 --- a/mathgenerator/funcs/profitLossPercentFunc.py +++ b/mathgenerator/funcs/profitLossPercentFunc.py @@ -1,7 +1,7 @@ -from .__init__ import * +from .__init__ import * -def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): +def profitLossPercentFunc(maxCP=1000, maxSP=1000): cP = random.randint(1, maxCP) sP = random.randint(1, maxSP) diff = abs(sP-cP) @@ -12,5 +12,5 @@ def profitLossPercentFunc(maxCP = 1000, maxSP = 1000): percent = diff/cP * 100 problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " solution = percent - - return problem, solution \ No newline at end of file + + return problem, solution diff --git a/mathgenerator/funcs/pythagoreanTheoremFunc.py b/mathgenerator/funcs/pythagoreanTheoremFunc.py index 2776592..17bcd82 100644 --- a/mathgenerator/funcs/pythagoreanTheoremFunc.py +++ b/mathgenerator/funcs/pythagoreanTheoremFunc.py @@ -5,7 +5,7 @@ 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 diff --git a/mathgenerator/funcs/quadraticEquation.py b/mathgenerator/funcs/quadraticEquation.py index 98f895e..73f0ea4 100644 --- a/mathgenerator/funcs/quadraticEquation.py +++ b/mathgenerator/funcs/quadraticEquation.py @@ -4,9 +4,11 @@ from .__init__ import * def quadraticEquation(maxVal=100): a = random.randint(1, maxVal) c = random.randint(1, maxVal) - b = random.randint(round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) - + b = random.randint(round(math.sqrt(4 * a * c)) + 1, + round(math.sqrt(4 * maxVal * maxVal))) + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) D = math.sqrt(b * b - 4 * a * c) - solution = str([round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)]) + solution = str([round((-b + D) / (2 * a), 2), + round((-b - D) / (2 * a), 2)]) return problem, solution diff --git a/mathgenerator/funcs/regularPolygonAngleFunc.py b/mathgenerator/funcs/regularPolygonAngleFunc.py index 569d2d5..5275bef 100644 --- a/mathgenerator/funcs/regularPolygonAngleFunc.py +++ b/mathgenerator/funcs/regularPolygonAngleFunc.py @@ -4,7 +4,7 @@ from .__init__ import * def regularPolygonAngleFunc(minVal=3, maxVal=20): sideNum = random.randint(minVal, maxVal) problem = f"Find the angle of a regular polygon with {sideNum} sides" - + exteriorAngle = round((360 / sideNum), 2) solution = 180 - exteriorAngle return problem, solution diff --git a/mathgenerator/funcs/sectorAreaFunc.py b/mathgenerator/funcs/sectorAreaFunc.py index 6130ad0..d7f9545 100644 --- a/mathgenerator/funcs/sectorAreaFunc.py +++ b/mathgenerator/funcs/sectorAreaFunc.py @@ -1,10 +1,11 @@ from .__init__ import * -def sectorAreaFunc(maxRadius = 49,maxAngle = 359): + +def sectorAreaFunc(maxRadius=49, maxAngle=359): Radius = random.randint(1, maxRadius) Angle = random.randint(1, maxAngle) problem = f"Given radius, {Radius} and angle, {Angle}. Find the area of the sector." secArea = float((Angle / 360) * math.pi*Radius*Radius) formatted_float = "{:.5f}".format(secArea) - solution = f"Area of sector = {formatted_float}" + solution = f"Area of sector = {formatted_float}" return problem, solution diff --git a/mathgenerator/funcs/simpleInterestFunc.py b/mathgenerator/funcs/simpleInterestFunc.py index de997d0..08b0f3b 100644 --- a/mathgenerator/funcs/simpleInterestFunc.py +++ b/mathgenerator/funcs/simpleInterestFunc.py @@ -6,7 +6,8 @@ def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): b = random.randint(1, maxRate) c = random.randint(1, maxTime) d = (a * b * c) / 100 - - problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str(b) + "% rate of interest and for a time period of " + str(c) + " years is = " + + problem = "Simple interest for a principle amount of " + str(a) + " dollars, " + str( + b) + "% rate of interest and for a time period of " + str(c) + " years is = " solution = round(d, 2) return problem, solution diff --git a/mathgenerator/funcs/squareFunc.py b/mathgenerator/funcs/squareFunc.py index 6384197..1d159dc 100644 --- a/mathgenerator/funcs/squareFunc.py +++ b/mathgenerator/funcs/squareFunc.py @@ -4,7 +4,7 @@ from .__init__ import * def squareFunc(maxSquareNum=20): a = random.randint(1, maxSquareNum) b = a * a - + problem = str(a) + "^2" + "=" solution = str(b) return problem, solution diff --git a/mathgenerator/funcs/squareRootFunc.py b/mathgenerator/funcs/squareRootFunc.py index 87152c8..e5d2418 100644 --- a/mathgenerator/funcs/squareRootFunc.py +++ b/mathgenerator/funcs/squareRootFunc.py @@ -4,7 +4,7 @@ from .__init__ import * def squareRootFunc(minNo=1, maxNo=12): b = random.randint(minNo, maxNo) a = b * b - + problem = "sqrt(" + str(a) + ")=" solution = str(b) return problem, solution diff --git a/mathgenerator/funcs/subtractionFunc.py b/mathgenerator/funcs/subtractionFunc.py index 91c8e74..a50537e 100644 --- a/mathgenerator/funcs/subtractionFunc.py +++ b/mathgenerator/funcs/subtractionFunc.py @@ -5,7 +5,7 @@ def subtractionFunc(maxMinuend=99, maxDiff=99): a = random.randint(0, maxMinuend) b = random.randint(max(0, (a - maxDiff)), a) c = a - b - + problem = str(a) + "-" + str(b) + "=" solution = str(c) return problem, solution diff --git a/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py b/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py index 6181e96..8338698 100644 --- a/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py +++ b/mathgenerator/funcs/sumOfAnglesOfPolygonFunc.py @@ -1,10 +1,10 @@ from .__init__ import * -def sumOfAnglesOfPolygonFunc(maxSides = 12): +def sumOfAnglesOfPolygonFunc(maxSides=12): side = random.randint(3, maxSides) sum = (side - 2) * 180 - + problem = f"Sum of angles of polygon with {side} sides = " solution = sum return problem, solution diff --git a/mathgenerator/funcs/surdsComparisonFunc.py b/mathgenerator/funcs/surdsComparisonFunc.py index 161aac3..3035265 100644 --- a/mathgenerator/funcs/surdsComparisonFunc.py +++ b/mathgenerator/funcs/surdsComparisonFunc.py @@ -1,10 +1,10 @@ from .__init__ import * -def surdsComparisonFunc(maxValue = 100, maxRoot = 10): - radicand1,radicand2 = tuple(random.sample(range(1,maxValue),2)) - degree1, degree2 = tuple(random.sample(range(1,maxRoot),2)) - +def surdsComparisonFunc(maxValue=100, maxRoot=10): + radicand1, radicand2 = tuple(random.sample(range(1, maxValue), 2)) + degree1, degree2 = tuple(random.sample(range(1, maxRoot), 2)) + problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" first = math.pow(radicand1, 1/degree1) second = math.pow(radicand2, 1/degree2) diff --git a/mathgenerator/funcs/surfaceAreaCone.py b/mathgenerator/funcs/surfaceAreaCone.py index 8132e7d..53799aa 100644 --- a/mathgenerator/funcs/surfaceAreaCone.py +++ b/mathgenerator/funcs/surfaceAreaCone.py @@ -8,6 +8,6 @@ def surfaceAreaCone(maxRadius=20, maxHeight=50, unit='m'): 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 diff --git a/mathgenerator/funcs/surfaceAreaCuboid.py b/mathgenerator/funcs/surfaceAreaCuboid.py index 3630abc..95fee71 100644 --- a/mathgenerator/funcs/surfaceAreaCuboid.py +++ b/mathgenerator/funcs/surfaceAreaCuboid.py @@ -5,7 +5,7 @@ def surfaceAreaCuboid(maxSide=20, unit='m'): a = random.randint(1, maxSide) b = random.randint(1, maxSide) c = random.randint(1, maxSide) - + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" ans = 2 * (a * b + b * c + c * a) solution = f"{ans} {unit}^2" diff --git a/mathgenerator/funcs/surfaceAreaCylinder.py b/mathgenerator/funcs/surfaceAreaCylinder.py index 92035ba..eacc0be 100644 --- a/mathgenerator/funcs/surfaceAreaCylinder.py +++ b/mathgenerator/funcs/surfaceAreaCylinder.py @@ -4,7 +4,7 @@ from .__init__ import * 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" diff --git a/mathgenerator/funcs/surfaceAreaSphere.py b/mathgenerator/funcs/surfaceAreaSphere.py index 84ce3e1..6b9110d 100644 --- a/mathgenerator/funcs/surfaceAreaSphere.py +++ b/mathgenerator/funcs/surfaceAreaSphere.py @@ -1,9 +1,9 @@ from .__init__ import * -def surfaceAreaSphere(maxSide = 20, unit = 'm'): +def surfaceAreaSphere(maxSide=20, unit='m'): r = random.randint(1, maxSide) - + problem = f"Surface area of Sphere with radius = {r}{unit} is" ans = 4 * math.pi * r * r solution = f"{ans} {unit}^2" diff --git a/mathgenerator/funcs/systemOfEquationsFunc.py b/mathgenerator/funcs/systemOfEquationsFunc.py index fd28eaf..2e82f5f 100644 --- a/mathgenerator/funcs/systemOfEquationsFunc.py +++ b/mathgenerator/funcs/systemOfEquationsFunc.py @@ -36,9 +36,10 @@ def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): # No redundant 1s y_coeff = abs(coeffs[1]) if abs(coeffs[1]) != 1 else '' # Don't include if 0, unless x is also 0 (probably never happens) - y_str = f'{y_coeff}y' if coeffs[1] != 0 else ('' if x_str != '' else '0') + y_str = f'{y_coeff}y' if coeffs[1] != 0 else ( + '' if x_str != '' else '0') return f'{x_str}{op}{y_str} = {coeffs[2]}' - + problem = f"{coeffToFuncString(new_c1)}, {coeffToFuncString(new_c2)}" solution = f"x = {x}, y = {y}" return problem, solution diff --git a/mathgenerator/funcs/thirdAngleOfTriangleFunc.py b/mathgenerator/funcs/thirdAngleOfTriangleFunc.py index 688b209..5268ceb 100644 --- a/mathgenerator/funcs/thirdAngleOfTriangleFunc.py +++ b/mathgenerator/funcs/thirdAngleOfTriangleFunc.py @@ -5,7 +5,7 @@ def thirdAngleOfTriangleFunc(maxAngle=89): angle1 = random.randint(1, maxAngle) angle2 = random.randint(1, maxAngle) angle3 = 180 - (angle1 + angle2) - + problem = f"Third angle of triangle with angles {angle1} and {angle2} = " solution = angle3 return problem, solution diff --git a/mathgenerator/funcs/vectorCrossFunc.py b/mathgenerator/funcs/vectorCrossFunc.py index 07ff0b2..21bcb0e 100644 --- a/mathgenerator/funcs/vectorCrossFunc.py +++ b/mathgenerator/funcs/vectorCrossFunc.py @@ -2,12 +2,12 @@ from .__init__ import * 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 = [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]] - problem = str(a) + " X " + str(b) + " = " - solution = str(c) - return problem, solution + problem = str(a) + " X " + str(b) + " = " + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/vectorDotFunc.py b/mathgenerator/funcs/vectorDotFunc.py index 0364c65..011beb3 100644 --- a/mathgenerator/funcs/vectorDotFunc.py +++ b/mathgenerator/funcs/vectorDotFunc.py @@ -2,10 +2,10 @@ from .__init__ import * def vectorDotFunc(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[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a = [random.randint(minVal, maxVal) for i in range(3)] + b = [random.randint(minVal, maxVal) for i in range(3)] + c = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] - problem = str(a) + " . " + str(b) + " = " - solution = str(c) - return problem, solution + problem = str(a) + " . " + str(b) + " = " + solution = str(c) + return problem, solution diff --git a/mathgenerator/funcs/volumeCone.py b/mathgenerator/funcs/volumeCone.py index 4cd5512..c237bca 100644 --- a/mathgenerator/funcs/volumeCone.py +++ b/mathgenerator/funcs/volumeCone.py @@ -4,7 +4,7 @@ from .__init__ import * 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" diff --git a/mathgenerator/funcs/volumeCube.py b/mathgenerator/funcs/volumeCube.py index e487173..6a52da4 100644 --- a/mathgenerator/funcs/volumeCube.py +++ b/mathgenerator/funcs/volumeCube.py @@ -3,7 +3,7 @@ from .__init__ import * 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" diff --git a/mathgenerator/funcs/volumeCuboid.py b/mathgenerator/funcs/volumeCuboid.py index a435784..b0a2490 100644 --- a/mathgenerator/funcs/volumeCuboid.py +++ b/mathgenerator/funcs/volumeCuboid.py @@ -5,7 +5,7 @@ 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" diff --git a/mathgenerator/funcs/volumeCylinder.py b/mathgenerator/funcs/volumeCylinder.py index ecd78da..38dfd64 100644 --- a/mathgenerator/funcs/volumeCylinder.py +++ b/mathgenerator/funcs/volumeCylinder.py @@ -4,7 +4,7 @@ from .__init__ import * 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" diff --git a/mathgenerator/funcs/volumeSphereFunc.py b/mathgenerator/funcs/volumeSphereFunc.py index 618dbd3..137db4f 100644 --- a/mathgenerator/funcs/volumeSphereFunc.py +++ b/mathgenerator/funcs/volumeSphereFunc.py @@ -1,10 +1,10 @@ from .__init__ import * -def volumeSphereFunc(maxRadius = 100): - r=random.randint(1,maxRadius) - - problem=f"Volume of sphere with radius {r} m = " - ans=(4*math.pi/3)*r*r*r +def volumeSphereFunc(maxRadius=100): + r = random.randint(1, maxRadius) + + problem = f"Volume of sphere with radius {r} m = " + ans = (4*math.pi/3)*r*r*r solution = f"{ans} m^3" - return problem,solution + return problem, solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index ae84143..dc29a6e 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -7,6 +7,8 @@ from .__init__ import getGenList genList = getGenList() # || Generator class + + class Generator: def __init__(self, title, id, generalProb, generalSol, func): self.title = title @@ -29,90 +31,164 @@ def genById(id): return(generator()) # -#def getGenList(): +# def getGenList(): # return(genList) + # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) # Funcs_start - DO NOT REMOVE! #addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) -multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) +multiplication = Generator( + "Multiplication", 2, "a*b=", "c", multiplicationFunc) division = Generator("Division", 3, "a/b=", "c", divisionFunc) -binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) +binaryComplement1s = Generator( + "Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) -powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) +powerRuleDifferentiation = Generator( + "Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) square = Generator("Square", 8, "a^2", "b", squareFunc) -lcm = Generator("LCM (Least Common Multiple)", 9,"LCM of a and b = ", "c", lcmFunc) -gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", "c", gcdFunc) -basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) +lcm = Generator("LCM (Least Common Multiple)", 9, + "LCM of a and b = ", "c", lcmFunc) +gcd = Generator("GCD (Greatest Common Denominator)", + 10, "GCD of a and b = ", "c", gcdFunc) +basicAlgebra = Generator( + "Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary", 14,"Binary of a=", "b", DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal", 15,"Decimal of a=", "b", BinaryToDecimalFunc) -fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) -intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix",17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) -areaOfTriangle = Generator("Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) -doesTriangleExist = Generator("Triangle exists check", 19,"Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) -midPointOfTwoPoint = Generator("Midpoint of the two point", 20,"((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) -factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) -thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) -systemOfEquations = Generator("Solve a System of Equations in R^2", 23, "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) -distance2Point = Generator("Distance between 2 points", 24, "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) -pythagoreanTheorem = Generator("Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) -linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc)# This has multiple variables whereas #23 has only x and y -primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) -fractionMultiplication = Generator("Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon", 29,"Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects", 30, "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) +decimalToBinary = Generator("Decimal to Binary", 14, + "Binary of a=", "b", DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15, + "Decimal of a=", "b", BinaryToDecimalFunc) +fractionDivision = Generator( + "Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) +intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", + 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) +areaOfTriangle = Generator( + "Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) +doesTriangleExist = Generator("Triangle exists check", 19, + "Does triangle with sides a, b and c exist?", "Yes/No", isTriangleValidFunc) +midPointOfTwoPoint = Generator("Midpoint of the two point", 20, + "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) +factoring = Generator("Factoring Quadratic", 21, + "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) +thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, + "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) +systemOfEquations = Generator("Solve a System of Equations in R^2", 23, + "2x + 5y = 13, -3x - 3y = -6", "x = -1, y = 3", systemOfEquationsFunc) +distance2Point = Generator("Distance between 2 points", 24, + "Find the distance between (x1,y1) and (x2,y2)", "sqrt(distanceSquared)", distanceTwoPointsFunc) +pythagoreanTheorem = Generator( + "Pythagorean Theorem", 25, "The hypotenuse of a right triangle given the other two lengths a and b = ", "hypotenuse", pythagoreanTheoremFunc) +# This has multiple variables whereas #23 has only x and y +linearEquations = Generator( + "Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) +primeFactors = Generator("Prime Factorisation", 27, + "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) +fractionMultiplication = Generator( + "Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) +angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, + "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) +combinations = Generator("Combinations of Objects", 30, + "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator("Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) -surfaceAreaCuboidGen = Generator("Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) -surfaceAreaCylinderGen = Generator("Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) -volumeCubeGen = Generator("Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) -volumeCuboidGen = Generator("Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) -volumeCylinderGen = Generator( "Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) -surfaceAreaConeGen = Generator( "Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) -volumeConeGen = Generator( "Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) -commonFactors = Generator("Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) -intersectionOfTwoLines = Generator("Intersection of Two Lines", 41,"Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) -permutations = Generator("Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) -vectorCross = Generator("Cross Product of 2 Vectors",43, "a X b = ", "c", vectorCrossFunc) -compareFractions = Generator("Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) -simpleInterest = Generator("Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices",46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) -powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49,"Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) -quadraticEquationSolve = Generator("Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) -hcf = Generator("HCF (Highest Common Factor)", 51,"HCF of a and b = ", "c", hcfFunc) -diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice",52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) -exponentiation = Generator("Exponentiation", 53, "a^b = ", "c", exponentiationFunc) -confidenceInterval = Generator("Confidence interval For sample S",54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) -surdsComparison = Generator("Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers","prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) -basicTrigonometry = Generator("Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) -sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58,"Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) -dataSummary = Generator("Mean,Standard Deviation,Variance",59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) -surfaceAreaSphereGen = Generator("Surface Area of Sphere", 60, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) -volumeSphere = Generator("Volume of Sphere", 61, "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) -nthFibonacciNumberGen = Generator("nth Fibonacci number", 62, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) -profitLossPercent = Generator("Profit or Loss Percent", 63, "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) -binaryToHex = Generator("Binary to Hexidecimal", 64, "Hexidecimal of a=", "b", binaryToHexFunc) -complexNumMultiply = Generator("Multiplication of 2 complex numbers", 65, "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) -geometricprogression=Generator("Geometric Progression", 66, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) -geometricMean=Generator("Geometric Mean of N Numbers",67,"Geometric mean of n numbers A1 , A2 , ... , An = ","(A1*A2*...An)^(1/n) = ans",geometricMeanFunc) -harmonicMean=Generator("Harmonic Mean of N Numbers",68,"Harmonic mean of n numbers A1 , A2 , ... , An = "," n/((1/A1) + (1/A2) + ... + (1/An)) = ans",harmonicMeanFunc) -eucldianNorm=Generator("Euclidian norm or L2 norm of a vector", 69, "Euclidian Norm of a vector V:[v1, v2, ......., vn]", "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNormFunc) -angleBtwVectors=Generator("Angle between 2 vectors", 70, "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", angleBtwVectorsFunc) -absoluteDifference=Generator("Absolute difference between two numbers", 71, "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc) -vectorDot = Generator("Dot Product of 2 Vectors", 72, "a . b = ", "c", vectorDotFunc) -binary2sComplement = Generator("Binary 2's Complement", 73, "2's complement of 11010110 =", "101010", binary2sComplementFunc) -invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", "A^(-1)", matrixInversion) -sectorArea=Generator("Area of a Sector", 75,"Area of a sector with radius, r and angle, a ","Area",sectorAreaFunc) -meanMedian=Generator("Mean and Median", 76,"Mean and median of given set of numbers","Mean, Median",meanMedianFunc) -intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 77, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) -compoundInterest = Generator("Compound Interest", 78, "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", "A dollars", compoundInterestFunc) -decimalToHexadeci = Generator("Decimal to Hexadecimal", 79,"Binary of a=", "b", deciToHexaFunc) -percentage = Generator("Percentage of a number",80,"What is a% of b?","percentage",percentageFunc) +surfaceAreaCubeGen = Generator( + "Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +surfaceAreaCuboidGen = Generator( + "Surface Area of Cuboid", 33, "Surface area of cuboid with sides = a units, b units, c units is", "d units^2", surfaceAreaCuboid) +surfaceAreaCylinderGen = Generator( + "Surface Area of Cylinder", 34, "Surface area of cylinder with height = a units and radius = b units is", "c units^2", surfaceAreaCylinder) +volumeCubeGen = Generator( + "Volum of Cube", 35, "Volume of cube with side a units is", "b units^3", volumeCube) +volumeCuboidGen = Generator( + "Volume of Cuboid", 36, "Volume of cuboid with sides = a units, b units, c units is", "d units^3", volumeCuboid) +volumeCylinderGen = Generator( + "Volume of cylinder", 37, "Volume of cylinder with height = a units and radius = b units is", "c units^3", volumeCylinder) +surfaceAreaConeGen = Generator( + "Surface Area of cone", 38, "Surface area of cone with height = a units and radius = b units is", "c units^2", surfaceAreaCone) +volumeConeGen = Generator( + "Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) +commonFactors = Generator( + "Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) +intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, + "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) +permutations = Generator( + "Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) +vectorCross = Generator("Cross Product of 2 Vectors", + 43, "a X b = ", "c", vectorCrossFunc) +compareFractions = Generator( + "Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) +simpleInterest = Generator( + "Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) +matrixMultiplication = Generator("Multiplication of two matrices", + 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) +CubeRoot = Generator( + "Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) +powerRuleIntegration = Generator( + "Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) +fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, + "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) +quadraticEquationSolve = Generator( + "Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) +hcf = Generator("HCF (Highest Common Factor)", 51, + "HCF of a and b = ", "c", hcfFunc) +diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice", + 52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) +exponentiation = Generator( + "Exponentiation", 53, "a^b = ", "c", exponentiationFunc) +confidenceInterval = Generator("Confidence interval For sample S", + 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) +surdsComparison = Generator( + "Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) +fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers", + "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) +basicTrigonometry = Generator( + "Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) +sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, + "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) +dataSummary = Generator("Mean,Standard Deviation,Variance", + 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) +surfaceAreaSphereGen = Generator( + "Surface Area of Sphere", 60, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) +volumeSphere = Generator("Volume of Sphere", 61, + "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) +nthFibonacciNumberGen = Generator( + "nth Fibonacci number", 62, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) +profitLossPercent = Generator("Profit or Loss Percent", 63, + "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) +binaryToHex = Generator("Binary to Hexidecimal", 64, + "Hexidecimal of a=", "b", binaryToHexFunc) +complexNumMultiply = Generator("Multiplication of 2 complex numbers", 65, + "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) +geometricprogression = Generator( + "Geometric Progression", 66, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) +geometricMean = Generator("Geometric Mean of N Numbers", 67, + "Geometric mean of n numbers A1 , A2 , ... , An = ", "(A1*A2*...An)^(1/n) = ans", geometricMeanFunc) +harmonicMean = Generator("Harmonic Mean of N Numbers", 68, "Harmonic mean of n numbers A1 , A2 , ... , An = ", + " n/((1/A1) + (1/A2) + ... + (1/An)) = ans", harmonicMeanFunc) +eucldianNorm = Generator("Euclidian norm or L2 norm of a vector", 69, + "Euclidian Norm of a vector V:[v1, v2, ......., vn]", "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNormFunc) +angleBtwVectors = Generator("Angle between 2 vectors", 70, + "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", angleBtwVectorsFunc) +absoluteDifference = Generator("Absolute difference between two numbers", 71, + "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc) +vectorDot = Generator("Dot Product of 2 Vectors", 72, + "a . b = ", "c", vectorDotFunc) +binary2sComplement = Generator("Binary 2's Complement", 73, + "2's complement of 11010110 =", "101010", binary2sComplementFunc) +invertmatrix = Generator("Inverse of a Matrix", 74, + "Inverse of a matrix A is", "A^(-1)", matrixInversion) +sectorArea = Generator("Area of a Sector", 75, + "Area of a sector with radius, r and angle, a ", "Area", sectorAreaFunc) +meanMedian = Generator("Mean and Median", 76, + "Mean and median of given set of numbers", "Mean, Median", meanMedianFunc) +intMatrix22determinant = Generator( + "Determinant to 2x2 Matrix", 77, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) +compoundInterest = Generator( + "Compound Interest", 78, "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", "A dollars", compoundInterestFunc) +decimalToHexadeci = Generator( + "Decimal to Hexadecimal", 79, "Binary of a=", "b", deciToHexaFunc) +percentage = Generator("Percentage of a number", 80, + "What is a% of b?", "percentage", percentageFunc) diff --git a/setup.py b/setup.py index 8a88d21..981b662 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ setup( license='MIT', packages=find_packages(), install_requires=[ - + ], entry_points={ } diff --git a/test.py b/test.py index 0de128e..1302ce5 100644 --- a/test.py +++ b/test.py @@ -1,6 +1,6 @@ from mathgenerator import mathgen -#test your generators here +# test your generators here print(mathgen.addition()) print(mathgen.genById(79)) From 233f8bf180289199ce433ddd27fe59f227b33f7f Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 14:00:28 -0400 Subject: [PATCH 107/116] some more lint fixes --- mathgenerator/funcs/absoluteDifferenceFunc.py | 6 +++--- mathgenerator/funcs/determinantToMatrix22.py | 2 +- mathgenerator/funcs/geomProgrFunc.py | 14 +++++++------- mathgenerator/funcs/matrixMultiplicationFunc.py | 4 ++-- mathgenerator/funcs/surdsComparisonFunc.py | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/mathgenerator/funcs/absoluteDifferenceFunc.py b/mathgenerator/funcs/absoluteDifferenceFunc.py index 075d1c2..138c8de 100644 --- a/mathgenerator/funcs/absoluteDifferenceFunc.py +++ b/mathgenerator/funcs/absoluteDifferenceFunc.py @@ -2,9 +2,9 @@ from .__init__ import * def absoluteDifferenceFunc(maxA=100, maxB=100): - a = random.randint(-1*maxA, maxA) - b = random.randint(-1*maxB, maxB) - absDiff = abs(a-b) + a = random.randint(-1 * maxA, maxA) + b = random.randint(-1 * maxB, maxB) + absDiff = abs(a - b) problem = "Absolute difference between numbers " + \ str(a) + " and " + str(b) + " = " diff --git a/mathgenerator/funcs/determinantToMatrix22.py b/mathgenerator/funcs/determinantToMatrix22.py index c54028d..33b4004 100644 --- a/mathgenerator/funcs/determinantToMatrix22.py +++ b/mathgenerator/funcs/determinantToMatrix22.py @@ -7,7 +7,7 @@ def determinantToMatrix22(maxMatrixVal=100): c = random.randint(0, maxMatrixVal) d = random.randint(0, maxMatrixVal) - determinant = a*d - b*c + determinant = a * d - b * c problem = f"Det([[{a}, {b}], [{c}, {d}]]) = " solution = f" {determinant}" return problem, solution diff --git a/mathgenerator/funcs/geomProgrFunc.py b/mathgenerator/funcs/geomProgrFunc.py index d051f85..70d3dcc 100644 --- a/mathgenerator/funcs/geomProgrFunc.py +++ b/mathgenerator/funcs/geomProgrFunc.py @@ -4,15 +4,15 @@ from .__init__ import * def geomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, sum_term=5): r = random.randint(min_value, max_value) a = random.randint(min_value, max_value) - n_term = random.randint(number_values, number_values+5) - sum_term = random.randint(number_values, number_values+5) + n_term = random.randint(number_values, number_values + 5) + sum_term = random.randint(number_values, number_values + 5) GP = [] for i in range(number_values): - GP.append(a*(r**i)) - problem = "For the given GP "+str(GP)+" ,Find the value of a,common ratio,"+str( - n_term)+"th term value, sum upto "+str(sum_term)+"th term" - value_nth_term = a*(r**(n_term-1)) - sum_till_nth_term = a*((r**sum_term-1)/(r-1)) + GP.append(a * (r ** i)) + problem = "For the given GP " + str(GP) + " ,Find the value of a,common ratio,"+str( + n_term) + "th term value, sum upto " + str(sum_term) + "th term" + value_nth_term = a * (r ** (n_term - 1)) + sum_till_nth_term = a * ((r ** sum_term - 1)/(r - 1)) solution = "The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format( a, r, n_term, value_nth_term, sum_term, sum_till_nth_term) return problem, solution diff --git a/mathgenerator/funcs/matrixMultiplicationFunc.py b/mathgenerator/funcs/matrixMultiplicationFunc.py index a85cca5..727112e 100644 --- a/mathgenerator/funcs/matrixMultiplicationFunc.py +++ b/mathgenerator/funcs/matrixMultiplicationFunc.py @@ -46,8 +46,8 @@ def matrixMultiplicationFuncHelper(inp): for i in range(m): for j in range(n): string += f"{inp[i][j]: 6d}" - string += ", "if j < n-1 else "" - string += "]\n [" if i < m-1 else "" + string += ", "if j < n - 1 else "" + string += "]\n [" if i < m - 1 else "" string += "]]" return string diff --git a/mathgenerator/funcs/surdsComparisonFunc.py b/mathgenerator/funcs/surdsComparisonFunc.py index 3035265..e005d3f 100644 --- a/mathgenerator/funcs/surdsComparisonFunc.py +++ b/mathgenerator/funcs/surdsComparisonFunc.py @@ -6,8 +6,8 @@ def surdsComparisonFunc(maxValue=100, maxRoot=10): degree1, degree2 = tuple(random.sample(range(1, maxRoot), 2)) problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" - first = math.pow(radicand1, 1/degree1) - second = math.pow(radicand2, 1/degree2) + first = math.pow(radicand1, 1 / degree1) + second = math.pow(radicand2, 1 / degree2) solution = "=" if first > second: From 40f2ce1af3d3c7e9489a10cd355b668e9a8bbc05 Mon Sep 17 00:00:00 2001 From: Nitsujed <jed9340@gmail.com> Date: Mon, 19 Oct 2020 14:04:35 -0400 Subject: [PATCH 108/116] Added Celsius to Fahrenheit Conversion formula --- mathgenerator/funcs/celsiustofahrenheit.py | 11 +++++++++++ mathgenerator/mathgen.py | 1 + 2 files changed, 12 insertions(+) create mode 100644 mathgenerator/funcs/celsiustofahrenheit.py diff --git a/mathgenerator/funcs/celsiustofahrenheit.py b/mathgenerator/funcs/celsiustofahrenheit.py new file mode 100644 index 0000000..ec981db --- /dev/null +++ b/mathgenerator/funcs/celsiustofahrenheit.py @@ -0,0 +1,11 @@ +from .__init__ import * +from ..__init__ import Generator + +def celsiustofahrenheit(maxTemp=100): + celsius = random.randint(-50, maxTemp) + fahrenheit = (celsius * (9/5)) +32 + problem = "Convert", str(celsius), "deg Celsius to degrees Fahrenheit =" + solution = str(fahrenheit) + return problem, solution + +celsiustofahrenheit = Generator("Celsius To Fahrenheit", 81, "(C +(9/5))+32=", "F", celsiustofahrenheit) diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index ae84143..00bde03 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -116,3 +116,4 @@ intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 77, "Det([[a,b], compoundInterest = Generator("Compound Interest", 78, "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", "A dollars", compoundInterestFunc) decimalToHexadeci = Generator("Decimal to Hexadecimal", 79,"Binary of a=", "b", deciToHexaFunc) percentage = Generator("Percentage of a number",80,"What is a% of b?","percentage",percentageFunc) +celsiustofahrenheit = Generator("Celsius To Fahrenheit", 81, "(C +(9/5))+32=", "F", celsiustofahrenheit) From 2f7af1dfd8af78d2fe6e6be67a3eada2543c0d41 Mon Sep 17 00:00:00 2001 From: Nitsujed <jed9340@gmail.com> Date: Mon, 19 Oct 2020 14:05:22 -0400 Subject: [PATCH 109/116] Changed deg to degrees --- mathgenerator/funcs/celsiustofahrenheit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/funcs/celsiustofahrenheit.py b/mathgenerator/funcs/celsiustofahrenheit.py index ec981db..fd2ca82 100644 --- a/mathgenerator/funcs/celsiustofahrenheit.py +++ b/mathgenerator/funcs/celsiustofahrenheit.py @@ -4,7 +4,7 @@ from ..__init__ import Generator def celsiustofahrenheit(maxTemp=100): celsius = random.randint(-50, maxTemp) fahrenheit = (celsius * (9/5)) +32 - problem = "Convert", str(celsius), "deg Celsius to degrees Fahrenheit =" + problem = "Convert", str(celsius), "degrees Celsius to degrees Fahrenheit =" solution = str(fahrenheit) return problem, solution From 90a794cc05d898e9bac6052aa08e45b58e80e2c3 Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 14:08:13 -0400 Subject: [PATCH 110/116] yapf edits --- makeReadme.py | 4 +- mathgenerator/__init__.py | 5 +- mathgenerator/funcs/DiceSumProbFunc.py | 12 +- mathgenerator/funcs/__init__.py | 4 +- mathgenerator/funcs/areaOfTriangleFunc.py | 2 +- mathgenerator/funcs/basicAlgebraFunc.py | 2 +- mathgenerator/funcs/basicTrigonometryFunc.py | 16 +- mathgenerator/funcs/binaryComplement1sFunc.py | 2 +- mathgenerator/funcs/combinationsFunc.py | 1 - mathgenerator/funcs/compareFractionsFunc.py | 4 +- mathgenerator/funcs/compoundInterestFunc.py | 13 +- mathgenerator/funcs/confidenceIntervalFunc.py | 10 +- mathgenerator/funcs/dataSummaryFunc.py | 10 +- mathgenerator/funcs/distanceTwoPointsFunc.py | 2 +- mathgenerator/funcs/divideFractionsFunc.py | 2 +- mathgenerator/funcs/exponentiationFunc.py | 2 +- mathgenerator/funcs/fibonacciSeriesFunc.py | 4 +- mathgenerator/funcs/geomProgrFunc.py | 17 +- mathgenerator/funcs/geometricMeanFunc.py | 8 +- mathgenerator/funcs/harmonicMeanFunc.py | 8 +- mathgenerator/funcs/hcfFunc.py | 2 +- .../funcs/intersectionOfTwoLinesFunc.py | 18 +- mathgenerator/funcs/isTriangleValidFunc.py | 4 +- mathgenerator/funcs/linearEquationsFunc.py | 10 +- mathgenerator/funcs/matrixInversion.py | 28 +- .../funcs/matrixMultiplicationFunc.py | 2 +- mathgenerator/funcs/meanMedianFunc.py | 4 +- .../funcs/multiplyComplexNumbersFunc.py | 3 +- mathgenerator/funcs/multiplyFractionsFunc.py | 2 +- mathgenerator/funcs/nthFibonacciNumberFunc.py | 6 +- mathgenerator/funcs/percentageFunc.py | 2 +- mathgenerator/funcs/profitLossPercentFunc.py | 6 +- mathgenerator/funcs/quadraticEquation.py | 9 +- mathgenerator/funcs/sectorAreaFunc.py | 2 +- mathgenerator/funcs/simpleInterestFunc.py | 6 +- mathgenerator/funcs/systemOfEquationsFunc.py | 5 +- mathgenerator/funcs/vectorCrossFunc.py | 7 +- mathgenerator/funcs/volumeSphereFunc.py | 2 +- mathgenerator/mathgen.py | 313 +++++++++++------- setup.py | 25 +- tests/test_mathgen.py | 3 +- 41 files changed, 347 insertions(+), 240 deletions(-) diff --git a/makeReadme.py b/makeReadme.py index 35c3b8a..7a7a66d 100644 --- a/makeReadme.py +++ b/makeReadme.py @@ -9,7 +9,7 @@ with open('mathgenerator/mathgen.py', 'r') as f: allRows = [] # get the first line of the functions in mathgen.py -line = lines.index('# Funcs_start - DO NOT REMOVE!\n')+1 +line = lines.index('# Funcs_start - DO NOT REMOVE!\n') + 1 for item in wList: myGen = item[2] # NOTE: renamed 'sol' to 'solu' to make it look nicer @@ -41,7 +41,7 @@ with open('README.md', "r") as g: lines = g.readlines() line = lines.index('[//]: # list start\n') - lines = lines[:line+1] + lines = lines[:line + 1] for row in allRows: tableLine = "| " + str(row[0]) + " | " + str(row[1]) + " | " + str( diff --git a/mathgenerator/__init__.py b/mathgenerator/__init__.py index 01875a9..0a261d0 100644 --- a/mathgenerator/__init__.py +++ b/mathgenerator/__init__.py @@ -1,4 +1,3 @@ - genList = [] @@ -12,7 +11,9 @@ class Generator: genList.append([id, title, self]) def __str__(self): - return str(self.id) + " " + self.title + " " + self.generalProb + " " + self.generalSol + return str( + self.id + ) + " " + self.title + " " + self.generalProb + " " + self.generalSol def __call__(self, **kwargs): return self.func(**kwargs) diff --git a/mathgenerator/funcs/DiceSumProbFunc.py b/mathgenerator/funcs/DiceSumProbFunc.py index f9be9aa..8f05a4f 100644 --- a/mathgenerator/funcs/DiceSumProbFunc.py +++ b/mathgenerator/funcs/DiceSumProbFunc.py @@ -3,22 +3,22 @@ from .__init__ import * def DiceSumProbFunc(maxDice=3): a = random.randint(1, maxDice) - b = random.randint(a, 6*a) + b = random.randint(a, 6 * a) count = 0 for i in [1, 2, 3, 4, 5, 6]: if a == 1: if i == b: - count = count+1 + count = count + 1 elif a == 2: for j in [1, 2, 3, 4, 5, 6]: - if i+j == b: - count = count+1 + if i + j == b: + count = count + 1 elif a == 3: for j in [1, 2, 3, 4, 5, 6]: for k in [1, 2, 3, 4, 5, 6]: - if i+j+k == b: - count = count+1 + if i + j + k == b: + count = count + 1 problem = "If {} dice are rolled at the same time, the probability of getting a sum of {} =".format( a, b) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index b0cc39e..7ef9c50 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -77,8 +77,8 @@ from .absoluteDifferenceFunc import * from .vectorDotFunc import * from .binary2sComplement import * from .matrixInversion import * -from .sectorAreaFunc import* -from .meanMedianFunc import* +from .sectorAreaFunc import * +from .meanMedianFunc import * from .determinantToMatrix22 import * from .compoundInterestFunc import * from .deciToHexaFunc import * diff --git a/mathgenerator/funcs/areaOfTriangleFunc.py b/mathgenerator/funcs/areaOfTriangleFunc.py index 8506b55..a795a99 100644 --- a/mathgenerator/funcs/areaOfTriangleFunc.py +++ b/mathgenerator/funcs/areaOfTriangleFunc.py @@ -7,7 +7,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 + area = (s * (s - a) * (s - b) * (s - c))**0.5 problem = "Area of triangle with side lengths: " + \ str(a) + " " + str(b) + " " + str(c) + " = " diff --git a/mathgenerator/funcs/basicAlgebraFunc.py b/mathgenerator/funcs/basicAlgebraFunc.py index 1d927ef..d11000d 100644 --- a/mathgenerator/funcs/basicAlgebraFunc.py +++ b/mathgenerator/funcs/basicAlgebraFunc.py @@ -8,7 +8,7 @@ def basicAlgebraFunc(maxVariable=10): # calculate gcd def calculate_gcd(x, y): - while(y): + while (y): x, y = y, x % y return x diff --git a/mathgenerator/funcs/basicTrigonometryFunc.py b/mathgenerator/funcs/basicTrigonometryFunc.py index 8ce32a4..520b8a3 100644 --- a/mathgenerator/funcs/basicTrigonometryFunc.py +++ b/mathgenerator/funcs/basicTrigonometryFunc.py @@ -2,15 +2,23 @@ from .__init__ import * # Handles degrees in quadrant one -def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], functions=["sin", "cos", "tan"]): +def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], + functions=["sin", "cos", "tan"]): angle = random.choice(angles) function = random.choice(functions) problem = f"What is {function}({angle})?" - expression = 'math.'+function+'(math.radians(angle))' - result_fraction_map = {0.0: "0", 0.5: "1/2", 0.71: "1/√2", - 0.87: "√3/2", 1.0: "1", 0.58: "1/√3", 1.73: "√3"} + expression = 'math.' + function + '(math.radians(angle))' + result_fraction_map = { + 0.0: "0", + 0.5: "1/2", + 0.71: "1/√2", + 0.87: "√3/2", + 1.0: "1", + 0.58: "1/√3", + 1.73: "√3" + } solution = result_fraction_map[round(eval(expression), 2)] if round( eval(expression), 2) <= 99999 else "∞" # for handling the ∞ condition diff --git a/mathgenerator/funcs/binaryComplement1sFunc.py b/mathgenerator/funcs/binaryComplement1sFunc.py index 1dbb1b2..009feea 100644 --- a/mathgenerator/funcs/binaryComplement1sFunc.py +++ b/mathgenerator/funcs/binaryComplement1sFunc.py @@ -10,6 +10,6 @@ def binaryComplement1sFunc(maxDigits=10): question += temp answer += "0" if temp == "1" else "1" - problem = question+"=" + problem = question + "=" solution = answer return problem, solution diff --git a/mathgenerator/funcs/combinationsFunc.py b/mathgenerator/funcs/combinationsFunc.py index 6ea2e6d..f213222 100644 --- a/mathgenerator/funcs/combinationsFunc.py +++ b/mathgenerator/funcs/combinationsFunc.py @@ -2,7 +2,6 @@ from .__init__ import * def combinationsFunc(maxlength=20): - def factorial(a): d = 1 for i in range(a): diff --git a/mathgenerator/funcs/compareFractionsFunc.py b/mathgenerator/funcs/compareFractionsFunc.py index 56c4714..1c4072a 100644 --- a/mathgenerator/funcs/compareFractionsFunc.py +++ b/mathgenerator/funcs/compareFractionsFunc.py @@ -15,9 +15,9 @@ def compareFractionsFunc(maxVal=10): first = a / b second = c / d - if(first > second): + if (first > second): solution = ">" - elif(first < second): + elif (first < second): solution = "<" else: solution = "=" diff --git a/mathgenerator/funcs/compoundInterestFunc.py b/mathgenerator/funcs/compoundInterestFunc.py index 59cac26..7914828 100644 --- a/mathgenerator/funcs/compoundInterestFunc.py +++ b/mathgenerator/funcs/compoundInterestFunc.py @@ -1,13 +1,18 @@ from .__init__ import * -def compoundInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10, maxPeriod=10): +def compoundInterestFunc(maxPrinciple=10000, + maxRate=10, + maxTime=10, + maxPeriod=10): p = random.randint(100, maxPrinciple) r = random.randint(1, maxRate) t = random.randint(1, maxTime) n = random.randint(1, maxPeriod) - A = p * ((1 + (r/(100*n))**(n*t))) - problem = "Compound Interest for a principle amount of " + str(p) + " dollars, " + str( - r) + "% rate of interest and for a time period of " + str(t) + " compounded monthly is = " + A = p * ((1 + (r / (100 * n))**(n * t))) + problem = "Compound Interest for a principle amount of " + str( + p) + " dollars, " + str( + r) + "% rate of interest and for a time period of " + str( + t) + " compounded monthly is = " solution = round(A, 2) return problem, solution diff --git a/mathgenerator/funcs/confidenceIntervalFunc.py b/mathgenerator/funcs/confidenceIntervalFunc.py index babdabe..b631caf 100644 --- a/mathgenerator/funcs/confidenceIntervalFunc.py +++ b/mathgenerator/funcs/confidenceIntervalFunc.py @@ -16,16 +16,16 @@ def confidenceIntervalFunc(): count = i + mean mean = count - mean = mean/n + mean = mean / n for i in lst: - x = (i-mean)**2+sd + x = (i - mean)**2 + sd sd = x - sd = sd/n - standard_error = lst_t[j]*math.sqrt(sd/n) + sd = sd / n + standard_error = lst_t[j] * math.sqrt(sd / n) problem = 'The confidence interval for sample {} with {}% confidence is'.format( [x for x in lst], lst_per[j]) - solution = '({}, {})'.format(mean+standard_error, mean-standard_error) + solution = '({}, {})'.format(mean + standard_error, mean - standard_error) return problem, solution diff --git a/mathgenerator/funcs/dataSummaryFunc.py b/mathgenerator/funcs/dataSummaryFunc.py index e0e0bad..1059b1f 100644 --- a/mathgenerator/funcs/dataSummaryFunc.py +++ b/mathgenerator/funcs/dataSummaryFunc.py @@ -9,20 +9,20 @@ def dataSummaryFunc(number_values=15, minval=5, maxval=50): random_list.append(n) a = sum(random_list) - mean = a/number_values + mean = a / number_values var = 0 for i in range(number_values): - var += (random_list[i]-mean)**2 + var += (random_list[i] - mean)**2 # we're printing stuff here? print(random_list) print(mean) - print(var/number_values) - print((var/number_values)**0.5) + print(var / number_values) + print((var / number_values)**0.5) problem = "Find the mean,standard deviation and variance for the data" + \ str(random_list) solution = "The Mean is {} , Standard Deviation is {}, Variance is {}".format( - mean, var/number_values, (var/number_values)**0.5) + mean, var / number_values, (var / number_values)**0.5) return problem, solution diff --git a/mathgenerator/funcs/distanceTwoPointsFunc.py b/mathgenerator/funcs/distanceTwoPointsFunc.py index 7bd1ef2..9fa85c8 100644 --- a/mathgenerator/funcs/distanceTwoPointsFunc.py +++ b/mathgenerator/funcs/distanceTwoPointsFunc.py @@ -7,7 +7,7 @@ def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): point2X = random.randint(minValXY, maxValXY + 1) point2Y = random.randint(minValXY, maxValXY + 1) - distanceSq = (point1X - point2X) ** 2 + (point1Y - point2Y) ** 2 + distanceSq = (point1X - point2X)**2 + (point1Y - point2Y)**2 solution = f"sqrt({distanceSq})" problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" diff --git a/mathgenerator/funcs/divideFractionsFunc.py b/mathgenerator/funcs/divideFractionsFunc.py index 0f6bf30..970b28f 100644 --- a/mathgenerator/funcs/divideFractionsFunc.py +++ b/mathgenerator/funcs/divideFractionsFunc.py @@ -14,7 +14,7 @@ def divideFractionsFunc(maxVal=10): d = random.randint(1, maxVal) def calculate_gcd(x, y): - while(y): + while (y): x, y = y, x % y return x diff --git a/mathgenerator/funcs/exponentiationFunc.py b/mathgenerator/funcs/exponentiationFunc.py index d58f00d..a74f378 100644 --- a/mathgenerator/funcs/exponentiationFunc.py +++ b/mathgenerator/funcs/exponentiationFunc.py @@ -6,5 +6,5 @@ def exponentiationFunc(maxBase=20, maxExpo=10): expo = random.randint(1, maxExpo) problem = f"{base}^{expo} =" - solution = str(base ** expo) + solution = str(base**expo) return problem, solution diff --git a/mathgenerator/funcs/fibonacciSeriesFunc.py b/mathgenerator/funcs/fibonacciSeriesFunc.py index c043567..a66e2f4 100644 --- a/mathgenerator/funcs/fibonacciSeriesFunc.py +++ b/mathgenerator/funcs/fibonacciSeriesFunc.py @@ -10,12 +10,12 @@ def fibonacciSeriesFunc(minNo=1): if i < 2: l.append(i) else: - val = l[i-1]+l[i-2] + val = l[i - 1] + l[i - 2] l.append(val) return l fibList = createFibList(n) - problem = "The Fibonacci Series of the first "+str(n)+" numbers is ?" + problem = "The Fibonacci Series of the first " + str(n) + " numbers is ?" solution = fibList return problem, solution diff --git a/mathgenerator/funcs/geomProgrFunc.py b/mathgenerator/funcs/geomProgrFunc.py index 70d3dcc..7c80a7e 100644 --- a/mathgenerator/funcs/geomProgrFunc.py +++ b/mathgenerator/funcs/geomProgrFunc.py @@ -1,18 +1,23 @@ from .__init__ import * -def geomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, sum_term=5): +def geomProgrFunc(number_values=6, + min_value=2, + max_value=12, + n_term=7, + sum_term=5): r = random.randint(min_value, max_value) a = random.randint(min_value, max_value) n_term = random.randint(number_values, number_values + 5) sum_term = random.randint(number_values, number_values + 5) GP = [] for i in range(number_values): - GP.append(a * (r ** i)) - problem = "For the given GP " + str(GP) + " ,Find the value of a,common ratio,"+str( - n_term) + "th term value, sum upto " + str(sum_term) + "th term" - value_nth_term = a * (r ** (n_term - 1)) - sum_till_nth_term = a * ((r ** sum_term - 1)/(r - 1)) + GP.append(a * (r**i)) + problem = "For the given GP " + str( + GP) + " ,Find the value of a,common ratio," + str( + n_term) + "th term value, sum upto " + str(sum_term) + "th term" + value_nth_term = a * (r**(n_term - 1)) + sum_till_nth_term = a * ((r**sum_term - 1) / (r - 1)) solution = "The value of a is {}, common ratio is {} , {}th term is {} , sum upto {}th term is {}".format( a, r, n_term, value_nth_term, sum_term, sum_till_nth_term) return problem, solution diff --git a/mathgenerator/funcs/geometricMeanFunc.py b/mathgenerator/funcs/geometricMeanFunc.py index 07dc4cd..0980979 100644 --- a/mathgenerator/funcs/geometricMeanFunc.py +++ b/mathgenerator/funcs/geometricMeanFunc.py @@ -8,13 +8,13 @@ def geometricMeanFunc(maxValue=100, maxNum=4): d = random.randint(1, maxValue) num = random.randint(2, 4) if num == 2: - product = a*b + product = a * b elif num == 3: - product = a*b*c + product = a * b * c elif num == 4: - product = a*b*c*d + product = a * b * c * d - ans = product**(1/num) + ans = product**(1 / num) if num == 2: problem = f"Geometric mean of {num} numbers {a} and {b} = " solution = f"({a}*{b})^(1/{num}) = {ans}" diff --git a/mathgenerator/funcs/harmonicMeanFunc.py b/mathgenerator/funcs/harmonicMeanFunc.py index 1c9e397..8aefb41 100644 --- a/mathgenerator/funcs/harmonicMeanFunc.py +++ b/mathgenerator/funcs/harmonicMeanFunc.py @@ -9,13 +9,13 @@ def harmonicMeanFunc(maxValue=100, maxNum=4): d = random.randint(1, maxValue) num = random.randint(2, 4) if num == 2: - sum = (1/a)+(1/b) + sum = (1 / a) + (1 / b) elif num == 3: - sum = (1/a)+(1/b)+(1/c) + sum = (1 / a) + (1 / b) + (1 / c) elif num == 4: - sum = (1/a)+(1/b)+(1/c)+(1/d) + sum = (1 / a) + (1 / b) + (1 / c) + (1 / d) - ans = num/sum + ans = num / sum if num == 2: problem = f"Harmonic mean of {num} numbers {a} and {b} = " solution = f" {num}/((1/{a}) + (1/{b})) = {ans}" diff --git a/mathgenerator/funcs/hcfFunc.py b/mathgenerator/funcs/hcfFunc.py index a9f4e96..047fb0c 100644 --- a/mathgenerator/funcs/hcfFunc.py +++ b/mathgenerator/funcs/hcfFunc.py @@ -5,7 +5,7 @@ def hcfFunc(maxVal=20): a = random.randint(1, maxVal) b = random.randint(1, maxVal) x, y = a, b - while(y): + while (y): x, y = y, x % y problem = f"HCF of {a} and {b} = " solution = str(x) diff --git a/mathgenerator/funcs/intersectionOfTwoLinesFunc.py b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py index 2e6fbb6..eda508e 100644 --- a/mathgenerator/funcs/intersectionOfTwoLinesFunc.py +++ b/mathgenerator/funcs/intersectionOfTwoLinesFunc.py @@ -1,10 +1,12 @@ from .__init__ import * -def intersectionOfTwoLinesFunc( - minM=-10, maxM=10, minB=-10, maxB=10, minDenominator=1, maxDenominator=6 -): - +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. @@ -33,10 +35,10 @@ def intersectionOfTwoLinesFunc( x = f"{x.numerator}/{x.denominator}" return x - m1 = (random.randint(minM, maxM), random.randint( - minDenominator, maxDenominator)) - m2 = (random.randint(minM, maxM), random.randint( - minDenominator, maxDenominator)) + m1 = (random.randint(minM, + maxM), random.randint(minDenominator, maxDenominator)) + m2 = (random.randint(minM, + maxM), random.randint(minDenominator, maxDenominator)) b1 = random.randint(minB, maxB) b2 = random.randint(minB, maxB) diff --git a/mathgenerator/funcs/isTriangleValidFunc.py b/mathgenerator/funcs/isTriangleValidFunc.py index 304c549..13c7240 100644 --- a/mathgenerator/funcs/isTriangleValidFunc.py +++ b/mathgenerator/funcs/isTriangleValidFunc.py @@ -9,8 +9,8 @@ def isTriangleValidFunc(maxSideLength=50): sideSums = [sideA + sideB, sideB + sideC, sideC + sideA] sides = [sideC, sideA, sideB] - exists = True & (sides[0] < sideSums[0]) & ( - sides[1] < sideSums[1]) & (sides[2] < sideSums[2]) + exists = True & (sides[0] < sideSums[0]) & (sides[1] < sideSums[1]) & ( + sides[2] < sideSums[2]) problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" if exists: diff --git a/mathgenerator/funcs/linearEquationsFunc.py b/mathgenerator/funcs/linearEquationsFunc.py index 14a65f1..e2eeb26 100644 --- a/mathgenerator/funcs/linearEquationsFunc.py +++ b/mathgenerator/funcs/linearEquationsFunc.py @@ -9,14 +9,16 @@ def linearEquationsFunc(n=2, varRange=20, coeffRange=20): 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)]) + 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)] + prob = [ + "{}{}".format(coeff[i], vars[i]) if coeff[i] != 0 else "" + for i in range(n) + ] while "" in prob: prob.remove("") diff --git a/mathgenerator/funcs/matrixInversion.py b/mathgenerator/funcs/matrixInversion.py index 28080e5..72c01ca 100644 --- a/mathgenerator/funcs/matrixInversion.py +++ b/mathgenerator/funcs/matrixInversion.py @@ -2,7 +2,9 @@ from .__init__ import * import sympy -def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerElementsInInvertedMatrix=False): +def matrixInversion(SquareMatrixDimension=3, + MaxMatrixElement=99, + OnlyIntegerElementsInInvertedMatrix=False): if OnlyIntegerElementsInInvertedMatrix is True: isItOk = False Mat = list() @@ -16,20 +18,25 @@ def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerEle Mat.append(z) MaxAllowedMatrixElement = math.ceil( pow(MaxMatrixElement, 1 / (SquareMatrixDimension))) - randomlist = random.sample( - range(0, MaxAllowedMatrixElement + 1), SquareMatrixDimension) + randomlist = random.sample(range(0, MaxAllowedMatrixElement + 1), + SquareMatrixDimension) for i in range(0, SquareMatrixDimension): if i == SquareMatrixDimension - 1: - Mat[0] = [j + (k * randomlist[i]) - for j, k in zip(Mat[0], Mat[i])] + Mat[0] = [ + j + (k * randomlist[i]) + for j, k in zip(Mat[0], Mat[i]) + ] else: - Mat[i + 1] = [j + (k * randomlist[i]) - for j, k in zip(Mat[i + 1], Mat[i])] + Mat[i + 1] = [ + j + (k * randomlist[i]) + for j, k in zip(Mat[i + 1], Mat[i]) + ] for i in range(1, SquareMatrixDimension - 1): - Mat[i] = [sum(i) - for i in zip(Mat[SquareMatrixDimension - 1], Mat[i])] + Mat[i] = [ + sum(i) for i in zip(Mat[SquareMatrixDimension - 1], Mat[i]) + ] isItOk = True for i in Mat: @@ -52,7 +59,8 @@ def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, OnlyIntegerEle randomlist = list(sympy.primerange(0, MaxMatrixElement + 1)) plist = random.sample(randomlist, SquareMatrixDimension) randomlist = random.sample( - range(0, MaxMatrixElement + 1), SquareMatrixDimension * SquareMatrixDimension) + range(0, MaxMatrixElement + 1), + SquareMatrixDimension * SquareMatrixDimension) randomlist = list(set(randomlist) - set(plist)) n_list = random.sample( randomlist, SquareMatrixDimension * (SquareMatrixDimension - 1)) diff --git a/mathgenerator/funcs/matrixMultiplicationFunc.py b/mathgenerator/funcs/matrixMultiplicationFunc.py index 727112e..e2e382f 100644 --- a/mathgenerator/funcs/matrixMultiplicationFunc.py +++ b/mathgenerator/funcs/matrixMultiplicationFunc.py @@ -46,7 +46,7 @@ def matrixMultiplicationFuncHelper(inp): for i in range(m): for j in range(n): string += f"{inp[i][j]: 6d}" - string += ", "if j < n - 1 else "" + string += ", " if j < n - 1 else "" string += "]\n [" if i < m - 1 else "" string += "]]" diff --git a/mathgenerator/funcs/meanMedianFunc.py b/mathgenerator/funcs/meanMedianFunc.py index 36fc986..4b17846 100644 --- a/mathgenerator/funcs/meanMedianFunc.py +++ b/mathgenerator/funcs/meanMedianFunc.py @@ -6,9 +6,9 @@ def meanMedianFunc(maxlen=10): total = 0 for n in randomlist: total = total + n - mean = total/10 + mean = total / 10 problem = f"Given the series of numbers {randomlist}. find the arithmatic mean and mdian of the series" randomlist.sort() - median = (randomlist[4]+randomlist[5])/2 + median = (randomlist[4] + randomlist[5]) / 2 solution = f"Arithmetic mean of the series is {mean} and Arithmetic median of this series is {median}" return problem, solution diff --git a/mathgenerator/funcs/multiplyComplexNumbersFunc.py b/mathgenerator/funcs/multiplyComplexNumbersFunc.py index 69ca238..f1842c2 100644 --- a/mathgenerator/funcs/multiplyComplexNumbersFunc.py +++ b/mathgenerator/funcs/multiplyComplexNumbersFunc.py @@ -1,7 +1,8 @@ from .__init__ import * -def multiplyComplexNumbersFunc(minRealImaginaryNum=-20, maxRealImaginaryNum=20): +def multiplyComplexNumbersFunc(minRealImaginaryNum=-20, + maxRealImaginaryNum=20): num1 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) num2 = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), diff --git a/mathgenerator/funcs/multiplyFractionsFunc.py b/mathgenerator/funcs/multiplyFractionsFunc.py index 67c5017..1ec38bb 100644 --- a/mathgenerator/funcs/multiplyFractionsFunc.py +++ b/mathgenerator/funcs/multiplyFractionsFunc.py @@ -14,7 +14,7 @@ def multiplyFractionsFunc(maxVal=10): d = random.randint(1, maxVal) def calculate_gcd(x, y): - while(y): + while (y): x, y = y, x % y return x diff --git a/mathgenerator/funcs/nthFibonacciNumberFunc.py b/mathgenerator/funcs/nthFibonacciNumberFunc.py index d559f1f..a1a66fb 100644 --- a/mathgenerator/funcs/nthFibonacciNumberFunc.py +++ b/mathgenerator/funcs/nthFibonacciNumberFunc.py @@ -2,10 +2,10 @@ from .__init__ import * def nthFibonacciNumberFunc(maxN=100): - golden_ratio = (1 + math.sqrt(5))/2 + golden_ratio = (1 + math.sqrt(5)) / 2 n = random.randint(1, maxN) problem = f"What is the {n}th Fibonacci number?" - ans = round((math.pow(golden_ratio, n) - - math.pow(-golden_ratio, -n))/(math.sqrt(5))) + ans = round((math.pow(golden_ratio, n) - math.pow(-golden_ratio, -n)) / + (math.sqrt(5))) solution = f"{ans}" return problem, solution diff --git a/mathgenerator/funcs/percentageFunc.py b/mathgenerator/funcs/percentageFunc.py index e69749d..f064f2a 100644 --- a/mathgenerator/funcs/percentageFunc.py +++ b/mathgenerator/funcs/percentageFunc.py @@ -5,7 +5,7 @@ def percentageFunc(maxValue=99, maxpercentage=99): a = random.randint(1, maxpercentage) b = random.randint(1, maxValue) problem = f"What is {a}% of {b}?" - percentage = a/100*b + percentage = a / 100 * b formatted_float = "{:.2f}".format(percentage) solution = f"Required percentage = {formatted_float}%" return problem, solution diff --git a/mathgenerator/funcs/profitLossPercentFunc.py b/mathgenerator/funcs/profitLossPercentFunc.py index 49d7f27..da99f94 100644 --- a/mathgenerator/funcs/profitLossPercentFunc.py +++ b/mathgenerator/funcs/profitLossPercentFunc.py @@ -4,12 +4,12 @@ from .__init__ import * def profitLossPercentFunc(maxCP=1000, maxSP=1000): cP = random.randint(1, maxCP) sP = random.randint(1, maxSP) - diff = abs(sP-cP) - if (sP-cP >= 0): + diff = abs(sP - cP) + if (sP - cP >= 0): profitOrLoss = "Profit" else: profitOrLoss = "Loss" - percent = diff/cP * 100 + percent = diff / cP * 100 problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " solution = percent diff --git a/mathgenerator/funcs/quadraticEquation.py b/mathgenerator/funcs/quadraticEquation.py index 73f0ea4..7f784fc 100644 --- a/mathgenerator/funcs/quadraticEquation.py +++ b/mathgenerator/funcs/quadraticEquation.py @@ -4,11 +4,12 @@ from .__init__ import * def quadraticEquation(maxVal=100): a = random.randint(1, maxVal) c = random.randint(1, maxVal) - b = random.randint(round(math.sqrt(4 * a * c)) + 1, - round(math.sqrt(4 * maxVal * maxVal))) + b = random.randint( + round(math.sqrt(4 * a * c)) + 1, round(math.sqrt(4 * maxVal * maxVal))) problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) D = math.sqrt(b * b - 4 * a * c) - solution = str([round((-b + D) / (2 * a), 2), - round((-b - D) / (2 * a), 2)]) + solution = str( + [round((-b + D) / (2 * a), 2), + round((-b - D) / (2 * a), 2)]) return problem, solution diff --git a/mathgenerator/funcs/sectorAreaFunc.py b/mathgenerator/funcs/sectorAreaFunc.py index d7f9545..c2ab0bf 100644 --- a/mathgenerator/funcs/sectorAreaFunc.py +++ b/mathgenerator/funcs/sectorAreaFunc.py @@ -5,7 +5,7 @@ def sectorAreaFunc(maxRadius=49, maxAngle=359): Radius = random.randint(1, maxRadius) Angle = random.randint(1, maxAngle) problem = f"Given radius, {Radius} and angle, {Angle}. Find the area of the sector." - secArea = float((Angle / 360) * math.pi*Radius*Radius) + secArea = float((Angle / 360) * math.pi * Radius * Radius) formatted_float = "{:.5f}".format(secArea) solution = f"Area of sector = {formatted_float}" return problem, solution diff --git a/mathgenerator/funcs/simpleInterestFunc.py b/mathgenerator/funcs/simpleInterestFunc.py index 08b0f3b..30ca938 100644 --- a/mathgenerator/funcs/simpleInterestFunc.py +++ b/mathgenerator/funcs/simpleInterestFunc.py @@ -7,7 +7,9 @@ def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): 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 diff --git a/mathgenerator/funcs/systemOfEquationsFunc.py b/mathgenerator/funcs/systemOfEquationsFunc.py index 2e82f5f..ef63c73 100644 --- a/mathgenerator/funcs/systemOfEquationsFunc.py +++ b/mathgenerator/funcs/systemOfEquationsFunc.py @@ -10,8 +10,9 @@ def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): c2 = [0, 1, y] def randNonZero(): - return random.choice([i for i in range(-coeff_mult_range, coeff_mult_range) - if i != 0]) + 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() diff --git a/mathgenerator/funcs/vectorCrossFunc.py b/mathgenerator/funcs/vectorCrossFunc.py index 21bcb0e..7506283 100644 --- a/mathgenerator/funcs/vectorCrossFunc.py +++ b/mathgenerator/funcs/vectorCrossFunc.py @@ -4,9 +4,10 @@ from .__init__ import * def vectorCrossFunc(minVal=-20, maxVal=20): a = [random.randint(minVal, maxVal) for i in range(3)] b = [random.randint(minVal, maxVal) for i in range(3)] - c = [a[1] * b[2] - a[2] * b[1], - a[2] * b[0] - a[0] * b[2], - a[0] * b[1] - a[1] * b[0]] + c = [ + a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ] problem = str(a) + " X " + str(b) + " = " solution = str(c) diff --git a/mathgenerator/funcs/volumeSphereFunc.py b/mathgenerator/funcs/volumeSphereFunc.py index 137db4f..1f94c7f 100644 --- a/mathgenerator/funcs/volumeSphereFunc.py +++ b/mathgenerator/funcs/volumeSphereFunc.py @@ -5,6 +5,6 @@ def volumeSphereFunc(maxRadius=100): r = random.randint(1, maxRadius) problem = f"Volume of sphere with radius {r} m = " - ans = (4*math.pi/3)*r*r*r + ans = (4 * math.pi / 3) * r * r * r solution = f"{ans} m^3" return problem, solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index dc29a6e..a9b2a98 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -19,7 +19,9 @@ class Generator: genList.append([id, title, self]) def __str__(self): - return str(self.id) + " " + self.title + " " + self.generalProb + " " + self.generalSol + return str( + self.id + ) + " " + self.title + " " + self.generalProb + " " + self.generalSol def __call__(self, **kwargs): return self.func(**kwargs) @@ -28,167 +30,240 @@ class Generator: # || Non-generator Functions def genById(id): generator = genList[id][2] - return(generator()) + return (generator()) + # # def getGenList(): # return(genList) - # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) # Funcs_start - DO NOT REMOVE! #addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) -multiplication = Generator( - "Multiplication", 2, "a*b=", "c", multiplicationFunc) +multiplication = Generator("Multiplication", 2, "a*b=", "c", + multiplicationFunc) division = Generator("Division", 3, "a/b=", "c", divisionFunc) -binaryComplement1s = Generator( - "Binary Complement 1s", 4, "1010=", "0101", binaryComplement1sFunc) +binaryComplement1s = Generator("Binary Complement 1s", 4, "1010=", "0101", + binaryComplement1sFunc) moduloDivision = Generator("Modulo Division", 5, "a%b=", "c", moduloFunc) squareRoot = Generator("Square Root", 6, "sqrt(a)=", "b", squareRootFunc) -powerRuleDifferentiation = Generator( - "Power Rule Differentiation", 7, "nx^m=", "(n*m)x^(m-1)", powerRuleDifferentiationFunc) +powerRuleDifferentiation = Generator("Power Rule Differentiation", 7, "nx^m=", + "(n*m)x^(m-1)", + powerRuleDifferentiationFunc) square = Generator("Square", 8, "a^2", "b", squareFunc) -lcm = Generator("LCM (Least Common Multiple)", 9, - "LCM of a and b = ", "c", lcmFunc) -gcd = Generator("GCD (Greatest Common Denominator)", - 10, "GCD of a and b = ", "c", gcdFunc) -basicAlgebra = Generator( - "Basic Algebra", 11, "ax + b = c", "d", basicAlgebraFunc) +lcm = Generator("LCM (Least Common Multiple)", 9, "LCM of a and b = ", "c", + lcmFunc) +gcd = Generator("GCD (Greatest Common Denominator)", 10, "GCD of a and b = ", + "c", gcdFunc) +basicAlgebra = Generator("Basic Algebra", 11, "ax + b = c", "d", + basicAlgebraFunc) log = Generator("Logarithm", 12, "log2(8)", "3", logFunc) intDivision = Generator("Easy Division", 13, "a/b=", "c", divisionToIntFunc) -decimalToBinary = Generator("Decimal to Binary", 14, - "Binary of a=", "b", DecimalToBinaryFunc) -binaryToDecimal = Generator("Binary to Decimal", 15, - "Decimal of a=", "b", BinaryToDecimalFunc) -fractionDivision = Generator( - "Fraction Division", 16, "(a/b)/(c/d)=", "x/y", divideFractionsFunc) +decimalToBinary = Generator("Decimal to Binary", 14, "Binary of a=", "b", + DecimalToBinaryFunc) +binaryToDecimal = Generator("Binary to Decimal", 15, "Decimal of a=", "b", + BinaryToDecimalFunc) +fractionDivision = Generator("Fraction Division", 16, "(a/b)/(c/d)=", "x/y", + divideFractionsFunc) intMatrix22Multiplication = Generator("Integer Multiplication with 2x2 Matrix", - 17, "k * [[a,b],[c,d]]=", "[[k*a,k*b],[k*c,k*d]]", multiplyIntToMatrix22) -areaOfTriangle = Generator( - "Area of Triangle", 18, "Area of Triangle with side lengths a, b, c = ", "area", areaOfTriangleFunc) + 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) + "Does triangle with sides a, b and c exist?", + "Yes/No", isTriangleValidFunc) midPointOfTwoPoint = Generator("Midpoint of the two point", 20, - "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", MidPointOfTwoPointFunc) -factoring = Generator("Factoring Quadratic", 21, - "x^2+(x1+x2)+x1*x2", "(x-x1)(x-x2)", factoringFunc) + "((X1,Y1),(X2,Y2))=", "((X1+X2)/2,(Y1+Y2)/2)", + MidPointOfTwoPointFunc) +factoring = Generator("Factoring Quadratic", 21, "x^2+(x1+x2)+x1*x2", + "(x-x1)(x-x2)", factoringFunc) thirdAngleOfTriangle = Generator("Third Angle of Triangle", 22, - "Third Angle of the triangle = ", "angle3", thirdAngleOfTriangleFunc) + "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) + "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) + "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) + "Pythagorean Theorem", 25, + "The hypotenuse of a right triangle given the other two lengths a and b = ", + "hypotenuse", pythagoreanTheoremFunc) # This has multiple variables whereas #23 has only x and y -linearEquations = Generator( - "Linear Equations", 26, "2x+5y=20 & 3x+6y=12", "x=-20 & y=12", linearEquationsFunc) -primeFactors = Generator("Prime Factorisation", 27, - "Prime Factors of a =", "[b, c, d, ...]", primeFactorsFunc) -fractionMultiplication = Generator( - "Fraction Multiplication", 28, "(a/b)*(c/d)=", "x/y", multiplyFractionsFunc) -angleRegularPolygon = Generator("Angle of a Regular Polygon", 29, - "Find the angle of a regular polygon with 6 sides", "120", regularPolygonAngleFunc) -combinations = Generator("Combinations of Objects", 30, - "Combinations available for picking 4 objects at a time from 6 distinct objects =", " 15", combinationsFunc) +linearEquations = Generator("Linear Equations", 26, "2x+5y=20 & 3x+6y=12", + "x=-20 & y=12", linearEquationsFunc) +primeFactors = Generator("Prime Factorisation", 27, "Prime Factors of a =", + "[b, c, d, ...]", primeFactorsFunc) +fractionMultiplication = Generator("Fraction Multiplication", 28, + "(a/b)*(c/d)=", "x/y", + multiplyFractionsFunc) +angleRegularPolygon = Generator( + "Angle of a Regular Polygon", 29, + "Find the angle of a regular polygon with 6 sides", "120", + regularPolygonAngleFunc) +combinations = Generator( + "Combinations of Objects", 30, + "Combinations available for picking 4 objects at a time from 6 distinct objects =", + " 15", combinationsFunc) factorial = Generator("Factorial", 31, "a! = ", "b", factorialFunc) -surfaceAreaCubeGen = Generator( - "Surface Area of Cube", 32, "Surface area of cube with side a units is", "b units^2", surfaceAreaCube) +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) + "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) + "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) + "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) + "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) + "Surface Area of cone", 38, + "Surface area of cone with height = a units and radius = b units is", + "c units^2", surfaceAreaCone) volumeConeGen = Generator( - "Volume of cone", 39, "Volume of cone with height = a units and radius = b units is", "c units^3", volumeCone) -commonFactors = Generator( - "Common Factors", 40, "Common Factors of {a} and {b} = ", "[c, d, ...]", commonFactorsFunc) -intersectionOfTwoLines = Generator("Intersection of Two Lines", 41, - "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", "(x, y)", intersectionOfTwoLinesFunc) + "Volume of cone", 39, + "Volume of cone with height = a units and radius = b units is", + "c units^3", volumeCone) +commonFactors = Generator("Common Factors", 40, + "Common Factors of {a} and {b} = ", "[c, d, ...]", + commonFactorsFunc) +intersectionOfTwoLines = Generator( + "Intersection of Two Lines", 41, + "Find the point of intersection of the two lines: y = m1*x + b1 and y = m2*x + b2", + "(x, y)", intersectionOfTwoLinesFunc) permutations = Generator( - "Permutations", 42, "Total permutations of 4 objects at a time from 10 objects is", "5040", permutationFunc) -vectorCross = Generator("Cross Product of 2 Vectors", - 43, "a X b = ", "c", vectorCrossFunc) + "Permutations", 42, + "Total permutations of 4 objects at a time from 10 objects is", "5040", + permutationFunc) +vectorCross = Generator("Cross Product of 2 Vectors", 43, "a X b = ", "c", + vectorCrossFunc) compareFractions = Generator( - "Compare Fractions", 44, "Which symbol represents the comparison between a/b and c/d?", ">/</=", compareFractionsFunc) + "Compare Fractions", 44, + "Which symbol represents the comparison between a/b and c/d?", ">/</=", + compareFractionsFunc) simpleInterest = Generator( - "Simple Interest", 45, "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", "d dollars", simpleInterestFunc) -matrixMultiplication = Generator("Multiplication of two matrices", - 46, "Multiply two matrices A and B", "C", matrixMultiplicationFunc) -CubeRoot = Generator( - "Cube Root", 47, "Cuberoot of a upto 2 decimal places is", "b", cubeRootFunc) -powerRuleIntegration = Generator( - "Power Rule Integration", 48, "nx^m=", "(n/m)x^(m+1)", powerRuleIntegrationFunc) -fourthAngleOfQuadrilateral = Generator("Fourth Angle of Quadrilateral", 49, - "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", fourthAngleOfQuadriFunc) + "Simple Interest", 45, + "Simple interest for a principle amount of a dollars, b% rate of interest and for a time period of c years is = ", + "d dollars", simpleInterestFunc) +matrixMultiplication = Generator("Multiplication of two matrices", 46, + "Multiply two matrices A and B", "C", + matrixMultiplicationFunc) +CubeRoot = Generator("Cube Root", 47, "Cuberoot of a upto 2 decimal places is", + "b", cubeRootFunc) +powerRuleIntegration = Generator("Power Rule Integration", 48, "nx^m=", + "(n/m)x^(m+1)", powerRuleIntegrationFunc) +fourthAngleOfQuadrilateral = Generator( + "Fourth Angle of Quadrilateral", 49, + "Fourth angle of Quadrilateral with angles a,b,c =", "angle4", + fourthAngleOfQuadriFunc) quadraticEquationSolve = Generator( - "Quadratic Equation", 50, "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", quadraticEquation) -hcf = Generator("HCF (Highest Common Factor)", 51, - "HCF of a and b = ", "c", hcfFunc) -diceSumProbability = Generator("Probability of a certain sum appearing on faces of dice", - 52, "If n dices are rolled then probabilty of getting sum of x is =", "z", DiceSumProbFunc) -exponentiation = Generator( - "Exponentiation", 53, "a^b = ", "c", exponentiationFunc) -confidenceInterval = Generator("Confidence interval For sample S", - 54, "With X% confidence", "is (A,B)", confidenceIntervalFunc) -surdsComparison = Generator( - "Comparing surds", 55, "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", surdsComparisonFunc) -fibonacciSeries = Generator("Fibonacci Series", 56, "fibonacci series of first a numbers", - "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) -basicTrigonometry = Generator( - "Trigonometric Values", 57, "What is sin(X)?", "ans", basicTrigonometryFunc) + "Quadratic Equation", 50, + "Find the zeros {x1,x2} of the quadratic equation ax^2+bx+c=0", "x1,x2", + quadraticEquation) +hcf = Generator("HCF (Highest Common Factor)", 51, "HCF of a and b = ", "c", + hcfFunc) +diceSumProbability = Generator( + "Probability of a certain sum appearing on faces of dice", 52, + "If n dices are rolled then probabilty of getting sum of x is =", "z", + DiceSumProbFunc) +exponentiation = Generator("Exponentiation", 53, "a^b = ", "c", + exponentiationFunc) +confidenceInterval = Generator("Confidence interval For sample S", 54, + "With X% confidence", "is (A,B)", + confidenceIntervalFunc) +surdsComparison = Generator("Comparing surds", 55, + "Fill in the blanks a^(1/b) _ c^(1/d)", "</>/=", + surdsComparisonFunc) +fibonacciSeries = Generator( + "Fibonacci Series", 56, "fibonacci series of first a numbers", + "prints the fibonacci series starting from 0 to a", fibonacciSeriesFunc) +basicTrigonometry = Generator("Trigonometric Values", 57, "What is sin(X)?", + "ans", basicTrigonometryFunc) sumOfAnglesOfPolygon = Generator("Sum of Angles of Polygon", 58, - "Sum of angles of polygon with n sides = ", "sum", sumOfAnglesOfPolygonFunc) -dataSummary = Generator("Mean,Standard Deviation,Variance", - 59, "a,b,c", "Mean:a+b+c/3,Std,Var", dataSummaryFunc) + "Sum of angles of polygon with n sides = ", + "sum", sumOfAnglesOfPolygonFunc) +dataSummary = Generator("Mean,Standard Deviation,Variance", 59, "a,b,c", + "Mean:a+b+c/3,Std,Var", dataSummaryFunc) surfaceAreaSphereGen = Generator( - "Surface Area of Sphere", 60, "Surface area of sphere with radius = a units is", "d units^2", surfaceAreaSphere) + "Surface Area of Sphere", 60, + "Surface area of sphere with radius = a units is", "d units^2", + surfaceAreaSphere) volumeSphere = Generator("Volume of Sphere", 61, - "Volume of sphere with radius r m = ", "(4*pi/3)*r*r*r", volumeSphereFunc) -nthFibonacciNumberGen = Generator( - "nth Fibonacci number", 62, "What is the nth Fibonacci number", "Fn", nthFibonacciNumberFunc) -profitLossPercent = Generator("Profit or Loss Percent", 63, - "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", profitLossPercentFunc) -binaryToHex = Generator("Binary to Hexidecimal", 64, - "Hexidecimal of a=", "b", binaryToHexFunc) + "Volume of sphere with radius r m = ", + "(4*pi/3)*r*r*r", volumeSphereFunc) +nthFibonacciNumberGen = Generator("nth Fibonacci number", 62, + "What is the nth Fibonacci number", "Fn", + nthFibonacciNumberFunc) +profitLossPercent = Generator( + "Profit or Loss Percent", 63, + "Profit/ Loss percent when CP = cp and SP = sp is: ", "percent", + profitLossPercentFunc) +binaryToHex = Generator("Binary to Hexidecimal", 64, "Hexidecimal of a=", "b", + binaryToHexFunc) complexNumMultiply = Generator("Multiplication of 2 complex numbers", 65, - "(x + j) (y + j) = ", "xy + xj + yj -1", multiplyComplexNumbersFunc) + "(x + j) (y + j) = ", "xy + xj + yj -1", + multiplyComplexNumbersFunc) geometricprogression = Generator( - "Geometric Progression", 66, "Initial value,Common Ratio,nth Term,Sum till nth term =", "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) + "Geometric Progression", 66, + "Initial value,Common Ratio,nth Term,Sum till nth term =", + "a,r,ar^n-1,sum(ar^n-1", geomProgrFunc) geometricMean = Generator("Geometric Mean of N Numbers", 67, - "Geometric mean of n numbers A1 , A2 , ... , An = ", "(A1*A2*...An)^(1/n) = ans", geometricMeanFunc) -harmonicMean = Generator("Harmonic Mean of N Numbers", 68, "Harmonic mean of n numbers A1 , A2 , ... , An = ", - " n/((1/A1) + (1/A2) + ... + (1/An)) = ans", harmonicMeanFunc) + "Geometric mean of n numbers A1 , A2 , ... , An = ", + "(A1*A2*...An)^(1/n) = ans", geometricMeanFunc) +harmonicMean = Generator("Harmonic Mean of N Numbers", 68, + "Harmonic mean of n numbers A1 , A2 , ... , An = ", + " n/((1/A1) + (1/A2) + ... + (1/An)) = ans", + harmonicMeanFunc) eucldianNorm = Generator("Euclidian norm or L2 norm of a vector", 69, - "Euclidian Norm of a vector V:[v1, v2, ......., vn]", "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNormFunc) -angleBtwVectors = Generator("Angle between 2 vectors", 70, - "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", angleBtwVectorsFunc) -absoluteDifference = Generator("Absolute difference between two numbers", 71, - "Absolute difference betweeen two numbers a and b =", "|a-b|", absoluteDifferenceFunc) -vectorDot = Generator("Dot Product of 2 Vectors", 72, - "a . b = ", "c", vectorDotFunc) + "Euclidian Norm of a vector V:[v1, v2, ......., vn]", + "sqrt(v1^2 + v2^2 ........ +vn^2)", euclidianNormFunc) +angleBtwVectors = Generator( + "Angle between 2 vectors", 70, + "Angle Between 2 vectors V1=[v11, v12, ..., v1n] and V2=[v21, v22, ....., v2n]", + "V1.V2 / (euclidNorm(V1)*euclidNorm(V2))", angleBtwVectorsFunc) +absoluteDifference = Generator( + "Absolute difference between two numbers", 71, + "Absolute difference betweeen two numbers a and b =", "|a-b|", + absoluteDifferenceFunc) +vectorDot = Generator("Dot Product of 2 Vectors", 72, "a . b = ", "c", + vectorDotFunc) binary2sComplement = Generator("Binary 2's Complement", 73, - "2's complement of 11010110 =", "101010", binary2sComplementFunc) -invertmatrix = Generator("Inverse of a Matrix", 74, - "Inverse of a matrix A is", "A^(-1)", matrixInversion) + "2's complement of 11010110 =", "101010", + binary2sComplementFunc) +invertmatrix = Generator("Inverse of a Matrix", 74, "Inverse of a matrix A is", + "A^(-1)", matrixInversion) sectorArea = Generator("Area of a Sector", 75, - "Area of a sector with radius, r and angle, a ", "Area", sectorAreaFunc) + "Area of a sector with radius, r and angle, a ", "Area", + sectorAreaFunc) meanMedian = Generator("Mean and Median", 76, - "Mean and median of given set of numbers", "Mean, Median", meanMedianFunc) -intMatrix22determinant = Generator( - "Determinant to 2x2 Matrix", 77, "Det([[a,b],[c,d]]) =", " a * d - b * c", determinantToMatrix22) + "Mean and median of given set of numbers", + "Mean, Median", meanMedianFunc) +intMatrix22determinant = Generator("Determinant to 2x2 Matrix", 77, + "Det([[a,b],[c,d]]) =", " a * d - b * c", + determinantToMatrix22) compoundInterest = Generator( - "Compound Interest", 78, "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", "A dollars", compoundInterestFunc) -decimalToHexadeci = Generator( - "Decimal to Hexadecimal", 79, "Binary of a=", "b", deciToHexaFunc) -percentage = Generator("Percentage of a number", 80, - "What is a% of b?", "percentage", percentageFunc) + "Compound Interest", 78, + "Compound interest for a principle amount of p dollars, r% rate of interest and for a time period of t years with n times compounded annually is = ", + "A dollars", compoundInterestFunc) +decimalToHexadeci = Generator("Decimal to Hexadecimal", 79, "Binary of a=", + "b", deciToHexaFunc) +percentage = Generator("Percentage of a number", 80, "What is a% of b?", + "percentage", percentageFunc) diff --git a/setup.py b/setup.py index 981b662..4bfbcd0 100644 --- a/setup.py +++ b/setup.py @@ -1,17 +1,12 @@ from setuptools import setup, find_packages -setup( - name='mathgenerator', - version='1.1.3', - description='An open source solution for generating math problems', - url='https://github.com/todarith/mathgenerator', - author='Luke Weiler', - author_email='lukew25073@gmail.com', - license='MIT', - packages=find_packages(), - install_requires=[ - - ], - entry_points={ - } -) +setup(name='mathgenerator', + version='1.1.3', + description='An open source solution for generating math problems', + url='https://github.com/todarith/mathgenerator', + author='Luke Weiler', + author_email='lukew25073@gmail.com', + license='MIT', + packages=find_packages(), + install_requires=[], + entry_points={}) diff --git a/tests/test_mathgen.py b/tests/test_mathgen.py index 7555131..ed9066b 100644 --- a/tests/test_mathgen.py +++ b/tests/test_mathgen.py @@ -39,7 +39,8 @@ def test_moduloDivision(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)) +@given(minNo=st.integers(min_value=1), + maxNo=st.integers(min_value=1, max_value=2**50)) def test_squareRoot(minNo, maxNo): assume(maxNo > minNo) problem, solution = squareRoot.func(minNo, maxNo) From 4f03d1b035350372789e76c41aa2f0e4e46a0b4f Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 14:14:08 -0400 Subject: [PATCH 111/116] linter fix --- mathgenerator/funcs/binary2sComplement.py | 2 +- mathgenerator/funcs/fibonacciSeriesFunc.py | 10 +++++----- mathgenerator/funcs/nthFibonacciNumberFunc.py | 3 +-- mathgenerator/mathgen.py | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/mathgenerator/funcs/binary2sComplement.py b/mathgenerator/funcs/binary2sComplement.py index 478b2c9..01af731 100644 --- a/mathgenerator/funcs/binary2sComplement.py +++ b/mathgenerator/funcs/binary2sComplement.py @@ -20,7 +20,7 @@ def binary2sComplementFunc(maxDigits=10): answer[j] = '0' j -= 1 - if j == 0 and carry == True: + if j == 0 and carry is True: answer.insert(0, '1') problem = "2's complement of " + question + " =" diff --git a/mathgenerator/funcs/fibonacciSeriesFunc.py b/mathgenerator/funcs/fibonacciSeriesFunc.py index a66e2f4..60391cb 100644 --- a/mathgenerator/funcs/fibonacciSeriesFunc.py +++ b/mathgenerator/funcs/fibonacciSeriesFunc.py @@ -5,14 +5,14 @@ def fibonacciSeriesFunc(minNo=1): n = random.randint(minNo, 20) def createFibList(n): - l = [] + list = [] for i in range(n): if i < 2: - l.append(i) + list.append(i) else: - val = l[i - 1] + l[i - 2] - l.append(val) - return l + val = list[i - 1] + list[i - 2] + list.append(val) + return list fibList = createFibList(n) diff --git a/mathgenerator/funcs/nthFibonacciNumberFunc.py b/mathgenerator/funcs/nthFibonacciNumberFunc.py index a1a66fb..b7475ee 100644 --- a/mathgenerator/funcs/nthFibonacciNumberFunc.py +++ b/mathgenerator/funcs/nthFibonacciNumberFunc.py @@ -5,7 +5,6 @@ def nthFibonacciNumberFunc(maxN=100): golden_ratio = (1 + math.sqrt(5)) / 2 n = random.randint(1, maxN) problem = f"What is the {n}th Fibonacci number?" - ans = round((math.pow(golden_ratio, n) - math.pow(-golden_ratio, -n)) / - (math.sqrt(5))) + ans = round((math.pow(golden_ratio, n) - math.pow(-golden_ratio, -n)) / (math.sqrt(5))) solution = f"{ans}" return problem, solution diff --git a/mathgenerator/mathgen.py b/mathgenerator/mathgen.py index a9b2a98..faa6cac 100644 --- a/mathgenerator/mathgen.py +++ b/mathgenerator/mathgen.py @@ -40,7 +40,7 @@ def genById(id): # Format is: # <title> = Generator("<Title>", <id>, <generalized problem>, <generalized solution>, <function name>) # Funcs_start - DO NOT REMOVE! -#addition = Generator("Addition", 0, "a+b=", "c", additionFunc) +# addition = Generator("Addition", 0, "a+b=", "c", additionFunc) subtraction = Generator("Subtraction", 1, "a-b=", "c", subtractionFunc) multiplication = Generator("Multiplication", 2, "a*b=", "c", multiplicationFunc) From d628e2fb206dfa400a342ead802fa7fb398faa04 Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 14:17:56 -0400 Subject: [PATCH 112/116] Update CONTRIBUTING.md --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e7cf0eb..016ce41 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,6 +35,7 @@ We currently just underwent a large reconstruction of the repository. Here is ho * Place `.__init__ import *` at the top of your file and then write your function in the lines beneath it * Add `from .<yourfunc> import *` at the bottom of the `__init__.py` file inside the funcs directory +If you have issues with checks you can try using yapf to fix linter errors or just go through them line by line. ### Provide Ideas If you have an idea for a generator but don't have the time or know-how to create it, you can add it as an issue. If you have a lot of ideas, I would suggest adding them to the table in README.md so that they are easier for our team to manage. From 9866c772f965557268aff073a9d7752a0cc03c55 Mon Sep 17 00:00:00 2001 From: Nitsujed <jed9340@gmail.com> Date: Mon, 19 Oct 2020 14:19:09 -0400 Subject: [PATCH 113/116] Fixed string formatting... my bad --- mathgenerator/funcs/celsiustofahrenheit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/funcs/celsiustofahrenheit.py b/mathgenerator/funcs/celsiustofahrenheit.py index fd2ca82..1e2b8f5 100644 --- a/mathgenerator/funcs/celsiustofahrenheit.py +++ b/mathgenerator/funcs/celsiustofahrenheit.py @@ -4,7 +4,7 @@ from ..__init__ import Generator def celsiustofahrenheit(maxTemp=100): celsius = random.randint(-50, maxTemp) fahrenheit = (celsius * (9/5)) +32 - problem = "Convert", str(celsius), "degrees Celsius to degrees Fahrenheit =" + problem = "Convert " + str(celsius) + " degrees Celsius to degrees Fahrenheit = " solution = str(fahrenheit) return problem, solution From c81d89bf25c5b554fed355f9641e77c1d62e4b7a Mon Sep 17 00:00:00 2001 From: Luke Weiler <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 14:20:06 -0400 Subject: [PATCH 114/116] Update celsiustofahrenheit.py --- mathgenerator/funcs/celsiustofahrenheit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mathgenerator/funcs/celsiustofahrenheit.py b/mathgenerator/funcs/celsiustofahrenheit.py index fd2ca82..641663f 100644 --- a/mathgenerator/funcs/celsiustofahrenheit.py +++ b/mathgenerator/funcs/celsiustofahrenheit.py @@ -1,11 +1,11 @@ from .__init__ import * from ..__init__ import Generator -def celsiustofahrenheit(maxTemp=100): +def celsiustofahrenheitFunc(maxTemp=100): celsius = random.randint(-50, maxTemp) fahrenheit = (celsius * (9/5)) +32 problem = "Convert", str(celsius), "degrees Celsius to degrees Fahrenheit =" solution = str(fahrenheit) return problem, solution -celsiustofahrenheit = Generator("Celsius To Fahrenheit", 81, "(C +(9/5))+32=", "F", celsiustofahrenheit) +celsiustofahrenheit = Generator("Celsius To Fahrenheit", 81, "(C +(9/5))+32=", "F", celsiustofahrenheitFunc) From 464478676a3b4388a9cbac14e191c76d72b3cb44 Mon Sep 17 00:00:00 2001 From: Nitsujed <jed9340@gmail.com> Date: Mon, 19 Oct 2020 14:21:25 -0400 Subject: [PATCH 115/116] Fixed string formatting... my bad --- mathgenerator/funcs/celsiustofahrenheit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mathgenerator/funcs/celsiustofahrenheit.py b/mathgenerator/funcs/celsiustofahrenheit.py index 57a9f69..0e66be8 100644 --- a/mathgenerator/funcs/celsiustofahrenheit.py +++ b/mathgenerator/funcs/celsiustofahrenheit.py @@ -5,7 +5,7 @@ from ..__init__ import Generator def celsiustofahrenheitFunc(maxTemp=100): celsius = random.randint(-50, maxTemp) fahrenheit = (celsius * (9 / 5)) + 32 - problem = "Convert", str(celsius), "degrees Celsius to degrees Fahrenheit =" + problem = "Convert " + str(celsius) + " degrees Celsius to degrees Fahrenheit =" solution = str(fahrenheit) return problem, solution From f204de60f6a3d445e612890eb0ba1179efd596fb Mon Sep 17 00:00:00 2001 From: lukew3 <lukew25073@gmail.com> Date: Mon, 19 Oct 2020 14:24:24 -0400 Subject: [PATCH 116/116] linter fix --- mathgenerator/funcs/__init__.py | 1 + mathgenerator/funcs/celsiustofahrenheit.py | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 7ef9c50..83702eb 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -83,3 +83,4 @@ from .determinantToMatrix22 import * from .compoundInterestFunc import * from .deciToHexaFunc import * from .percentageFunc import * +from .celsiustofahrenheit import * diff --git a/mathgenerator/funcs/celsiustofahrenheit.py b/mathgenerator/funcs/celsiustofahrenheit.py index 641663f..57a9f69 100644 --- a/mathgenerator/funcs/celsiustofahrenheit.py +++ b/mathgenerator/funcs/celsiustofahrenheit.py @@ -1,11 +1,14 @@ -from .__init__ import * +from .__init__ import * from ..__init__ import Generator + def celsiustofahrenheitFunc(maxTemp=100): celsius = random.randint(-50, maxTemp) - fahrenheit = (celsius * (9/5)) +32 + fahrenheit = (celsius * (9 / 5)) + 32 problem = "Convert", str(celsius), "degrees Celsius to degrees Fahrenheit =" solution = str(fahrenheit) return problem, solution -celsiustofahrenheit = Generator("Celsius To Fahrenheit", 81, "(C +(9/5))+32=", "F", celsiustofahrenheitFunc) + +celsiustofahrenheit = Generator("Celsius To Fahrenheit", 81, + "(C +(9/5))+32=", "F", celsiustofahrenheitFunc)