diff --git a/README.md b/README.md index 7f3228d..03f7cad 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ If you have an idea for a generator, please add it as an issue and tag it with t ## Table of Contents * [Installation](#installation) * [Basic Usage](#basic-usage) - * [Creating a worksheet](#creating-a-worksheet) + * [More Complicated Usage](#more-complicated-usage) * [Documentation](#documentation) * [List of Generators](#list-of-generators) * [algebra](#algebra) @@ -60,138 +60,142 @@ This creates the pdf `ws.pdf` in your current directory * `genById(id)` generates a problem, solution set with generator id `id` in the format `[problem, solution]` +* Pass the kwarg `format=latex` to return problem and solution set as latex. If latex is not available for that generator, the problem will be returned as raw data. + +* Pass the kwarg `format=raw` to return just the raw data for each generator. An array of each variable necessary to the generator is returned. + ## List of Generators ## algebra | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 11 | [Basic Algebra](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/basic_algebra.py) | 9x + 6 = 6 | 0 | basic_algebra | `maxVariable=10` | -| 12 | [Logarithm](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/log.py) | log2(256) | 8 | log | `maxBase=3` `maxVal=8` | -| 17 | [Integer Multiplication with 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py) | 1 * [[3, 1], [10, 1]] = | [[3,1],[10,1]] | multiply_int_to_22_matrix | `maxMatrixVal=10` `maxRes=100` | -| 20 | [Midpoint of the two point](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/midpoint_of_two_points.py) | (-19,-5),(-10,-3)= | (-14.5,-4.0) | midpoint_of_two_points | `maxValue=20` | -| 21 | [Factoring Quadratic](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/factoring.py) | x^2-18x+81 | (x-9)(x-9) | factoring | `range_x1=10` `range_x2=10` | -| 23 | [Solve a System of Equations in R^2](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/system_of_equations.py) | -3x + 4y = -12, -x + 10y = 22 | x = 8, y = 3 | system_of_equations | `range_x=10` `range_y=10` `coeff_mult_range=10` | -| 24 | [Distance between 2 points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/distance_two_points.py) | Find the distance between (3, 7) and (-20, -18) | sqrt(1154) | distance_two_points | `maxValXY=20` `minValXY=-20` | -| 26 | [Linear Equations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/linear_equations.py) | 6x + -13y = 111, 2x + -4y = 36 | x = 12, y = -3 | linear_equations | `n=2` `varRange=20` `coeffRange=20` | -| 41 | [Intersection of Two Lines](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/intersection_of_two_lines.py) | Find the point of intersection of the two lines: y = -8/4x - 7 and y = -7/3x + 4 | (33, -73) | intersection_of_two_lines | `minM=-10` `maxM=10` `minB=-10` `maxB=10` `minDenominator=1` `maxDenominator=6` | -| 43 | [Cross Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_cross.py) | [1, 7, -1] X [-5, 8, 19] = | [141, -14, 43] | vector_cross | `minVal=-20` `maxVal=20` | -| 45 | [Simple Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/simple_interest.py) | Simple interest for a principle amount of 5581 dollars, 1% rate of interest and for a time period of 8 years is = | 446.48 | simple_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10` | -| 46 | [Multiplication of two matrices](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/matrix_multiplication.py) | Multiply
3-7-9-9
-25-410
and
9-210-8
-310-91
5303
03-100
|
3-130183-58
-5372-1659
| matrix_multiplication | `maxVal=100` `max_dim=10` | -| 50 | [Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/quadratic_equation.py) | Zeros of the Quadratic Equation 98x^2+108x+23=0 | [-0.29, -0.81] | quadratic_equation | `maxVal=100` | -| 65 | [Multiplication of 2 complex numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_complex_numbers.py) | (8+10j) * (-7+4j) = | (-96-38j) | multiply_complex_numbers | `minRealImaginaryNum=-20` `maxRealImaginaryNum=20` | -| 72 | [Dot Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_dot.py) | [-3, -8, 2] . [15, 7, -6] = | -113 | vector_dot | `minVal=-20` `maxVal=20` | -| 74 | [Inverse of a Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/invert_matrix.py) | Inverse of Matrix Matrix([[60, 59, 5], [64, 13, 45], [54, 19, 35]]) is: | Matrix([[20/511, 197/1022, -37/146], [-19/1022, -183/1022, 17/73], [-257/5110, -1023/5110, 107/365]]) | invert_matrix | `SquareMatrixDimension=3` `MaxMatrixElement=99` `OnlyIntegerElementsInInvertedMatrix=False` | -| 77 | [Determinant to 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/int_matrix_22_determinant.py) | Det([[38, 27], [91, 58]]) = | -253 | int_matrix_22_determinant | `maxMatrixVal=100` | -| 78 | [Compound Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/compound_interest.py) | Compound interest for a principle amount of 5669 dollars, 4% rate of interest and for a time period of 8 year is = | 7758.42 | compound_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10` | -| 100 | [complex Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/complex_quadratic.py) | Find the roots of given Quadratic Equation 3x^2 + 9x + 4 = 0 | simplified solution : ((-0.543, -2.457)), generalized solution : ((-9 + sqrt(33))/2*3, (-9 - sqrt(33))/2*3) | complex_quadratic | `prob_type=0` `max_range=10` | -| 105 | [Combine Like terms](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/combine_like_terms.py) | 7x^1 | 7x^1 | combine_like_terms | `maxCoef=10` `maxExp=20` `maxTerms=10` | -| 111 | [Expanding Factored Binomial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/expanding.py) | (8x-5)(-3x-3) | -24*x^2-9*x+15 | expanding | `range_x1=10` `range_x2=10` `range_a=10` `range_b=10` | +| 11 | [Basic Algebra](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/basic_algebra.py) | 4x + 8 = 10 | 1/2 | basic_algebra | `maxVariable=10` | +| 12 | [Logarithm](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/log.py) | log2(8) | 3 | log | `maxBase=3` `maxVal=8` | +| 17 | [Integer Multiplication with 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py) | 6 * [[3, 3], [7, 2]] = | [[18,18],[42,12]] | multiply_int_to_22_matrix | `maxMatrixVal=10` `maxRes=100` | +| 20 | [Midpoint of the two point](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/midpoint_of_two_points.py) | (-10,11),(-4,-12)= | (-7.0,-0.5) | midpoint_of_two_points | `maxValue=20` | +| 21 | [Factoring Quadratic](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/factoring.py) | x^2+4x-21 | (x+7)(x-3) | factoring | `range_x1=10` `range_x2=10` | +| 23 | [Solve a System of Equations in R^2](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/system_of_equations.py) | -x + 8y = -35, -4x + 5y = -32 | x = 3, y = -4 | system_of_equations | `range_x=10` `range_y=10` `coeff_mult_range=10` | +| 24 | [Distance between 2 points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/distance_two_points.py) | Find the distance between (-4, 5) and (-19, 11) | sqrt(261) | distance_two_points | `maxValXY=20` `minValXY=-20` | +| 26 | [Linear Equations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/linear_equations.py) | 3x + 6y = 18, -14x + 11y = -279 | x = 16, y = -5 | linear_equations | `n=2` `varRange=20` `coeffRange=20` | +| 41 | [Intersection of Two Lines](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/intersection_of_two_lines.py) | Find the point of intersection of the two lines: y = 0/5x + 10 and y = -5/2x + 5 | (-2, 10) | intersection_of_two_lines | `minM=-10` `maxM=10` `minB=-10` `maxB=10` `minDenominator=1` `maxDenominator=6` | +| 43 | [Cross Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_cross.py) | [-2, -13, 7] X [9, -17, 8] = | [15, 79, 151] | vector_cross | `minVal=-20` `maxVal=20` | +| 45 | [Simple Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/simple_interest.py) | Simple interest for a principle amount of 2145 dollars, 7% rate of interest and for a time period of 7 years is = | 1051.05 | simple_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10` | +| 46 | [Multiplication of two matrices](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/matrix_multiplication.py) | Multiply
-8-7
102
-7-8
-7-10
and
9221
-13-1-6
|
-65-37-934
882618-2
-55-38-641
-53-44-453
| matrix_multiplication | `maxVal=100` `max_dim=10` | +| 50 | [Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/quadratic_equation.py) | Zeros of the Quadratic Equation 10x^2+51x+46=0 | [-1.17, -3.93] | quadratic_equation | `maxVal=100` | +| 65 | [Multiplication of 2 complex numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_complex_numbers.py) | (-4+11j) * (5-9j) = | (79+91j) | multiply_complex_numbers | `minRealImaginaryNum=-20` `maxRealImaginaryNum=20` | +| 72 | [Dot Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_dot.py) | [-12, 11, 13] . [-4, 9, -13] = | -22 | vector_dot | `minVal=-20` `maxVal=20` | +| 74 | [Inverse of a Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/invert_matrix.py) | Inverse of Matrix Matrix([[25, 98, 43], [11, 56, 70], [27, 19, 89]]) is: | Matrix([[1218/41533, -2635/41533, 1484/41533], [911/124599, 1064/124599, -1277/124599], [-1303/124599, 2171/124599, 322/124599]]) | invert_matrix | `SquareMatrixDimension=3` `MaxMatrixElement=99` `OnlyIntegerElementsInInvertedMatrix=False` | +| 77 | [Determinant to 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/int_matrix_22_determinant.py) | Det([[11, 84], [38, 41]]) = | -2741 | int_matrix_22_determinant | `maxMatrixVal=100` | +| 78 | [Compound Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/compound_interest.py) | Compound interest for a principle amount of 4581 dollars, 4% rate of interest and for a time period of 6 year is = | 5796.43 | compound_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10` | +| 100 | [complex Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/complex_quadratic.py) | Find the roots of given Quadratic Equation 9x^2 + 7x + 1 = 0 | simplified solution : ((-0.189, -0.589)), generalized solution : ((-7 + sqrt(13))/2*9, (-7 - sqrt(13))/2*9) | complex_quadratic | `prob_type=0` `max_range=10` | +| 105 | [Combine Like terms](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/combine_like_terms.py) | 8x^4 + 4x^4 + 6x^1 + 9x^4 + 7x^5 + 10x^3 | 6x^1 + 10x^3 + 21x^4 + 7x^5 | combine_like_terms | `maxCoef=10` `maxExp=20` `maxTerms=10` | +| 111 | [Expanding Factored Binomial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/expanding.py) | (x-3)(x+4) | *x^2-3*x-12 | expanding | `range_x1=10` `range_x2=10` `range_a=10` `range_b=10` | ## basic_math | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 0 | [Addition](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/addition.py) | 33+15= | 48 | addition | `maxSum=99` `maxAddend=50` | -| 1 | [Subtraction](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/subtraction.py) | 5-5= | 0 | subtraction | `maxMinuend=99` `maxDiff=99` | -| 2 | [Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/multiplication.py) | 1*11= | 11 | multiplication | `maxMulti=12` | -| 3 | [Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/division.py) | 384/16= | 24 | division | `maxA=25` `maxB=25` | -| 6 | [Square Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square_root.py) | sqrt(49)= | 7 | square_root | `minNo=1` `maxNo=12` | -| 8 | [Square](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square.py) | 13^2= | 169 | square | `maxSquareNum=20` | -| 13 | [Complex Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/complex_division.py) | 89/11= | 8.09 | complex_division | `maxRes=99` `maxDivid=99` | -| 16 | [Fraction Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/divide_fractions.py) | (2/9)/(3/4) | 8/27 | divide_fractions | `maxVal=10` | -| 28 | [Fraction Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/fraction_multiplication.py) | (3/8)*(10/8) | 15/32 | fraction_multiplication | `maxVal=10` | +| 0 | [Addition](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/addition.py) | 16+43= | 59 | addition | `maxSum=99` `maxAddend=50` | +| 1 | [Subtraction](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/subtraction.py) | 85-8= | 77 | subtraction | `maxMinuend=99` `maxDiff=99` | +| 2 | [Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/multiplication.py) | 1*4= | 4 | multiplication | `maxMulti=12` | +| 3 | [Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/division.py) | 9/9= | 1 | division | `maxA=25` `maxB=25` | +| 6 | [Square Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square_root.py) | sqrt(4)= | 2 | square_root | `minNo=1` `maxNo=12` | +| 8 | [Square](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square.py) | 17^2= | 289 | square | `maxSquareNum=20` | +| 13 | [Complex Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/complex_division.py) | 21/59= | 0.36 | complex_division | `maxRes=99` `maxDivid=99` | +| 16 | [Fraction Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/divide_fractions.py) | (5/2)/(3/10) | 25/3 | divide_fractions | `maxVal=10` | +| 28 | [Fraction Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/fraction_multiplication.py) | (5/1)*(10/4) | 25/2 | fraction_multiplication | `maxVal=10` | | 31 | [Factorial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/factorial.py) | 2! = | 2 | factorial | `maxInput=6` | -| 44 | [Compare Fractions](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/compare_fractions.py) | Which symbol represents the comparison between 9/8 and 10/7? | < | compare_fractions | `maxVal=10` | -| 47 | [Cube Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/cube_root.py) | What is the cube root of 183 up to 2 decimal places? | 5.68 | cube_root | `minNo=1` `maxNo=1000` | -| 53 | [Exponentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/exponentiation.py) | 20^6 = | 64000000 | exponentiation | `maxBase=20` `maxExpo=10` | -| 71 | [Absolute difference between two numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/absolute_difference.py) | |-67--16|= | 51 | absolute_difference | `maxA=100` `maxB=100` | -| 80 | [Percentage of a number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage.py) | What is 24% of 74? | 17.76 | percentage | `maxValue=99` `maxpercentage=99` | -| 90 | [isprime](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/is_prime.py) | Is 50 prime? | No | is_prime | `max_num=100` | -| 97 | [Power of Powers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/power_of_powers.py) | Simplify 48^7^6= | 48^42 | power_of_powers | `maxBase=50` `maxPower=10` | +| 44 | [Compare Fractions](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/compare_fractions.py) | Which symbol represents the comparison between 8/2 and 9/8? | > | compare_fractions | `maxVal=10` | +| 47 | [Cube Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/cube_root.py) | What is the cube root of 396 up to 2 decimal places? | 7.34 | cube_root | `minNo=1` `maxNo=1000` | +| 53 | [Exponentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/exponentiation.py) | 2^7 = | 128 | exponentiation | `maxBase=20` `maxExpo=10` | +| 71 | [Absolute difference between two numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/absolute_difference.py) | |37--95|= | 132 | absolute_difference | `maxA=100` `maxB=100` | +| 80 | [Percentage of a number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage.py) | What is 99% of 76? | 75.24 | percentage | `maxValue=99` `maxpercentage=99` | +| 90 | [isprime](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/is_prime.py) | Is 61 prime? | Yes | is_prime | `max_num=100` | +| 97 | [Power of Powers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/power_of_powers.py) | Simplify 49^8^2= | 49^16 | power_of_powers | `maxBase=50` `maxPower=10` | ## calculus | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 7 | [Power Rule Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_differentiation.py) | 7x^2 + 7x^3 + 5x^9 + 4x^1 | 14x^1 + 21x^2 + 45x^8 + 4x^0 | power_rule_differentiation | `maxCoef=10` `maxExp=10` `maxTerms=5` | -| 48 | [Power Rule Integration](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_integration.py) | 4x^6 + 1x^9 + 8x^1 + 1x^8 | (4/6)x^7 + (1/9)x^10 + (8/1)x^2 + (1/8)x^9 + c | power_rule_integration | `maxCoef=10` `maxExp=10` `maxTerms=5` | -| 88 | [Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/differentiation.py) | differentiate w.r.t x : d(sin(x)+8*x^3)/dx | 24*x^2 + cos(x) | differentiation | `diff_lvl=2` | -| 89 | [Definite Integral of Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/definite_integral.py) | The definite integral within limits 0 to 1 of the equation 62x^2 + 93x + 81 is = | 148.1667 | definite_integral | `max_coeff=100` | -| 110 | [Stationary Points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/stationary_points.py) | f(x)=9*x^3 + 3*x^2 + 4 | (-2/9,328/81),(0,4) | stationary_points | `maxExp=3` `maxCoef=10` | +| 7 | [Power Rule Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_differentiation.py) | 2x^1 + 9x^7 + 6x^4 | 2x^0 + 63x^6 + 24x^3 | power_rule_differentiation | `maxCoef=10` `maxExp=10` `maxTerms=5` | +| 48 | [Power Rule Integration](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_integration.py) | 5x^2 + 3x^10 + 4x^1 | (5/2)x^3 + (3/10)x^11 + (4/1)x^2 + c | power_rule_integration | `maxCoef=10` `maxExp=10` `maxTerms=5` | +| 88 | [Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/differentiation.py) | differentiate w.r.t x : d(ln(x)+2*x^(-3))/dx | 1/x - 6/x^4 | differentiation | `diff_lvl=2` | +| 89 | [Definite Integral of Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/definite_integral.py) | The definite integral within limits 0 to 1 of the equation 100x^2 + 80x + 22 is = | 95.3333 | definite_integral | `max_coeff=100` | +| 110 | [Stationary Points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/stationary_points.py) | f(x)=3*x^3 + 6*x^2 + 9*x + 1 | | stationary_points | `maxExp=3` `maxCoef=10` | ## computer_science | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 4 | [Binary Complement 1s](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_complement_1s.py) | 01000= | 10111 | binary_complement_1s | `maxDigits=10` | -| 5 | [Modulo Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/modulo_division.py) | 64%42= | 22 | modulo_division | `maxRes=99` `maxModulo=99` | -| 14 | [Decimal to Binary](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_binary.py) | Binary of 63= | 111111 | decimal_to_binary | `max_dec=99` | -| 15 | [Binary to Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_decimal.py) | 101 | 5 | binary_to_decimal | `max_dig=10` | -| 56 | [Fibonacci Series](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/fibonacci_series.py) | The Fibonacci Series of the first 14 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233] | fibonacci_series | `minNo=1` | -| 62 | [nth Fibonacci number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/nth_fibonacci_number.py) | What is the 67th Fibonacci number? | 44945570212853 | nth_fibonacci_number | `maxN=100` | -| 64 | [Binary to Hexidecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_hex.py) | 0111111 | 0x3f | binary_to_hex | `max_dig=10` | -| 73 | [Binary 2's Complement](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_2s_complement.py) | 2's complement of 10 = | 10 | binary_2s_complement | `maxDigits=10` | -| 79 | [Decimal to Hexadecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py) | Binary of 169= | 0xa9 | decimal_to_hexadeci | `max_dec=1000` | -| 84 | [Converts decimal to octal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_octal.py) | The decimal number 3744 in Octal is: | 0o7240 | decimal_to_octal | `maxDecimal=4096` | -| 91 | [Binary Coded Decimal to Integer](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/bcd_to_decimal.py) | Integer of Binary Coded Decimal 1 is = | 5924 | bcd_to_decimal | `maxNumber=10000` | -| 103 | [Decimal to Binary Coded Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_bcd.py) | BCD of Decimal Number 3461 is = | 1385 | decimal_to_bcd | `maxNumber=10000` | +| 4 | [Binary Complement 1s](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_complement_1s.py) | 1= | 0 | binary_complement_1s | `maxDigits=10` | +| 5 | [Modulo Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/modulo_division.py) | 51%46= | 5 | modulo_division | `maxRes=99` `maxModulo=99` | +| 14 | [Decimal to Binary](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_binary.py) | Binary of 58= | 111010 | decimal_to_binary | `max_dec=99` | +| 15 | [Binary to Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_decimal.py) | 0110001111 | 399 | binary_to_decimal | `max_dig=10` | +| 56 | [Fibonacci Series](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/fibonacci_series.py) | The Fibonacci Series of the first 8 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13] | fibonacci_series | `minNo=1` | +| 62 | [nth Fibonacci number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/nth_fibonacci_number.py) | What is the 78th Fibonacci number? | 8944394323791488 | nth_fibonacci_number | `maxN=100` | +| 64 | [Binary to Hexidecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_hex.py) | 111011 | 0x3b | binary_to_hex | `max_dig=10` | +| 73 | [Binary 2's Complement](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_2s_complement.py) | 2's complement of 11010 = | 110 | binary_2s_complement | `maxDigits=10` | +| 79 | [Decimal to Hexadecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py) | Binary of 456= | 0x1c8 | decimal_to_hexadeci | `max_dec=1000` | +| 84 | [Converts decimal to octal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_octal.py) | The decimal number 3211 in Octal is: | 0o6213 | decimal_to_octal | `maxDecimal=4096` | +| 91 | [Binary Coded Decimal to Integer](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/bcd_to_decimal.py) | Integer of Binary Coded Decimal 7 is = | 29237 | bcd_to_decimal | `maxNumber=10000` | +| 103 | [Decimal to Binary Coded Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_bcd.py) | BCD of Decimal Number 5763 is = | 1683 | decimal_to_bcd | `maxNumber=10000` | ## geometry | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 18 | [Area of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_triangle.py) | Area of triangle with side lengths: 13 7 16 = | 44.49719092257398 | area_of_triangle | `maxA=20` `maxB=20` `maxC=20` | -| 19 | [Triangle exists check](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/valid_triangle.py) | Does triangle with sides 32, 44 and 10 exist? | No | valid_triangle | `maxSideLength=50` | -| 22 | [Third Angle of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/third_angle_of_triangle.py) | Third angle of triangle with angles 24 and 46 = | 110 | third_angle_of_triangle | `maxAngle=89` | -| 25 | [Pythagorean Theorem](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/pythagorean_theorem.py) | The hypotenuse of a right triangle given the other two lengths 13 and 10 = | 16.40 | pythagorean_theorem | `maxLength=20` | -| 29 | [Angle of a Regular Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_regular_polygon.py) | Find the angle of a regular polygon with 3 sides | 60.0 | angle_regular_polygon | `minVal=3` `maxVal=20` | -| 32 | [Surface Area of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cube.py) | Surface area of cube with side = 15m is | 1350 m^2 | surface_area_cube | `maxSide=20` `unit='m'` | -| 33 | [Surface Area of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cuboid.py) | Surface area of cuboid with sides = 6m, 11m, 3m is | 234 m^2 | surface_area_cuboid | `maxSide=20` `unit='m'` | -| 34 | [Surface Area of Cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cylinder.py) | Surface area of cylinder with height = 38m and radius = 2m is | 502 m^2 | surface_area_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'` | -| 35 | [Volum of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cube.py) | Volume of cube with side = 3m is | 27 m^3 | volume_cube | `maxSide=20` `unit='m'` | -| 36 | [Volume of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cuboid.py) | Volume of cuboid with sides = 6m, 14m, 3m is | 252 m^3 | volume_cuboid | `maxSide=20` `unit='m'` | -| 37 | [Volume of cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cylinder.py) | Volume of cylinder with height = 12m and radius = 16m is | 9650 m^3 | volume_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'` | -| 38 | [Surface Area of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cone.py) | Surface area of cone with height = 2m and radius = 5m is | 163 m^2 | surface_area_cone | `maxRadius=20` `maxHeight=50` `unit='m'` | -| 39 | [Volume of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cone.py) | Volume of cone with height = 31m and radius = 8m is | 2077 m^3 | volume_cone | `maxRadius=20` `maxHeight=50` `unit='m'` | -| 49 | [Fourth Angle of Quadrilateral](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py) | Fourth angle of quadrilateral with angles 166 , 68, 65 = | 61 | fourth_angle_of_quadrilateral | `maxAngle=180` | -| 57 | [Trigonometric Values](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/basic_trigonometry.py) | What is sin(0)? | 0 | basic_trigonometry | `angles=[0, 30, 45, 60, 90]` `functions=['sin', 'cos', 'tan']` | -| 58 | [Sum of Angles of Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sum_of_polygon_angles.py) | Sum of angles of polygon with 10 sides = | 1440 | sum_of_polygon_angles | `maxSides=12` | -| 60 | [Surface Area of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_sphere.py) | Surface area of Sphere with radius = 13m is | 2123.7166338267 m^2 | surface_area_sphere | `maxSide=20` `unit='m'` | -| 61 | [Volume of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_sphere.py) | Volume of sphere with radius 33 m = | 150532.55358940852 m^3 | volume_sphere | `maxRadius=100` | -| 70 | [Angle between 2 vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_btw_vectors.py) | angle between the vectors [373.03, 280.56, 51.12, 848.19, 914.96, 636.42, 936.04, 218.18, 727.01, 248.11] and [696.71, 8.09, 219.08, 466.57, 583.92, 152.82, 964.12, 686.21, 400.77, 343.46] is: | 0.56 radians | angle_btw_vectors | `maxEltAmt=20` | -| 75 | [Area of a Sector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sector_area.py) | Given radius, 45 and angle, 145. Find the area of the sector. | Area of sector = 2562.36151 | sector_area | `maxRadius=49` `maxAngle=359` | -| 86 | [Degrees to Radians](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/degree_to_rad.py) | Angle 196 in radians is = | 3.42 | degree_to_rad | `max_deg=360` | -| 87 | [Radians to Degrees](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/radian_to_deg.py) | Angle 1 in degrees is = | 57.3 | radian_to_deg | `max_rad=3` | -| 95 | [Curved surface area of a cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py) | What is the curved surface area of a cylinder of radius, 16 and height, 21? | CSA of cylinder = 2111.15 | curved_surface_area_cylinder | `maxRadius=49` `maxHeight=99` | -| 96 | [Perimeter of Polygons](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/perimeter_of_polygons.py) | The perimeter of a 5 sided polygon with lengths of [13, 84, 9, 97, 119]cm is: | 322 | perimeter_of_polygons | `maxSides=12` `maxLength=120` | -| 104 | [Circumference](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/circumference.py) | Circumference of circle with radius 48 | 301.59289474462014 | circumference | `maxRadius=100` | -| 108 | [Arc length of Angle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/arc_length.py) | Given radius, 16 and angle, 326. Find the arc length of the angle. | Arc length of the angle = 91.03637 | arc_length | `maxRadius=49` `maxAngle=359` | -| 112 | [Area of Circle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_circle.py) | Area of circle with radius 44 | 6084.571428571428 | area_of_circle | `maxRadius=100` | +| 18 | [Area of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_triangle.py) | Area of triangle with side lengths: 15 18 11 = | 82.3164625090267 | area_of_triangle | `maxA=20` `maxB=20` `maxC=20` | +| 19 | [Triangle exists check](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/valid_triangle.py) | Does triangle with sides 16, 30 and 26 exist? | Yes | valid_triangle | `maxSideLength=50` | +| 22 | [Third Angle of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/third_angle_of_triangle.py) | Third angle of triangle with angles 75 and 64 = | 41 | third_angle_of_triangle | `maxAngle=89` | +| 25 | [Pythagorean Theorem](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/pythagorean_theorem.py) | The hypotenuse of a right triangle given the other two lengths 7 and 6 = | 9.22 | pythagorean_theorem | `maxLength=20` | +| 29 | [Angle of a Regular Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_regular_polygon.py) | Find the angle of a regular polygon with 19 sides | 161.05 | angle_regular_polygon | `minVal=3` `maxVal=20` | +| 32 | [Surface Area of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cube.py) | Surface area of cube with side = 7m is | 294 m^2 | surface_area_cube | `maxSide=20` `unit='m'` | +| 33 | [Surface Area of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cuboid.py) | Surface area of cuboid with sides = 9m, 6m, 3m is | 198 m^2 | surface_area_cuboid | `maxSide=20` `unit='m'` | +| 34 | [Surface Area of Cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cylinder.py) | Surface area of cylinder with height = 35m and radius = 1m is | 226 m^2 | surface_area_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'` | +| 35 | [Volum of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cube.py) | Volume of cube with side = 19m is | 6859 m^3 | volume_cube | `maxSide=20` `unit='m'` | +| 36 | [Volume of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cuboid.py) | Volume of cuboid with sides = 14m, 18m, 8m is | 2016 m^3 | volume_cuboid | `maxSide=20` `unit='m'` | +| 37 | [Volume of cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cylinder.py) | Volume of cylinder with height = 2m and radius = 4m is | 100 m^3 | volume_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'` | +| 38 | [Surface Area of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cone.py) | Surface area of cone with height = 10m and radius = 1m is | 34 m^2 | surface_area_cone | `maxRadius=20` `maxHeight=50` `unit='m'` | +| 39 | [Volume of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cone.py) | Volume of cone with height = 41m and radius = 2m is | 171 m^3 | volume_cone | `maxRadius=20` `maxHeight=50` `unit='m'` | +| 49 | [Fourth Angle of Quadrilateral](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py) | Fourth angle of quadrilateral with angles 47 , 186, 23 = | 104 | fourth_angle_of_quadrilateral | `maxAngle=180` | +| 57 | [Trigonometric Values](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/basic_trigonometry.py) | What is tan(90)? | ∞ | basic_trigonometry | `angles=[0, 30, 45, 60, 90]` `functions=['sin', 'cos', 'tan']` | +| 58 | [Sum of Angles of Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sum_of_polygon_angles.py) | Sum of angles of polygon with 8 sides = | 1080 | sum_of_polygon_angles | `maxSides=12` | +| 60 | [Surface Area of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_sphere.py) | Surface area of Sphere with radius = 2m is | 50.26548245743669 m^2 | surface_area_sphere | `maxSide=20` `unit='m'` | +| 61 | [Volume of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_sphere.py) | Volume of sphere with radius 70 m = | 1436755.040241732 m^3 | volume_sphere | `maxRadius=100` | +| 70 | [Angle between 2 vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_btw_vectors.py) | angle between the vectors [809.39, 750.64, 808.48] and [99.52, 21.47, 323.85] is: | 0.69 radians | angle_btw_vectors | `maxEltAmt=20` | +| 75 | [Area of a Sector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sector_area.py) | Given radius, 38 and angle, 119. Find the area of the sector. | Area of sector = 1499.55199 | sector_area | `maxRadius=49` `maxAngle=359` | +| 86 | [Degrees to Radians](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/degree_to_rad.py) | Angle 187 in radians is = | 3.26 | degree_to_rad | `max_deg=360` | +| 87 | [Radians to Degrees](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/radian_to_deg.py) | Angle 2 in degrees is = | 114.59 | radian_to_deg | `max_rad=3` | +| 95 | [Curved surface area of a cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py) | What is the curved surface area of a cylinder of radius, 25 and height, 26? | CSA of cylinder = 4084.07 | curved_surface_area_cylinder | `maxRadius=49` `maxHeight=99` | +| 96 | [Perimeter of Polygons](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/perimeter_of_polygons.py) | The perimeter of a 11 sided polygon with lengths of [39, 70, 58, 27, 85, 119, 47, 59, 113, 38, 45]cm is: | 700 | perimeter_of_polygons | `maxSides=12` `maxLength=120` | +| 104 | [Circumference](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/circumference.py) | Circumference of circle with radius 76 | 477.5220833456485 | circumference | `maxRadius=100` | +| 108 | [Arc length of Angle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/arc_length.py) | Given radius, 30 and angle, 240. Find the arc length of the angle. | Arc length of the angle = 125.66371 | arc_length | `maxRadius=49` `maxAngle=359` | +| 112 | [Area of Circle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_circle.py) | Area of circle with radius 37 | 4302.571428571428 | area_of_circle | `maxRadius=100` | ## misc | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 9 | [LCM (Least Common Multiple)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/lcm.py) | LCM of 1 and 15 = | 15 | lcm | `maxVal=20` | -| 10 | [GCD (Greatest Common Denominator)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/gcd.py) | GCD of 3 and 3 = | 3 | gcd | `maxVal=20` | -| 27 | [Prime Factorisation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/prime_factors.py) | Find prime factors of 167 | [167] | prime_factors | `minVal=1` `maxVal=200` | -| 40 | [Common Factors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/common_factors.py) | Common Factors of 55 and 33 = | [1, 11] | common_factors | `maxVal=100` | -| 51 | [HCF (Highest Common Factor)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/hcf.py) | HCF of 16 and 9 = | 1 | hcf | `maxVal=20` | -| 55 | [Comparing surds](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/surds_comparison.py) | Fill in the blanks 62^(1/7) _ 74^(1/6) | < | surds_comparison | `maxValue=100` `maxRoot=10` | -| 63 | [Profit or Loss Percent](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/profit_loss_percent.py) | Loss percent when CP = 704 and SP = 134 is: | 80.9659090909091 | profit_loss_percent | `maxCP=1000` `maxSP=1000` | -| 66 | [Geometric Progression](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_progression.py) | For the given GP [8, 40, 200, 1000, 5000, 25000] ,Find the value of a,common ratio,8th term value, sum upto 11th term | The value of a is 8, common ratio is 5 , 8th term is 625000 , sum upto 11th term is 97656248.0 | geometric_progression | `number_values=6` `min_value=2` `max_value=12` `n_term=7` `sum_term=5` | -| 67 | [Geometric Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_mean.py) | Geometric mean of 4 numbers 66 , 46 , 28 , 54 = | (66*46*28*54)^(1/4) = 46.2874642463462 | geometric_mean | `maxValue=100` `maxNum=4` | -| 68 | [Harmonic Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/harmonic_mean.py) | Harmonic mean of 4 numbers 74 , 59 , 47 , 36 = | 4/((1/74) + (1/59) + (1/47) + (1/36)) = 50.30368360304657 | harmonic_mean | `maxValue=100` `maxNum=4` | -| 69 | [Euclidian norm or L2 norm of a vector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/euclidian_norm.py) | Euclidian norm or L2 norm of the vector[118.69308620957398, 418.5316709436745, 529.1318417822414, 545.3215860464462, 387.999979078107, 298.1451264197782, 392.3895332994427, 833.7453539560848, 555.724882920332, 472.05768476591004, 214.55377537613495, 760.9785260761229, 448.91380437418314, 73.27333213603282, 791.8291233802007, 918.6577753538513] is: | 2165.5845872381433 | euclidian_norm | `maxEltAmt=20` | -| 81 | [Celsius To Fahrenheit](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/celsius_to_fahrenheit.py) | Convert -12 degrees Celsius to degrees Fahrenheit = | 10.399999999999999 | celsius_to_fahrenheit | `maxTemp=100` | -| 82 | [AP Term Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_term.py) | Find the term number 29 of the AP series: -80, -71, -62 ... | 172 | arithmetic_progression_term | `maxd=100` `maxa=100` `maxn=100` | -| 83 | [AP Sum Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_sum.py) | Find the sum of first 64 terms of the AP series: -94, -6, 82 ... | 171392.0 | arithmetic_progression_sum | `maxd=100` `maxa=100` `maxn=100` | -| 85 | [Converts decimal to Roman Numerals](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/decimal_to_roman_numerals.py) | The number 3026 in Roman Numerals is: | MMMXXVI | decimal_to_roman_numerals | `maxDecimal=4000` | -| 92 | [Complex To Polar Form](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/complex_to_polar.py) | rexp(itheta) = | 26.91exp(i-2.3) | complex_to_polar | `minRealImaginaryNum=-20, maxRealImaginaryNum=20` | -| 93 | [Union,Intersection,Difference of Two Sets](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/set_operation.py) | Given the two sets a={1, 6, 7, 8, 9} ,b={1, 3, 4, 5, 10}.Find the Union,intersection,a-b,b-a and symmetric difference | Union is {1, 3, 4, 5, 6, 7, 8, 9, 10},Intersection is {1}, a-b is {8, 9, 6, 7},b-a is {10, 3, 4, 5}, Symmetric difference is {3, 4, 5, 6, 7, 8, 9, 10} | set_operation | `minval=3` `maxval=7` `n_a=4` `n_b=5` | -| 94 | [Base Conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/base_conversion.py) | Convert A201 from base 14 to base 10. | 27833 | base_conversion | `maxNum=60000` `maxBase=16` | -| 98 | [Quotient of Powers with Same Base](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_base.py) | The Quotient of 42^7 and 42^6 = 42^(7-6) = 42^1 | 42 | quotient_of_power_same_base | `maxBase=50` `maxPower=10` | -| 99 | [Quotient of Powers with Same Power](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_power.py) | The Quotient of 31^10 and 37^10 = (31/37)^10 = 0.8378378378378378^10 | 0.17045105659000342 | quotient_of_power_same_power | `maxBase=50` `maxPower=10` | -| 101 | [Leap Year or Not](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/is_leap_year.py) | Year 1999 | is not a leap year | is_leap_year | `minNumber=1900` `maxNumber=2099` | -| 102 | [Minute to Hour conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/minutes_to_hours.py) | Convert 851 minutes to Hours & Minutes | 14 hours and 11 minutes | minutes_to_hours | `maxMinutes=999` | -| 106 | [signum function](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/signum_function.py) | signum of 525 is = | 1 | signum_function | `min=-999` `max=999` | -| 109 | [Binomial distribution](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/binomial_distribution.py) | A manufacturer of metal pistons finds that, on average, 40.41% of the pistons they manufacture are rejected because they are incorrectly sized. What is the probability that a batch of 11 pistons will contain no more than 4 rejected pistons? | 52.15 | binomial_distribution | `` | +| 9 | [LCM (Least Common Multiple)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/lcm.py) | LCM of 19 and 2 = | 38 | lcm | `maxVal=20` | +| 10 | [GCD (Greatest Common Denominator)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/gcd.py) | GCD of 16 and 6 = | 2 | gcd | `maxVal=20` | +| 27 | [Prime Factorisation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/prime_factors.py) | Find prime factors of 78 | [2, 3, 13] | prime_factors | `minVal=1` `maxVal=200` | +| 40 | [Common Factors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/common_factors.py) | Common Factors of 21 and 77 = | [1, 7] | common_factors | `maxVal=100` | +| 51 | [HCF (Highest Common Factor)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/hcf.py) | HCF of 17 and 3 = | 1 | hcf | `maxVal=20` | +| 55 | [Comparing surds](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/surds_comparison.py) | Fill in the blanks 58^(1/5) _ 18^(1/8) | > | surds_comparison | `maxValue=100` `maxRoot=10` | +| 63 | [Profit or Loss Percent](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/profit_loss_percent.py) | Loss percent when CP = 821 and SP = 113 is: | 86.23629719853837 | profit_loss_percent | `maxCP=1000` `maxSP=1000` | +| 66 | [Geometric Progression](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_progression.py) | For the given GP [5, 15, 45, 135, 405, 1215] ,Find the value of a,common ratio,10th term value, sum upto 11th term | The value of a is 5, common ratio is 3 , 10th term is 98415 , sum upto 11th term is 442865.0 | geometric_progression | `number_values=6` `min_value=2` `max_value=12` `n_term=7` `sum_term=5` | +| 67 | [Geometric Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_mean.py) | Geometric mean of 4 numbers 76 , 17 , 48 , 57 = | (76*17*48*57)^(1/4) = 43.36053695794891 | geometric_mean | `maxValue=100` `maxNum=4` | +| 68 | [Harmonic Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/harmonic_mean.py) | Harmonic mean of 4 numbers 12 , 23 , 94 , 96 = | 4/((1/12) + (1/23) + (1/94) + (1/96)) = 27.0514173998045 | harmonic_mean | `maxValue=100` `maxNum=4` | +| 69 | [Euclidian norm or L2 norm of a vector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/euclidian_norm.py) | Euclidian norm or L2 norm of the vector[802.4475305377166, 660.7012519538307, 370.72333556197833, 54.54747734093479, 367.379416204208, 945.4792894951261, 219.91075384694793, 302.48678829534293] is: | 1545.8386466508773 | euclidian_norm | `maxEltAmt=20` | +| 81 | [Celsius To Fahrenheit](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/celsius_to_fahrenheit.py) | Convert 6 degrees Celsius to degrees Fahrenheit = | 42.8 | celsius_to_fahrenheit | `maxTemp=100` | +| 82 | [AP Term Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_term.py) | Find the term number 67 of the AP series: -19, -81, -143 ... | -4111 | arithmetic_progression_term | `maxd=100` `maxa=100` `maxn=100` | +| 83 | [AP Sum Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_sum.py) | Find the sum of first 45 terms of the AP series: 58, 32, 6 ... | -23130.0 | arithmetic_progression_sum | `maxd=100` `maxa=100` `maxn=100` | +| 85 | [Converts decimal to Roman Numerals](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/decimal_to_roman_numerals.py) | The number 0 in Roman Numerals is: | MMMDCCCXXXV | decimal_to_roman_numerals | `maxDecimal=4000` | +| 92 | [Complex To Polar Form](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/complex_to_polar.py) | 17.12(2.0theta + i-17.0theta) | -1.45 | complex_to_polar | `minRealImaginaryNum=-20, maxRealImaginaryNum=20` | +| 93 | [Union,Intersection,Difference of Two Sets](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/set_operation.py) | Given the two sets a={8, 9, 5} ,b={10, 3, 6, 7}.Find the Union,intersection,a-b,b-a and symmetric difference | Union is {3, 5, 6, 7, 8, 9, 10},Intersection is set(), a-b is {8, 9, 5},b-a is {10, 3, 6, 7}, Symmetric difference is {3, 5, 6, 7, 8, 9, 10} | set_operation | `minval=3` `maxval=7` `n_a=4` `n_b=5` | +| 94 | [Base Conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/base_conversion.py) | Convert E87 from base 16 to base 10. | 3719 | base_conversion | `maxNum=60000` `maxBase=16` | +| 98 | [Quotient of Powers with Same Base](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_base.py) | The Quotient of 31^8 and 31^8 = 31^(8-8) = 31^0 | 1 | quotient_of_power_same_base | `maxBase=50` `maxPower=10` | +| 99 | [Quotient of Powers with Same Power](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_power.py) | The Quotient of 24^1 and 19^1 = (24/19)^1 = 1.263157894736842^1 | 1.263157894736842 | quotient_of_power_same_power | `maxBase=50` `maxPower=10` | +| 101 | [Leap Year or Not](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/is_leap_year.py) | Year 2086 | is not a leap year | is_leap_year | `minNumber=1900` `maxNumber=2099` | +| 102 | [Minute to Hour conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/minutes_to_hours.py) | Convert 680 minutes to Hours & Minutes | 11 hours and 20 minutes | minutes_to_hours | `maxMinutes=999` | +| 106 | [signum function](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/signum_function.py) | signum of -93 is = | -1 | signum_function | `min=-999` `max=999` | +| 109 | [Binomial distribution](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/binomial_distribution.py) | A manufacturer of metal pistons finds that, on average, 40.52% of the pistons they manufacture are rejected because they are incorrectly sized. What is the probability that a batch of 20 pistons will contain no more than 2 rejected pistons? | 0.32 | binomial_distribution | `` | ## statistics | Id | Skill | Example problem | Example Solution | Function Name | Kwargs | |------|-------|-----------------|------------------|---------------|--------| -| 30 | [Combinations of Objects](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/combinations.py) | Number of combinations from 15 objects picked 1 at a time | 15 | combinations | `maxlength=20` | -| 42 | [Permutations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/permutation.py) | Number of Permutations from 11 objects picked 8 at a time = | 6652800 | permutation | `maxlength=20` | -| 52 | [Probability of a certain sum appearing on faces of dice](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/dice_sum_probability.py) | If 1 dice are rolled at the same time, the probability of getting a sum of 5 = | 1/6 | dice_sum_probability | `maxDice=3` | -| 54 | [Confidence interval For sample S](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/confidence_interval.py) | The confidence interval for sample [214, 235, 201, 238, 244, 219, 266, 234, 298, 258, 255, 254, 243, 220, 223, 215, 209, 225, 296, 252, 267, 248, 262, 226, 205, 211, 265] with 99% confidence is | (252.7166888228517, 227.50553339937053) | confidence_interval | `` | -| 59 | [Mean,Standard Deviation,Variance](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/data_summary.py) | Find the mean,standard deviation and variance for the data[31, 36, 35, 21, 38, 20, 19, 11, 37, 31, 24, 19, 18, 15, 17] | The Mean is 24.8 , Standard Deviation is 75.22666666666666, Variance is 8.673330771201261 | data_summary | `number_values=15` `minval=5` `maxval=50` | -| 76 | [Mean and Median](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/mean_median.py) | Given the series of numbers [32, 87, 22, 86, 92, 17, 57, 68, 82, 94]. find the arithmatic mean and mdian of the series | Arithmetic mean of the series is 63.7 and Arithmetic median of this series is 75.0 | mean_median | `maxlen=10` | -| 107 | [Conditional Probability](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/conditional_probability.py) | Someone tested positive for a nasty disease which only 1.78% of population have. Test sensitivity (true positive) is equal to SN= 96.47% whereas test specificity (true negative) SP= 92.86%. What is the probability that this guy really has that disease? | 19.67% | conditional_probability | `` | +| 30 | [Combinations of Objects](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/combinations.py) | Number of combinations from 17 objects picked 0 at a time | 1 | combinations | `maxlength=20` | +| 42 | [Permutations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/permutation.py) | Number of Permutations from 16 objects picked 8 at a time = | 518918400 | permutation | `maxlength=20` | +| 52 | [Probability of a certain sum appearing on faces of dice](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/dice_sum_probability.py) | If 3 dice are rolled at the same time, the probability of getting a sum of 5 = | 6/216 | dice_sum_probability | `maxDice=3` | +| 54 | [Confidence interval For sample S](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/confidence_interval.py) | The confidence interval for sample [272, 287, 274, 273, 266, 212, 242, 258, 291, 243, 248, 240, 236, 232, 249, 207, 271, 251, 206, 282, 295, 283, 238, 210, 234, 288, 268, 229, 289, 219, 294, 264, 215] with 95% confidence is | (262.9335851189468, 244.09671791135625) | confidence_interval | `` | +| 59 | [Mean,Standard Deviation,Variance](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/data_summary.py) | Find the mean,standard deviation and variance for the data[50, 29, 15, 50, 26, 25, 12, 16, 31, 38, 31, 5, 7, 42, 36] | The Mean is 27.533333333333335 , Standard Deviation is 193.0488888888889, Variance is 13.894203427648845 | data_summary | `number_values=15` `minval=5` `maxval=50` | +| 76 | [Mean and Median](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/mean_median.py) | Given the series of numbers [6, 9, 17, 22, 26, 35, 37, 58, 75, 83]. find the arithmatic mean and mdian of the series | Arithmetic mean of the series is 36.8 and Arithmetic median of this series is 30.5 | mean_median | `maxlen=10` | +| 107 | [Conditional Probability](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/conditional_probability.py) | Someone tested positive for a nasty disease which only 0.18% of population have. Test sensitivity (true positive) is equal to SN= 93.38% whereas test specificity (true negative) SP= 93.15%. What is the probability that this guy really has that disease? | 2.4% | conditional_probability | `` | diff --git a/mathgenerator/__init__.py b/mathgenerator/__init__.py index 2b2a0d0..9476ee7 100644 --- a/mathgenerator/__init__.py +++ b/mathgenerator/__init__.py @@ -31,12 +31,6 @@ class Generator: ) + " " + self.title def __call__(self, *args, **kwargs): - try: - return self.func(*args, **kwargs) - except TypeError: - # If an error is thrown from kwargs, remove the style element - # This happens if someone trys to get style='latex' for an - del kwargs['style'] return self.func(*args, **kwargs) diff --git a/mathgenerator/funcs/algebra/basic_algebra.py b/mathgenerator/funcs/algebra/basic_algebra.py index 1e9ee4a..90c36c7 100644 --- a/mathgenerator/funcs/algebra/basic_algebra.py +++ b/mathgenerator/funcs/algebra/basic_algebra.py @@ -1,7 +1,7 @@ from .__init__ import * -def basicAlgebraFunc(maxVariable=10, style='raw'): +def basicAlgebraFunc(maxVariable=10, format='string'): a = random.randint(1, maxVariable) b = random.randint(1, maxVariable) c = random.randint(b, maxVariable) @@ -20,13 +20,17 @@ def basicAlgebraFunc(maxVariable=10, style='raw'): elif a == 1 or a == i: x = f"{c - b}" - if style == 'latex': - problem = f"\\({a}x + {b} = {c}\\)" - solution = "\\(" + x + "\\)" - else: + if format == 'string': problem = f"{a}x + {b} = {c}" solution = x - return problem, solution + return problem, solution + elif format == 'latex': + problem = f"\\({a}x + {b} = {c}\\)" + solution = "\\(" + x + "\\)" + return problem, solution + else: + return a, b, c, x + basic_algebra = Generator("Basic Algebra", 11, diff --git a/mathgenerator/funcs/algebra/combine_like_terms.py b/mathgenerator/funcs/algebra/combine_like_terms.py index 8e80384..36d18ed 100644 --- a/mathgenerator/funcs/algebra/combine_like_terms.py +++ b/mathgenerator/funcs/algebra/combine_like_terms.py @@ -1,7 +1,7 @@ from .__init__ import * -def likeTermCombineFunc(maxCoef=10, maxExp=20, maxTerms=10): +def likeTermCombineFunc(maxCoef=10, maxExp=20, maxTerms=10, format='string'): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -16,7 +16,10 @@ def likeTermCombineFunc(maxCoef=10, maxExp=20, maxTerms=10): problem += str(coefficient) + "x^" + str(exponent) solution = combineTerms(problem) - return problem, solution + if format == 'string': + return problem, solution + else: + return problem, solution def combineTerms(string): diff --git a/mathgenerator/funcs/algebra/complex_quadratic.py b/mathgenerator/funcs/algebra/complex_quadratic.py index 2d2435c..0bae10a 100644 --- a/mathgenerator/funcs/algebra/complex_quadratic.py +++ b/mathgenerator/funcs/algebra/complex_quadratic.py @@ -1,7 +1,7 @@ from .__init__ import * -def complexQuadraticFunc(prob_type=0, max_range=10): +def complexQuadraticFunc(prob_type=0, max_range=10, format='string'): if prob_type < 0 or prob_type > 1: print("prob_type not supported") print("prob_type = 0 for real roots problems ") diff --git a/mathgenerator/funcs/algebra/compound_interest.py b/mathgenerator/funcs/algebra/compound_interest.py index 4946349..bff8333 100644 --- a/mathgenerator/funcs/algebra/compound_interest.py +++ b/mathgenerator/funcs/algebra/compound_interest.py @@ -1,16 +1,19 @@ from .__init__ import * -def compoundInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): +def compoundInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10, format='string'): p = random.randint(1000, maxPrinciple) r = random.randint(1, maxRate) n = random.randint(1, maxTime) - a = p * (1 + r / 100)**n - problem = "Compound interest for a principle amount of " + \ - str(p) + " dollars, " + str(r) + \ - "% rate of interest and for a time period of " + str(n) + " year is = " - solution = round(a, 2) - return problem, solution + a = round(p * (1 + r / 100)**n, 2) + + if format == 'string': + problem = "Compound interest for a principle amount of " + \ + str(p) + " dollars, " + str(r) + \ + "% rate of interest and for a time period of " + str(n) + " year is = " + return problem, str(a) + else: + return p, r, n, a compound_interest = Generator( diff --git a/mathgenerator/funcs/algebra/distance_two_points.py b/mathgenerator/funcs/algebra/distance_two_points.py index 6a6a461..dc7d54c 100644 --- a/mathgenerator/funcs/algebra/distance_two_points.py +++ b/mathgenerator/funcs/algebra/distance_two_points.py @@ -1,7 +1,7 @@ from .__init__ import * -def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): +def distanceTwoPointsFunc(maxValXY=20, minValXY=-20, format='string'): point1X = random.randint(minValXY, maxValXY + 1) point1Y = random.randint(minValXY, maxValXY + 1) point2X = random.randint(minValXY, maxValXY + 1) @@ -9,10 +9,12 @@ def distanceTwoPointsFunc(maxValXY=20, minValXY=-20): 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 - + if format == 'string': + solution = f"sqrt({distanceSq})" + problem = f"Find the distance between ({point1X}, {point1Y}) and ({point2X}, {point2Y})" + return problem, solution + else: + return point1X, point1Y, point2X, point2Y, distanceSq distance_two_points = Generator( "Distance between 2 points", 24, diff --git a/mathgenerator/funcs/algebra/expanding.py b/mathgenerator/funcs/algebra/expanding.py index 8e72a83..17f2ef5 100644 --- a/mathgenerator/funcs/algebra/expanding.py +++ b/mathgenerator/funcs/algebra/expanding.py @@ -1,7 +1,7 @@ from .__init__ import * -def expandingFunc(range_x1=10, range_x2=10, range_a=10, range_b=10): +def expandingFunc(range_x1=10, range_x2=10, range_a=10, range_b=10, format='string'): x1 = random.randint(-range_x1, range_x1) x2 = random.randint(-range_x2, range_x2) a = random.randint(-range_a, range_a) @@ -32,7 +32,6 @@ def expandingFunc(range_x1=10, range_x2=10, range_a=10, range_b=10): p3 = "" elif p3 == "+": p3 = p3[1:] - problem = f"({p1}x{p2})({p3}x{p4})" if c1 == "+1": c1 = "" @@ -40,8 +39,13 @@ def expandingFunc(range_x1=10, range_x2=10, range_a=10, range_b=10): c1 = c1[1:] # Cuts off the plus for readability if c2 == "+1": c2 = "" - solution = f"{c1}*x^2{c2}*x{c3}" - return problem, solution + + if format == 'string': + problem = f"({p1}x{p2})({p3}x{p4})" + solution = f"{c1}*x^2{c2}*x{c3}" + return problem, solution + else: + return p1, p2, p3, p4, c1, c2, c3 expanding = Generator("Expanding Factored Binomial", 111, expandingFunc, diff --git a/mathgenerator/funcs/algebra/factoring.py b/mathgenerator/funcs/algebra/factoring.py index 26f87b3..b24368a 100644 --- a/mathgenerator/funcs/algebra/factoring.py +++ b/mathgenerator/funcs/algebra/factoring.py @@ -1,7 +1,7 @@ from .__init__ import * -def factoringFunc(range_x1=10, range_x2=10): +def factoringFunc(range_x1=10, range_x2=10, format='string'): x1 = random.randint(-range_x1, range_x1) x2 = random.randint(-range_x2, range_x2) @@ -23,10 +23,13 @@ def factoringFunc(range_x1=10, range_x2=10): else: problem = f"x^2{b}x{c}" - x1 = intParser(x1) - x2 = intParser(x2) - solution = f"(x{x1})(x{x2})" - return problem, solution + if format == 'string': + x1 = intParser(x1) + x2 = intParser(x2) + solution = f"(x{x1})(x{x2})" + return problem, solution + else: + return b, c, x1, x2 factoring = Generator("Factoring Quadratic", 21, factoringFunc, diff --git a/mathgenerator/funcs/algebra/int_matrix_22_determinant.py b/mathgenerator/funcs/algebra/int_matrix_22_determinant.py index e387986..7c77ae4 100644 --- a/mathgenerator/funcs/algebra/int_matrix_22_determinant.py +++ b/mathgenerator/funcs/algebra/int_matrix_22_determinant.py @@ -1,16 +1,20 @@ from .__init__ import * -def determinantToMatrix22(maxMatrixVal=100): +def determinantToMatrix22(maxMatrixVal=100, format='string'): 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 + + if format == 'string': + problem = f"Det([[{a}, {b}], [{c}, {d}]]) = " + solution = f" {determinant}" + return problem, solution + else: + return a, b, c, d, determinant int_matrix_22_determinant = Generator("Determinant to 2x2 Matrix", 77, diff --git a/mathgenerator/funcs/algebra/intersection_of_two_lines.py b/mathgenerator/funcs/algebra/intersection_of_two_lines.py index ebc5c1a..b26605d 100644 --- a/mathgenerator/funcs/algebra/intersection_of_two_lines.py +++ b/mathgenerator/funcs/algebra/intersection_of_two_lines.py @@ -8,7 +8,8 @@ def intersectionOfTwoLinesFunc(minM=-10, minB=-10, maxB=10, minDenominator=1, - maxDenominator=6): + maxDenominator=6, + format='string'): def generateEquationString(m, b): """ Generates an equation given the slope and intercept. @@ -65,7 +66,10 @@ def intersectionOfTwoLinesFunc(minM=-10, intersection_y = ((m2 * b1) - (m1 * b2)) / (m2 - m1) solution = f"({fractionToString(intersection_x)}, {fractionToString(intersection_y)})" - return problem, solution + if format == 'string': + return problem, solution + else: + return equation1, equation2, solution intersection_of_two_lines = Generator( diff --git a/mathgenerator/funcs/algebra/invert_matrix.py b/mathgenerator/funcs/algebra/invert_matrix.py index 2a38eab..e40120b 100644 --- a/mathgenerator/funcs/algebra/invert_matrix.py +++ b/mathgenerator/funcs/algebra/invert_matrix.py @@ -4,7 +4,8 @@ import sympy def matrixInversion(SquareMatrixDimension=3, MaxMatrixElement=99, - OnlyIntegerElementsInInvertedMatrix=False): + OnlyIntegerElementsInInvertedMatrix=False, + format='string'): if OnlyIntegerElementsInInvertedMatrix is True: isItOk = False Mat = list() @@ -73,9 +74,13 @@ def matrixInversion(SquareMatrixDimension=3, 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 + + if format == 'string': + problem = 'Inverse of Matrix ' + str(Mat) + ' is:' + solution = str(sympy.Matrix.inv(Mat)) + return problem, solution + else: + return Mat, sympy.Matrix.inv(Mat) invert_matrix = Generator("Inverse of a Matrix", 74, diff --git a/mathgenerator/funcs/algebra/linear_equations.py b/mathgenerator/funcs/algebra/linear_equations.py index 5259364..998a8cf 100644 --- a/mathgenerator/funcs/algebra/linear_equations.py +++ b/mathgenerator/funcs/algebra/linear_equations.py @@ -1,7 +1,7 @@ from .__init__ import * -def linearEquationsFunc(n=2, varRange=20, coeffRange=20): +def linearEquationsFunc(n=2, varRange=20, coeffRange=20, format='string'): if n > 10: print("[!] n cannot be greater than 10") return None, None @@ -27,7 +27,11 @@ def linearEquationsFunc(n=2, varRange=20, coeffRange=20): # problem = "\n".join(problem) problem = ", ".join(problem) - return problem, solution + + if format == 'string': + return problem, solution + else: + return problem, solution linear_equations = Generator("Linear Equations", 26, linearEquationsFunc, diff --git a/mathgenerator/funcs/algebra/log.py b/mathgenerator/funcs/algebra/log.py index 9d6c1d1..816a90d 100644 --- a/mathgenerator/funcs/algebra/log.py +++ b/mathgenerator/funcs/algebra/log.py @@ -1,20 +1,22 @@ from .__init__ import * -def logFunc(maxBase=3, maxVal=8, style='raw'): +def logFunc(maxBase=3, maxVal=8, format='string'): a = random.randint(1, maxVal) b = random.randint(2, maxBase) c = pow(b, a) - if style == 'latex': + if format == 'string': + problem = "log" + str(b) + "(" + str(c) + ")" + solution = str(a) + return problem, solution + elif format == 'latex': problem = "\\(\\log_{" + str(b) + "}" + str(c) + "\\)" print(problem) solution = "\\(" + str(a) + "\\)" + return problem, solution else: - problem = "log" + str(b) + "(" + str(c) + ")" - solution = str(a) - - return problem, solution + return b, c, a log = Generator("Logarithm", 12, logFunc, diff --git a/mathgenerator/funcs/algebra/matrix_multiplication.py b/mathgenerator/funcs/algebra/matrix_multiplication.py index 250aab8..2b24303 100644 --- a/mathgenerator/funcs/algebra/matrix_multiplication.py +++ b/mathgenerator/funcs/algebra/matrix_multiplication.py @@ -1,7 +1,7 @@ from .__init__ import * -def matrixMultiplicationFunc(maxVal=100, max_dim=10): +def matrixMultiplicationFunc(maxVal=100, max_dim=10, format='string'): m = random.randint(2, max_dim) n = random.randint(2, max_dim) k = random.randint(2, max_dim) @@ -33,9 +33,12 @@ def matrixMultiplicationFunc(maxVal=100, max_dim=10): res[r].append(temp) # 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 + if format == 'string': + problem = f"Multiply \n{a_string}\n and \n\n{b_string}" + solution = matrixMultiplicationFuncHelper(res) + return problem, solution + else: + return a_string, b_string, res def matrixMultiplicationFuncHelper(inp): diff --git a/mathgenerator/funcs/algebra/midpoint_of_two_points.py b/mathgenerator/funcs/algebra/midpoint_of_two_points.py index 208ae63..063610c 100644 --- a/mathgenerator/funcs/algebra/midpoint_of_two_points.py +++ b/mathgenerator/funcs/algebra/midpoint_of_two_points.py @@ -1,15 +1,20 @@ from .__init__ import * -def MidPointOfTwoPointFunc(maxValue=20): +def MidPointOfTwoPointFunc(maxValue=20, format='string'): x1 = random.randint(-20, maxValue) y1 = random.randint(-20, maxValue) x2 = random.randint(-20, maxValue) y2 = random.randint(-20, maxValue) + xm = (x1 + x2) / 2 + ym = (y1 + y2) / 2 - problem = f"({x1},{y1}),({x2},{y2})=" - solution = f"({(x1+x2)/2},{(y1+y2)/2})" - return problem, solution + if format == 'string': + problem = f"({x1},{y1}),({x2},{y2})=" + solution = f"({xm},{ym})" + return problem, solution + else: + return x1, y1, x2, y2, xm, ym midPoint_of_two_points = Generator("Midpoint of the two point", 20, diff --git a/mathgenerator/funcs/algebra/multiply_complex_numbers.py b/mathgenerator/funcs/algebra/multiply_complex_numbers.py index 51e3bd9..a9f8400 100644 --- a/mathgenerator/funcs/algebra/multiply_complex_numbers.py +++ b/mathgenerator/funcs/algebra/multiply_complex_numbers.py @@ -2,14 +2,19 @@ from .__init__ import * def multiplyComplexNumbersFunc(minRealImaginaryNum=-20, - maxRealImaginaryNum=20): + maxRealImaginaryNum=20, + format='string'): 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 = str(num1 * num2) - return problem, solution + product = num1 * num2 + if format == 'string': + problem = f"{num1} * {num2} = " + solution = str(product) + return problem, solution + else: + return num1, num2, product multiply_complex_numbers = Generator("Multiplication of 2 complex numbers", 65, diff --git a/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py b/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py index 4cbef89..0f3e723 100644 --- a/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py +++ b/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py @@ -1,7 +1,7 @@ from .__init__ import * -def multiplyIntToMatrix22(maxMatrixVal=10, maxRes=100, style='raw'): +def multiplyIntToMatrix22(maxMatrixVal=10, maxRes=100, format='string'): a = random.randint(0, maxMatrixVal) b = random.randint(0, maxMatrixVal) c = random.randint(0, maxMatrixVal) @@ -14,15 +14,18 @@ def multiplyIntToMatrix22(maxMatrixVal=10, maxRes=100, style='raw'): c1 = c * constant d1 = d * constant - if style == 'latex': + if format == 'string': + problem = f"{constant} * [[{a}, {b}], [{c}, {d}]] = " + solution = f"[[{a1},{b1}],[{c1},{d1}]]" + return problem, solution + elif style == 'latex': problem = "\\(" + str(constant) + "\\cdot\\begin{bmatrix}" + str( a) + "&" + str(b) + "\\\\" + str(c) + "&" + str(d) + "\\end{bmatrix}=\\)" solution = "\\(\\begin{bmatrix}" + str(a1) + "&" + str(b1) + \ "\\\\" + str(c1) + "&" + str(d1) + "\\end{bmatrix}\\)" + return problem, solution else: - problem = f"{constant} * [[{a}, {b}], [{c}, {d}]] = " - solution = f"[[{a1},{b1}],[{c1},{d1}]]" - return problem, solution + return constant, a, b, c, d, a1, b1, c1, d1 multiply_int_to_22_matrix = Generator("Integer Multiplication with 2x2 Matrix", diff --git a/mathgenerator/funcs/algebra/quadratic_equation.py b/mathgenerator/funcs/algebra/quadratic_equation.py index 6fb28f3..b3f3dbf 100644 --- a/mathgenerator/funcs/algebra/quadratic_equation.py +++ b/mathgenerator/funcs/algebra/quadratic_equation.py @@ -3,18 +3,21 @@ from .__init__ import * import math -def quadraticEquation(maxVal=100): +def quadraticEquation(maxVal=100, format='string'): 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 + res = [round((-b + D) / (2 * a), 2), round((-b - D) / (2 * a), 2)] + + + if format == 'string': + problem = "Zeros of the Quadratic Equation {}x^2+{}x+{}=0".format(a, b, c) + solution = str(res) + return problem, solution + else: + return a, b, c, res quadratic_equation = Generator( diff --git a/mathgenerator/funcs/algebra/simple_interest.py b/mathgenerator/funcs/algebra/simple_interest.py index 455fb75..e9152b1 100644 --- a/mathgenerator/funcs/algebra/simple_interest.py +++ b/mathgenerator/funcs/algebra/simple_interest.py @@ -1,18 +1,21 @@ from .__init__ import * -def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10): +def simpleInterestFunc(maxPrinciple=10000, maxRate=10, maxTime=10, format='string'): a = random.randint(1000, maxPrinciple) b = random.randint(1, maxRate) c = random.randint(1, maxTime) - d = (a * b * c) / 100 + d = round((a * b * c) / 100, 2) - 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 + if format == 'string': + 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 = str(d) + return problem, solution + else: + return a, b, c, d simple_interest = Generator( diff --git a/mathgenerator/funcs/algebra/system_of_equations.py b/mathgenerator/funcs/algebra/system_of_equations.py index 9e10167..e4a6cb1 100644 --- a/mathgenerator/funcs/algebra/system_of_equations.py +++ b/mathgenerator/funcs/algebra/system_of_equations.py @@ -1,7 +1,7 @@ from .__init__ import * -def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): +def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10, format='string'): # Generate solution point first x = random.randint(-range_x, range_x) y = random.randint(-range_y, range_y) @@ -41,9 +41,12 @@ def systemOfEquationsFunc(range_x=10, range_y=10, coeff_mult_range=10): '' 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 + if format == 'string': + problem = f"{coeffToFuncString(new_c1)}, {coeffToFuncString(new_c2)}" + solution = f"x = {x}, y = {y}" + return problem, solution + else: + return new_c1, new_c2, x, y # Add random (non-zero) multiple of equations to each other diff --git a/mathgenerator/funcs/algebra/vector_cross.py b/mathgenerator/funcs/algebra/vector_cross.py index 78edf73..e71c79c 100644 --- a/mathgenerator/funcs/algebra/vector_cross.py +++ b/mathgenerator/funcs/algebra/vector_cross.py @@ -1,7 +1,7 @@ from .__init__ import * -def vectorCrossFunc(minVal=-20, maxVal=20): +def vectorCrossFunc(minVal=-20, maxVal=20, format='string'): a = [random.randint(minVal, maxVal) for i in range(3)] b = [random.randint(minVal, maxVal) for i in range(3)] c = [ @@ -9,9 +9,12 @@ def vectorCrossFunc(minVal=-20, maxVal=20): a[0] * b[1] - a[1] * b[0] ] - problem = str(a) + " X " + str(b) + " = " - solution = str(c) - return problem, solution + if format == 'string': + problem = str(a) + " X " + str(b) + " = " + solution = str(c) + return problem, solution + else: + return a, b, c vector_cross = Generator("Cross Product of 2 Vectors", 43, diff --git a/mathgenerator/funcs/algebra/vector_dot.py b/mathgenerator/funcs/algebra/vector_dot.py index a4f62d9..3487787 100644 --- a/mathgenerator/funcs/algebra/vector_dot.py +++ b/mathgenerator/funcs/algebra/vector_dot.py @@ -1,14 +1,17 @@ from .__init__ import * -def vectorDotFunc(minVal=-20, maxVal=20): +def vectorDotFunc(minVal=-20, maxVal=20, format='string'): 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 + if format == 'string': + problem = str(a) + " . " + str(b) + " = " + solution = str(c) + return problem, solution + else: + return a, b, c vector_dot = Generator("Dot Product of 2 Vectors", 72, diff --git a/mathgenerator/funcs/basic_math/absolute_difference.py b/mathgenerator/funcs/basic_math/absolute_difference.py index d5cd83f..4a7c34e 100644 --- a/mathgenerator/funcs/basic_math/absolute_difference.py +++ b/mathgenerator/funcs/basic_math/absolute_difference.py @@ -1,21 +1,21 @@ from .__init__ import * -def absoluteDifferenceFunc(maxA=100, maxB=100, style='raw'): +def main(maxA=100, maxB=100, format='string'): a = random.randint(-1 * maxA, maxA) b = random.randint(-1 * maxB, maxB) absDiff = abs(a - b) - if style == 'latex': - problem = "\\(|" + str(a) + "-" + str(b) + "|=\\)" - solution = f"\\({absDiff}\\)" + if format == "string": + return "|" + str(a) + "-" + str(b) + "|=", absDiff + elif format == 'latex': + return ("\\(|" + str(a) + "-" + str(b) + "|=\\)", + f"\\({absDiff}\\)") else: - problem = "|" + str(a) + "-" + str(b) + "|=" - solution = absDiff - return problem, solution + return a, b, absDiff absolute_difference = Generator( "Absolute difference between two numbers", 71, - absoluteDifferenceFunc, + main, ["maxA=100", "maxB=100"]) diff --git a/mathgenerator/funcs/basic_math/addition.py b/mathgenerator/funcs/basic_math/addition.py index afb2d88..658dc3b 100644 --- a/mathgenerator/funcs/basic_math/addition.py +++ b/mathgenerator/funcs/basic_math/addition.py @@ -1,7 +1,7 @@ from .__init__ import * -def main(maxSum=99, maxAddend=50, style='raw'): +def main(maxSum=99, maxAddend=50, format='string'): if maxAddend > maxSum: maxAddend = maxSum a = random.randint(0, maxAddend) @@ -9,14 +9,16 @@ def main(maxSum=99, maxAddend=50, style='raw'): b = random.randint(0, min((maxSum - a), maxAddend)) c = a + b - if style == 'latex': + if format == "string": + problem = str(a) + "+" + str(b) + "=" + solution = str(c) + return problem, solution + elif format == 'latex': problem = "\\(" + str(a) + '+' + str(b) + "\\)" solution = str(c) return problem, solution else: - problem = str(a) + "+" + str(b) + "=" - solution = str(c) - return problem, solution + return a, b, c addition = Generator("Addition", 0, main, ["maxSum=99", "maxAddend=50"]) diff --git a/mathgenerator/funcs/basic_math/compare_fractions.py b/mathgenerator/funcs/basic_math/compare_fractions.py index 95195ed..3c8b0c3 100644 --- a/mathgenerator/funcs/basic_math/compare_fractions.py +++ b/mathgenerator/funcs/basic_math/compare_fractions.py @@ -1,7 +1,7 @@ from .__init__ import * -def compareFractionsFunc(maxVal=10, style='raw'): +def compareFractionsFunc(maxVal=10, format='string'): a = random.randint(1, maxVal) b = random.randint(1, maxVal) c = random.randint(1, maxVal) @@ -22,11 +22,14 @@ def compareFractionsFunc(maxVal=10, style='raw'): else: solution = "=" - if style == 'latex': - problem = f"Which symbol represents the comparison between \\(\\frac{{{a}}}{{{b}}}\\) and \\(\\frac{{{c}}}{{{d}}}\\)?" + if format == "string": + return (f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?", + solution) + elif format == 'latex': + return (f"Which symbol represents the comparison between \\(\\frac{{{a}}}{{{b}}}\\) and \\(\\frac{{{c}}}{{{d}}}\\)?", + solution) else: - problem = f"Which symbol represents the comparison between {a}/{b} and {c}/{d}?" - return problem, solution + return a, b, c, d, solution compare_fractions = Generator( diff --git a/mathgenerator/funcs/basic_math/complex_division.py b/mathgenerator/funcs/basic_math/complex_division.py index 77cb60b..da0dc5a 100644 --- a/mathgenerator/funcs/basic_math/complex_division.py +++ b/mathgenerator/funcs/basic_math/complex_division.py @@ -1,19 +1,20 @@ from .__init__ import * -def complexDivisionFunc(maxRes=99, maxDivid=99, style='raw'): +def complexDivisionFunc(maxRes=99, maxDivid=99, format='string'): a = random.randint(0, maxDivid) b = random.randint(1, min(maxRes, maxDivid)) c = a / b c = round(c, 2) - if style == 'latex': - problem = "\\(" + str(a) + "\\div" + str(b) + "=\\)" - solution = "\\(" + str(c) + "\\)" + if format == "string": + return (str(a) + "/" + str(b) + "=", + str(c)) + elif format == 'latex': + return ("\\(" + str(a) + "\\div" + str(b) + "=\\)", + "\\(" + str(c) + "\\)") else: - problem = str(a) + "/" + str(b) + "=" - solution = str(c) - return problem, solution + return a, b, c complex_division = Generator("Complex Division", 13, complexDivisionFunc, diff --git a/mathgenerator/funcs/basic_math/cube_root.py b/mathgenerator/funcs/basic_math/cube_root.py index 49cd996..5c07726 100644 --- a/mathgenerator/funcs/basic_math/cube_root.py +++ b/mathgenerator/funcs/basic_math/cube_root.py @@ -1,18 +1,18 @@ from .__init__ import * -def cubeRootFunc(minNo=1, maxNo=1000, style='raw'): +def cubeRootFunc(minNo=1, maxNo=1000, format='string'): b = random.randint(minNo, maxNo) a = b**(1 / 3) - if style == 'latex': - problem = f"\\(\\sqrt[3]{{{b}}}=\\)" - solution = "\\(" + str(round(a, 2)) + "\\)" + if format == 'string': + return ("What is the cube root of " + str(b) + " up to 2 decimal places?", + str(round(a, 2))) + elif format == 'latex': + return (f"\\(\\sqrt[3]{{{b}}}=\\)", + "\\(" + str(round(a, 2)) + "\\)") else: - problem = "What is the cube root of " + \ - str(b) + " up to 2 decimal places?" - solution = str(round(a, 2)) - return problem, solution + return b, a cube_root = Generator("Cube Root", 47, diff --git a/mathgenerator/funcs/basic_math/divide_fractions.py b/mathgenerator/funcs/basic_math/divide_fractions.py index 5c40377..f387f2b 100644 --- a/mathgenerator/funcs/basic_math/divide_fractions.py +++ b/mathgenerator/funcs/basic_math/divide_fractions.py @@ -1,7 +1,7 @@ from .__init__ import * -def divideFractionsFunc(maxVal=10, style='raw'): +def divideFractionsFunc(maxVal=10, format='string'): a = random.randint(1, maxVal) b = random.randint(1, maxVal) @@ -29,18 +29,19 @@ def divideFractionsFunc(maxVal=10, style='raw'): if (tmp_d == 1 or tmp_d == gcd): x = f"{sol_numerator}" - if style == 'latex': - problem = "\\(\\frac{" + str(a) + "}{" + str(b) + \ - "}\\div\\frac{" + str(c) + "}{" + str(d) + "}=\\)" + if format == 'string': + return f"({a}/{b})/({c}/{d})", x + elif format == 'latex': if tmp_d == 1 or tmp_d == gcd: solution = "\\(" + str(sol_numerator) + "\\)" else: solution = "\\(\\frac{" + str(sol_numerator) + \ "}{" + str(sol_denominator) + "}\\)" + return ("\\(\\frac{" + str(a) + "}{" + str(b) + \ + "}\\div\\frac{" + str(c) + "}{" + str(d) + "}=\\)", + solution) else: - problem = f"({a}/{b})/({c}/{d})" - solution = x - return problem, solution + return a, b, c, d, x divide_fractions = Generator("Fraction Division", 16, diff --git a/mathgenerator/funcs/basic_math/division.py b/mathgenerator/funcs/basic_math/division.py index 46a0a89..078a338 100644 --- a/mathgenerator/funcs/basic_math/division.py +++ b/mathgenerator/funcs/basic_math/division.py @@ -1,7 +1,7 @@ from .__init__ import * -def divisionToIntFunc(maxA=25, maxB=25, style='raw'): +def divisionToIntFunc(maxA=25, maxB=25, format='string'): a = random.randint(1, maxA) b = random.randint(1, maxB) @@ -9,13 +9,13 @@ def divisionToIntFunc(maxA=25, maxB=25, style='raw'): dividend = random.choice([a, b]) quotient = int(divisor / dividend) - if style == 'latex': - problem = "\\(" + str(divisor) + "\\div" + str(dividend) + "=\\)" - solution = "\\(" + str(quotient) + "\\)" + if format == 'string': + return f"{divisor}/{dividend}=", str(quotient) + elif format == 'latex': + return ("\\(" + str(divisor) + "\\div" + str(dividend) + "=\\)", + "\\(" + str(quotient) + "\\)") else: - problem = f"{divisor}/{dividend}=" - solution = str(quotient) - return problem, solution + return divisor, dividend, quotient division = Generator("Division", 3, diff --git a/mathgenerator/funcs/basic_math/exponentiation.py b/mathgenerator/funcs/basic_math/exponentiation.py index 677a67c..b332c68 100644 --- a/mathgenerator/funcs/basic_math/exponentiation.py +++ b/mathgenerator/funcs/basic_math/exponentiation.py @@ -1,17 +1,17 @@ from .__init__ import * -def exponentiationFunc(maxBase=20, maxExpo=10, style='raw'): +def exponentiationFunc(maxBase=20, maxExpo=10, format='string'): base = random.randint(1, maxBase) expo = random.randint(1, maxExpo) - if style == 'latex': - problem = f"\\({base}^{{{expo}}}\\)" - solution = "\\(" + str(base**expo) + "\\)" + if format == 'string': + return (f"{base}^{expo} =", + str(base**expo)) + elif format == 'latex': + return f"\\({base}^{{{expo}}}\\)", "\\(" + str(base**expo) + "\\)" else: - problem = f"{base}^{expo} =" - solution = str(base**expo) - return problem, solution + return base, expo, base**expo exponentiation = Generator("Exponentiation", 53, diff --git a/mathgenerator/funcs/basic_math/factorial.py b/mathgenerator/funcs/basic_math/factorial.py index b180a63..b372ed7 100644 --- a/mathgenerator/funcs/basic_math/factorial.py +++ b/mathgenerator/funcs/basic_math/factorial.py @@ -1,18 +1,18 @@ from .__init__ import * -def factorialFunc(maxInput=6): +def factorialFunc(maxInput=6, format='string'): 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 + + if format == 'string': + return str(a) + "! = ", str(b) + else: + return a, b factorial = Generator("Factorial", 31, diff --git a/mathgenerator/funcs/basic_math/fraction_multiplication.py b/mathgenerator/funcs/basic_math/fraction_multiplication.py index e1c7fab..da6d603 100644 --- a/mathgenerator/funcs/basic_math/fraction_multiplication.py +++ b/mathgenerator/funcs/basic_math/fraction_multiplication.py @@ -1,7 +1,7 @@ from .__init__ import * -def multiplyFractionsFunc(maxVal=10, style='raw'): +def multiplyFractionsFunc(maxVal=10, format='string'): a = random.randint(1, maxVal) b = random.randint(1, maxVal) c = random.randint(1, maxVal) @@ -27,16 +27,17 @@ def multiplyFractionsFunc(maxVal=10, style='raw'): if (tmp_d == 1 or tmp_d == gcd): x = f"{tmp_n//gcd}" - if style == 'latex': + if format == 'string': + return f"({a}/{b})*({c}/{d})", x + elif format == 'latex': problem = f"\\(\\frac{{{a}}}{{{b}}}\\cdot\\frac{{{c}}}{{{d}}}=\\)" if (tmp_d == 1 or tmp_d == gcd): solution = f"\\(\\frac{{{tmp_n}}}{{{gcd}}}\\)" else: solution = f"\\(\\frac{{{tmp_n//gcd}}}{{{tmp_d//gcd}}}\\)" + return problem, solution else: - problem = f"({a}/{b})*({c}/{d})" - solution = x - return problem, solution + return a, b, c, d, x fraction_multiplication = Generator("Fraction Multiplication", 28, diff --git a/mathgenerator/funcs/basic_math/is_prime.py b/mathgenerator/funcs/basic_math/is_prime.py index 4796de5..608ae4e 100644 --- a/mathgenerator/funcs/basic_math/is_prime.py +++ b/mathgenerator/funcs/basic_math/is_prime.py @@ -1,7 +1,7 @@ from .__init__ import * -def isprime(max_num=100): +def isprime(max_num=100, format='string'): a = random.randint(2, max_num) problem = f"Is {a} prime?" if a == 2: @@ -15,7 +15,11 @@ def isprime(max_num=100): solution = "No" return (problem, solution) solution = "Yes" - return (problem, solution) + + if format == 'string': + return problem, solution + else: + return a, solution is_prime = Generator('isprime', 90, diff --git a/mathgenerator/funcs/basic_math/multiplication.py b/mathgenerator/funcs/basic_math/multiplication.py index bb8ff8e..91932bb 100644 --- a/mathgenerator/funcs/basic_math/multiplication.py +++ b/mathgenerator/funcs/basic_math/multiplication.py @@ -1,18 +1,20 @@ from .__init__ import * -def multiplicationFunc(maxMulti=12, style='raw'): +def multiplicationFunc(maxMulti=12, format='string'): a = random.randint(0, maxMulti) b = random.randint(0, maxMulti) c = a * b - if style == 'latex': + if format == 'string': + problem = str(a) + "*" + str(b) + "=" + solution = str(c) + return problem, solution + elif format == 'latex': problem = "\\(" + str(a) + "\\cdot" + str(b) + "=\\)" solution = "\\(" + str(c) + "\\)" else: - problem = str(a) + "*" + str(b) + "=" - solution = str(c) - return problem, solution + return a, b, c multiplication = Generator("Multiplication", 2, diff --git a/mathgenerator/funcs/basic_math/percentage.py b/mathgenerator/funcs/basic_math/percentage.py index 7f1507e..b9ec0e4 100644 --- a/mathgenerator/funcs/basic_math/percentage.py +++ b/mathgenerator/funcs/basic_math/percentage.py @@ -1,14 +1,18 @@ from .__init__ import * -def percentageFunc(maxValue=99, maxpercentage=99): +def percentageFunc(maxValue=99, maxpercentage=99, format='string'): 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"{formatted_float}" - return problem, solution + + if format == 'string': + return problem, solution + else: + return a, b, formatted_float percentage = Generator("Percentage of a number", 80, percentageFunc, diff --git a/mathgenerator/funcs/basic_math/power_of_powers.py b/mathgenerator/funcs/basic_math/power_of_powers.py index 51224fa..9f937b7 100644 --- a/mathgenerator/funcs/basic_math/power_of_powers.py +++ b/mathgenerator/funcs/basic_math/power_of_powers.py @@ -1,20 +1,23 @@ from .__init__ import * -def powerOfPowersFunc(maxBase=50, maxPower=10, style='raw'): +def powerOfPowersFunc(maxBase=50, maxPower=10, format='string'): base = random.randint(1, maxBase) power1 = random.randint(1, maxPower) power2 = random.randint(1, maxPower) step = power1 * power2 - if style == 'latex': + if format == 'string': + problem = f"Simplify {base}^{power1}^{power2}=" + solution = str(base) + '^' + str(step) + return problem, solution + elif format == 'latex': problem = "Simplify \\(" + str(base) + \ "^{" + str(power1) + "^{" + str(power2) + "}}\\)" solution = f"\\({base}^{{{step}}}\\)" + return problem, solution else: - problem = f"Simplify {base}^{power1}^{power2}=" - solution = str(base) + '^' + str(step) - return problem, solution + return base, power1, power2, base, step power_of_powers = Generator("Power of Powers", 97, powerOfPowersFunc, diff --git a/mathgenerator/funcs/basic_math/square.py b/mathgenerator/funcs/basic_math/square.py index 7af5e86..e42382f 100644 --- a/mathgenerator/funcs/basic_math/square.py +++ b/mathgenerator/funcs/basic_math/square.py @@ -1,17 +1,20 @@ from .__init__ import * -def squareFunc(maxSquareNum=20, style='raw'): +def squareFunc(maxSquareNum=20, format='string'): a = random.randint(1, maxSquareNum) b = a * a - if style == 'latex': - problem = "\\(" + str(a) + "^{2}=\\)" - solution = "\\(" + str(b) + "\\)" - else: + if format == 'string': problem = str(a) + "^2" + "=" solution = str(b) - return problem, solution + return problem, solution + if format == 'latex': + problem = "\\(" + str(a) + "^{2}=\\)" + solution = "\\(" + str(b) + "\\)" + return problem, solution + else: + return a, b square = Generator("Square", 8, squareFunc, ["maxSquareNum=20"]) diff --git a/mathgenerator/funcs/basic_math/square_root.py b/mathgenerator/funcs/basic_math/square_root.py index 4d510d7..fed358c 100644 --- a/mathgenerator/funcs/basic_math/square_root.py +++ b/mathgenerator/funcs/basic_math/square_root.py @@ -1,17 +1,20 @@ from .__init__ import * -def squareRootFunc(minNo=1, maxNo=12, style='raw'): +def squareRootFunc(minNo=1, maxNo=12, format='string'): b = random.randint(minNo, maxNo) a = b * b - if style == 'latex': - problem = "\\(\\sqrt{" + str(a) + "}=\\)" - solution = "\\(" + str(b) + "\\)" - else: + if format == 'string': problem = "sqrt(" + str(a) + ")=" solution = str(b) - return problem, solution + return problem, solution + elif format == 'latex': + problem = "\\(\\sqrt{" + str(a) + "}=\\)" + solution = "\\(" + str(b) + "\\)" + return problem, solution + else: + return a, b square_root = Generator("Square Root", 6, squareRootFunc, diff --git a/mathgenerator/funcs/basic_math/subtraction.py b/mathgenerator/funcs/basic_math/subtraction.py index f0a53fe..c6a40a2 100644 --- a/mathgenerator/funcs/basic_math/subtraction.py +++ b/mathgenerator/funcs/basic_math/subtraction.py @@ -1,14 +1,17 @@ from .__init__ import * -def subtractionFunc(maxMinuend=99, maxDiff=99): +def subtractionFunc(maxMinuend=99, maxDiff=99, format='string'): 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 + if format == 'string': + problem = str(a) + "-" + str(b) + "=" + solution = str(c) + return problem, solution + else: + return a, b, c subtraction = Generator("Subtraction", 1, subtractionFunc, diff --git a/mathgenerator/funcs/calculus/definite_integral.py b/mathgenerator/funcs/calculus/definite_integral.py index 461c1a2..b3152c5 100644 --- a/mathgenerator/funcs/calculus/definite_integral.py +++ b/mathgenerator/funcs/calculus/definite_integral.py @@ -3,7 +3,7 @@ import scipy from scipy.integrate import quad -def definiteIntegralFunc(max_coeff=100): +def definiteIntegralFunc(max_coeff=100, format='string'): def integrand(x, a, b, c): return a * x**2 + b * x + c @@ -14,12 +14,13 @@ def definiteIntegralFunc(max_coeff=100): result = quad(integrand, 0, 1, args=(a, b, c))[0] S = round(result, 4) - problem = "The definite integral within limits 0 to 1 of the equation " + \ - str(a) + "x^2 + " + str(b) + "x + " + str(c) + " is = " - - solution = str(S) - - return problem, solution + if format == 'string': + problem = "The definite integral within limits 0 to 1 of the equation " + \ + str(a) + "x^2 + " + str(b) + "x + " + str(c) + " is = " + solution = str(S) + return problem, solution + else: + return a, b, c, S definite_integral = Generator( diff --git a/mathgenerator/funcs/calculus/differentiation.py b/mathgenerator/funcs/calculus/differentiation.py index ae185fe..12e9ba3 100644 --- a/mathgenerator/funcs/calculus/differentiation.py +++ b/mathgenerator/funcs/calculus/differentiation.py @@ -31,11 +31,10 @@ def genDifferentiationProblem(diff_lvl=2): operator = random.choice(('/', '*')) problem = '(' + genDifferentiationProblem(2) + ')' + \ operator + '(' + genDifferentiationProblem(3) + ')' - return problem -def differentiationFunc(diff_lvl=2): +def differentiationFunc(diff_lvl=2, format='string'): if diff_lvl < 1 or diff_lvl > 4: print("diff_lvl not supported") return None @@ -46,7 +45,10 @@ def differentiationFunc(diff_lvl=2): solution = solution.replace('**', '^') problem = f"differentiate w.r.t x : d({problem})/dx" - return problem, solution + if format == 'string': + return problem, solution + else: + return problem, solution differentiation = Generator("Differentiation", 88, diff --git a/mathgenerator/funcs/calculus/power_rule_differentiation.py b/mathgenerator/funcs/calculus/power_rule_differentiation.py index cdd3cce..dc383d9 100644 --- a/mathgenerator/funcs/calculus/power_rule_differentiation.py +++ b/mathgenerator/funcs/calculus/power_rule_differentiation.py @@ -1,7 +1,7 @@ from .__init__ import * -def powerRuleDifferentiationFunc(maxCoef=10, maxExp=10, maxTerms=5): +def powerRuleDifferentiationFunc(maxCoef=10, maxExp=10, maxTerms=5, format='string'): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -15,7 +15,11 @@ def powerRuleDifferentiationFunc(maxCoef=10, maxExp=10, maxTerms=5): problem += str(coefficient) + "x^" + str(exponent) solution += str(coefficient * exponent) + "x^" + str(exponent - 1) - return problem, solution + + if format == 'string': + return problem, solution + else: + return problem, solution power_rule_differentiation = Generator("Power Rule Differentiation", 7, diff --git a/mathgenerator/funcs/calculus/power_rule_integration.py b/mathgenerator/funcs/calculus/power_rule_integration.py index a63ed96..8f77194 100644 --- a/mathgenerator/funcs/calculus/power_rule_integration.py +++ b/mathgenerator/funcs/calculus/power_rule_integration.py @@ -1,7 +1,7 @@ from .__init__ import * -def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): +def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5, format='string'): numTerms = random.randint(1, maxTerms) problem = "" solution = "" @@ -18,7 +18,11 @@ def powerRuleIntegrationFunc(maxCoef=10, maxExp=10, maxTerms=5): str(exponent) + ")x^" + str(exponent + 1) solution += " + c" - return problem, solution + + if format == 'string': + return problem, solution + else: + return problem, solution power_rule_integration = Generator("Power Rule Integration", 48, diff --git a/mathgenerator/funcs/calculus/stationary_points.py b/mathgenerator/funcs/calculus/stationary_points.py index 740834c..a43cdc0 100644 --- a/mathgenerator/funcs/calculus/stationary_points.py +++ b/mathgenerator/funcs/calculus/stationary_points.py @@ -2,7 +2,7 @@ from .__init__ import * import sympy -def stationaryPointsFunc(maxExp=3, maxCoef=10): +def stationaryPointsFunc(maxExp=3, maxCoef=10, format='string'): while True: x = sympy.symbols('x') problem = 0 @@ -11,12 +11,15 @@ def stationaryPointsFunc(maxExp=3, maxCoef=10): problem += coefficient * pow(x, exp) solution = sympy.stationary_points(problem, x) - if len(solution) != 0: - solution = ','.join('({},{})'.format( - str(p), - sympy.sympify(problem.replace(x, p)) - ) for p in solution) - problem = 'f(x)=' + str(problem).replace('**', '^') + #if len(solution) != 0: + solution = ','.join('({},{})'.format( + str(p), + sympy.sympify(problem.replace(x, p)) + ) for p in solution) + problem = 'f(x)=' + str(problem).replace('**', '^') + if format == 'string': + return problem, solution + else: return problem, solution diff --git a/mathgenerator/funcs/computer_science/bcd_to_decimal.py b/mathgenerator/funcs/computer_science/bcd_to_decimal.py index 6541c98..e5ab574 100644 --- a/mathgenerator/funcs/computer_science/bcd_to_decimal.py +++ b/mathgenerator/funcs/computer_science/bcd_to_decimal.py @@ -1,7 +1,7 @@ from .__init__ import * -def BCDtoDecimalFunc(maxNumber=10000): +def BCDtoDecimalFunc(maxNumber=10000, format='string'): n = random.randint(1000, maxNumber) binstring = '' while True: @@ -15,9 +15,12 @@ def BCDtoDecimalFunc(maxNumber=10000): else: n = q - problem = "Integer of Binary Coded Decimal " + str(n) + " is = " - solution = int(binstring, 2) - return problem, solution + if format == 'string': + problem = "Integer of Binary Coded Decimal " + str(n) + " is = " + solution = int(binstring, 2) + return problem, solution + else: + return n, int(binstring, 2) bcd_to_decimal = Generator("Binary Coded Decimal to Integer", 91, diff --git a/mathgenerator/funcs/computer_science/binary_2s_complement.py b/mathgenerator/funcs/computer_science/binary_2s_complement.py index ed4382e..cb8c514 100644 --- a/mathgenerator/funcs/computer_science/binary_2s_complement.py +++ b/mathgenerator/funcs/computer_science/binary_2s_complement.py @@ -1,7 +1,7 @@ from .__init__ import * -def binary2sComplementFunc(maxDigits=10): +def binary2sComplementFunc(maxDigits=10, format='string'): digits = random.randint(1, maxDigits) question = ''.join([str(random.randint(0, 1)) for i in range(digits)]).lstrip('0') @@ -23,9 +23,12 @@ def binary2sComplementFunc(maxDigits=10): if j == 0 and carry is True: answer.insert(0, '1') - problem = "2's complement of " + question + " =" - solution = ''.join(answer).lstrip('0') - return problem, solution + if format == 'string': + problem = "2's complement of " + question + " =" + solution = ''.join(answer).lstrip('0') + return problem, solution + else: + return question, answer binary_2s_complement = Generator("Binary 2's Complement", 73, diff --git a/mathgenerator/funcs/computer_science/binary_complement_1s.py b/mathgenerator/funcs/computer_science/binary_complement_1s.py index 7df991e..d38ac51 100644 --- a/mathgenerator/funcs/computer_science/binary_complement_1s.py +++ b/mathgenerator/funcs/computer_science/binary_complement_1s.py @@ -1,7 +1,7 @@ from .__init__ import * -def binaryComplement1sFunc(maxDigits=10): +def binaryComplement1sFunc(maxDigits=10, format='string'): question = '' answer = '' @@ -10,9 +10,11 @@ def binaryComplement1sFunc(maxDigits=10): question += temp answer += "0" if temp == "1" else "1" - problem = question + "=" - solution = answer - return problem, solution + if format == 'string': + problem = question + "=" + return problem, answer + else: + return problem, answer binary_complement_1s = Generator("Binary Complement 1s", 4, diff --git a/mathgenerator/funcs/computer_science/binary_to_decimal.py b/mathgenerator/funcs/computer_science/binary_to_decimal.py index cf9e415..fbab9fc 100644 --- a/mathgenerator/funcs/computer_science/binary_to_decimal.py +++ b/mathgenerator/funcs/computer_science/binary_to_decimal.py @@ -1,15 +1,18 @@ from .__init__ import * -def binaryToDecimalFunc(max_dig=10): +def binaryToDecimalFunc(max_dig=10, format='string'): 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 + if format == 'string': + solution = int(problem, 2) + return problem, solution + else: + return problem, solution binary_to_decimal = Generator("Binary to Decimal", 15, diff --git a/mathgenerator/funcs/computer_science/binary_to_hex.py b/mathgenerator/funcs/computer_science/binary_to_hex.py index 7338796..0841596 100644 --- a/mathgenerator/funcs/computer_science/binary_to_hex.py +++ b/mathgenerator/funcs/computer_science/binary_to_hex.py @@ -1,14 +1,17 @@ from .__init__ import * -def binaryToHexFunc(max_dig=10): +def binaryToHexFunc(max_dig=10, format='string'): 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 + if format == 'string': + solution = hex(int(problem, 2)) + return problem, solution + else: + return problem, solution binary_to_hex = Generator("Binary to Hexidecimal", 64, binaryToHexFunc, diff --git a/mathgenerator/funcs/computer_science/decimal_to_bcd.py b/mathgenerator/funcs/computer_science/decimal_to_bcd.py index 778daf3..a7ee973 100644 --- a/mathgenerator/funcs/computer_science/decimal_to_bcd.py +++ b/mathgenerator/funcs/computer_science/decimal_to_bcd.py @@ -1,7 +1,7 @@ from .__init__ import * -def DecimalToBCDFunc(maxNumber=10000): +def DecimalToBCDFunc(maxNumber=10000, format='string'): n = random.randint(1000, maxNumber) x = n # binstring = '' diff --git a/mathgenerator/funcs/computer_science/decimal_to_binary.py b/mathgenerator/funcs/computer_science/decimal_to_binary.py index 08da532..a550e96 100644 --- a/mathgenerator/funcs/computer_science/decimal_to_binary.py +++ b/mathgenerator/funcs/computer_science/decimal_to_binary.py @@ -1,7 +1,7 @@ from .__init__ import * -def DecimalToBinaryFunc(max_dec=99): +def DecimalToBinaryFunc(max_dec=99, format='string'): a = random.randint(1, max_dec) b = bin(a).replace("0b", "") diff --git a/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py b/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py index a64d425..dbc69aa 100644 --- a/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py +++ b/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py @@ -1,7 +1,7 @@ from .__init__ import * -def deciToHexaFunc(max_dec=1000): +def deciToHexaFunc(max_dec=1000, format='string'): a = random.randint(0, max_dec) b = hex(a) problem = "Binary of " + str(a) + "=" diff --git a/mathgenerator/funcs/computer_science/decimal_to_octal.py b/mathgenerator/funcs/computer_science/decimal_to_octal.py index d505679..a4156e9 100644 --- a/mathgenerator/funcs/computer_science/decimal_to_octal.py +++ b/mathgenerator/funcs/computer_science/decimal_to_octal.py @@ -1,11 +1,15 @@ from .__init__ import * -def decimalToOctalFunc(maxDecimal=4096): +def decimalToOctalFunc(maxDecimal=4096, format='string'): x = random.randint(0, maxDecimal) problem = "The decimal number " + str(x) + " in Octal is: " solution = oct(x) - return problem, solution + + if format == 'string': + return problem, solution + else: + return x, oct(x) decimal_to_octal = Generator("Converts decimal to octal", 84, diff --git a/mathgenerator/funcs/computer_science/fibonacci_series.py b/mathgenerator/funcs/computer_science/fibonacci_series.py index 0c44270..2228a14 100644 --- a/mathgenerator/funcs/computer_science/fibonacci_series.py +++ b/mathgenerator/funcs/computer_science/fibonacci_series.py @@ -1,7 +1,7 @@ from .__init__ import * -def fibonacciSeriesFunc(minNo=1): +def fibonacciSeriesFunc(minNo=1, format='string'): n = random.randint(minNo, 20) def createFibList(n): @@ -16,9 +16,11 @@ def fibonacciSeriesFunc(minNo=1): fibList = createFibList(n) - problem = "The Fibonacci Series of the first " + str(n) + " numbers is ?" - solution = fibList - return problem, solution + if format == 'string': + problem = "The Fibonacci Series of the first " + str(n) + " numbers is ?" + return problem, fibList + else: + return n, fibList fibonacci_series = Generator( diff --git a/mathgenerator/funcs/computer_science/modulo_division.py b/mathgenerator/funcs/computer_science/modulo_division.py index 3d849aa..a25837a 100644 --- a/mathgenerator/funcs/computer_science/modulo_division.py +++ b/mathgenerator/funcs/computer_science/modulo_division.py @@ -1,14 +1,17 @@ from .__init__ import * -def moduloFunc(maxRes=99, maxModulo=99): +def moduloFunc(maxRes=99, maxModulo=99, format='string'): 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 + if format == 'string': + problem = str(a) + "%" + str(b) + "=" + solution = str(c) + return problem, solution + else: + return a, b, c modulo_division = Generator("Modulo Division", 5, moduloFunc, diff --git a/mathgenerator/funcs/computer_science/nth_fibonacci_number.py b/mathgenerator/funcs/computer_science/nth_fibonacci_number.py index 86a4cad..c333fd0 100644 --- a/mathgenerator/funcs/computer_science/nth_fibonacci_number.py +++ b/mathgenerator/funcs/computer_science/nth_fibonacci_number.py @@ -3,13 +3,17 @@ from .__init__ import * import math -def nthFibonacciNumberFunc(maxN=100): +def nthFibonacciNumberFunc(maxN=100, format='string'): 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 + + if format == 'string': + solution = f"{ans}" + return problem, solution + else: + return n, ans nth_fibonacci_number = Generator("nth Fibonacci number", 62, diff --git a/mathgenerator/funcs/geometry/angle_btw_vectors.py b/mathgenerator/funcs/geometry/angle_btw_vectors.py index d42cf93..bf7c643 100644 --- a/mathgenerator/funcs/geometry/angle_btw_vectors.py +++ b/mathgenerator/funcs/geometry/angle_btw_vectors.py @@ -2,7 +2,7 @@ from .__init__ import * import math -def angleBtwVectorsFunc(maxEltAmt=20): +def angleBtwVectorsFunc(maxEltAmt=20, format='string'): s = 0 v1 = [ round(random.uniform(0, 1000), 2) diff --git a/mathgenerator/funcs/geometry/angle_regular_polygon.py b/mathgenerator/funcs/geometry/angle_regular_polygon.py index aaa52d4..b09fc4b 100644 --- a/mathgenerator/funcs/geometry/angle_regular_polygon.py +++ b/mathgenerator/funcs/geometry/angle_regular_polygon.py @@ -1,13 +1,17 @@ from .__init__ import * -def regularPolygonAngleFunc(minVal=3, maxVal=20): +def regularPolygonAngleFunc(minVal=3, maxVal=20, format='string'): 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 + + if format == 'string': + return problem, solution + else: + return sideNum, solution angle_regular_polygon = Generator( diff --git a/mathgenerator/funcs/geometry/arc_length.py b/mathgenerator/funcs/geometry/arc_length.py index 96de149..12992e7 100644 --- a/mathgenerator/funcs/geometry/arc_length.py +++ b/mathgenerator/funcs/geometry/arc_length.py @@ -3,14 +3,18 @@ from .__init__ import * import math -def arclengthFunc(maxRadius=49, maxAngle=359): - Radius = random.randint(1, maxRadius) - Angle = random.randint(1, maxAngle) - problem = f"Given radius, {Radius} and angle, {Angle}. Find the arc length of the angle." - angle_arc_length = float((Angle / 360) * 2 * math.pi * Radius) +def arclengthFunc(maxRadius=49, maxAngle=359, format='string'): + radius = random.randint(1, maxRadius) + angle = random.randint(1, maxAngle) + problem = f"Given radius, {radius} and angle, {angle}. Find the arc length of the angle." + angle_arc_length = float((angle / 360) * 2 * math.pi * radius) formatted_float = "{:.5f}".format(angle_arc_length) - solution = f"Arc length of the angle = {formatted_float}" - return problem, solution + + if format == 'string': + solution = f"Arc length of the angle = {formatted_float}" + return problem, solution + else: + return radius, angle, formatted_float arc_length = Generator("Arc length of Angle", 108, arclengthFunc, diff --git a/mathgenerator/funcs/geometry/area_of_circle.py b/mathgenerator/funcs/geometry/area_of_circle.py index 47c29b6..b3b5b54 100644 --- a/mathgenerator/funcs/geometry/area_of_circle.py +++ b/mathgenerator/funcs/geometry/area_of_circle.py @@ -1,13 +1,16 @@ from .__init__ import * -def areaCircle(maxRadius=100): +def areaCircle(maxRadius=100, format='string'): r = random.randint(0, maxRadius) pi = 22 / 7 area = pi * r * r - problem = f"Area of circle with radius {r}" - solution = area - return problem, solution + + if format == 'string': + problem = f"Area of circle with radius {r}" + return problem, str(area) + else: + return r, area area_of_circle = Generator("Area of Circle", 112, areaCircle, diff --git a/mathgenerator/funcs/geometry/area_of_triangle.py b/mathgenerator/funcs/geometry/area_of_triangle.py index e872b72..676ed11 100644 --- a/mathgenerator/funcs/geometry/area_of_triangle.py +++ b/mathgenerator/funcs/geometry/area_of_triangle.py @@ -1,7 +1,7 @@ from .__init__ import * -def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20): +def areaOfTriangleFunc(maxA=20, maxB=20, maxC=20, format='string'): a = random.randint(1, maxA) b = random.randint(1, maxB) c = random.randint(1, maxC) @@ -9,10 +9,13 @@ 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) + " = " - solution = str(area) - return problem, solution + if format == 'string': + problem = "Area of triangle with side lengths: " + \ + str(a) + " " + str(b) + " " + str(c) + " = " + solution = str(area) + return problem, solution + else: + return a, b, c, area area_of_triangle = Generator("Area of Triangle", 18, diff --git a/mathgenerator/funcs/geometry/basic_trigonometry.py b/mathgenerator/funcs/geometry/basic_trigonometry.py index 8fdf4fc..55c601d 100644 --- a/mathgenerator/funcs/geometry/basic_trigonometry.py +++ b/mathgenerator/funcs/geometry/basic_trigonometry.py @@ -5,7 +5,7 @@ import math # Handles degrees in quadrant one def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], - functions=["sin", "cos", "tan"]): + functions=["sin", "cos", "tan"], format='string'): angle = random.choice(angles) function = random.choice(functions) @@ -24,7 +24,11 @@ def basicTrigonometryFunc(angles=[0, 30, 45, 60, 90], solution = result_fraction_map[round(eval(expression), 2)] if round( eval(expression), 2) <= 99999 else "∞" # for handling the ∞ condition - return problem, solution + + if format == 'string': + return problem, solution + else: + return function, angle, solution basic_trigonometry = Generator("Trigonometric Values", 57, basicTrigonometryFunc, diff --git a/mathgenerator/funcs/geometry/circumference.py b/mathgenerator/funcs/geometry/circumference.py index fb50748..60fc308 100644 --- a/mathgenerator/funcs/geometry/circumference.py +++ b/mathgenerator/funcs/geometry/circumference.py @@ -2,12 +2,15 @@ from .__init__ import * import math -def circumferenceCircle(maxRadius=100): +def circumferenceCircle(maxRadius=100, format='string'): r = random.randint(0, maxRadius) circumference = 2 * math.pi * r - problem = f"Circumference of circle with radius {r}" - solution = circumference - return problem, solution + + if format == 'string': + problem = f"Circumference of circle with radius {r}" + return problem, circumference + else: + return r, circumference circumference = Generator("Circumference", 104, circumferenceCircle, diff --git a/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py b/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py index 23d4c5d..6007316 100644 --- a/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py +++ b/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py @@ -1,14 +1,18 @@ from .__init__ import * -def curvedSurfaceAreaCylinderFunc(maxRadius=49, maxHeight=99): +def curvedSurfaceAreaCylinderFunc(maxRadius=49, maxHeight=99, format='string'): r = random.randint(1, maxRadius) h = random.randint(1, maxHeight) - problem = f"What is the curved surface area of a cylinder of radius, {r} and height, {h}?" csa = float(2 * math.pi * r * h) formatted_float = round(csa, 2) # "{:.5f}".format(csa) - solution = f"CSA of cylinder = {formatted_float}" - return problem, solution + + if format == 'string': + problem = f"What is the curved surface area of a cylinder of radius, {r} and height, {h}?" + solution = f"CSA of cylinder = {formatted_float}" + return problem, solution + else: + return r, h, formatted_float curved_surface_area_cylinder = Generator( diff --git a/mathgenerator/funcs/geometry/degree_to_rad.py b/mathgenerator/funcs/geometry/degree_to_rad.py index 5dddc37..72c8d1c 100644 --- a/mathgenerator/funcs/geometry/degree_to_rad.py +++ b/mathgenerator/funcs/geometry/degree_to_rad.py @@ -2,15 +2,17 @@ from .__init__ import * from numpy import pi -def degreeToRadFunc(max_deg=360): +def degreeToRadFunc(max_deg=360, format='string'): a = random.randint(0, max_deg) b = (pi * a) / 180 b = round(b, 2) - problem = "Angle " + str(a) + " in radians is = " - solution = str(b) - - return problem, solution + if format == 'string': + problem = "Angle " + str(a) + " in radians is = " + solution = str(b) + return problem, solution + else: + return a, b degree_to_rad = Generator("Degrees to Radians", 86, degreeToRadFunc, diff --git a/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py b/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py index 35832d6..b8b76c9 100644 --- a/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py +++ b/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py @@ -1,7 +1,7 @@ from .__init__ import * -def fourthAngleOfQuadriFunc(maxAngle=180): +def fourthAngleOfQuadriFunc(maxAngle=180, format='string'): angle1 = random.randint(1, maxAngle) angle2 = random.randint(1, 240 - angle1) angle3 = random.randint(1, 340 - (angle1 + angle2)) @@ -9,9 +9,12 @@ 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 + if format == 'string': + problem = f"Fourth angle of quadrilateral with angles {angle1} , {angle2}, {angle3} =" + solution = angle4 + return problem, solution + else: + return angle1, angle2, angle3, angle4 fourth_angle_of_quadrilateral = Generator( diff --git a/mathgenerator/funcs/geometry/perimeter_of_polygons.py b/mathgenerator/funcs/geometry/perimeter_of_polygons.py index ccf66d9..33c45d2 100644 --- a/mathgenerator/funcs/geometry/perimeter_of_polygons.py +++ b/mathgenerator/funcs/geometry/perimeter_of_polygons.py @@ -1,7 +1,7 @@ from .__init__ import * -def perimeterOfPolygons(maxSides=12, maxLength=120): +def perimeterOfPolygons(maxSides=12, maxLength=120, format='string'): size_of_sides = random.randint(3, maxSides) sides = [] for x in range(size_of_sides): @@ -11,7 +11,11 @@ def perimeterOfPolygons(maxSides=12, maxLength=120): solution = 0 for y in range(len(sides)): solution += sides[y] - return problem, solution + + if format == 'string': + return problem, solution + else: + return size_of_sides, sides, solution perimeter_of_polygons = Generator( diff --git a/mathgenerator/funcs/geometry/pythagorean_theorem.py b/mathgenerator/funcs/geometry/pythagorean_theorem.py index 25888be..3103b6c 100644 --- a/mathgenerator/funcs/geometry/pythagorean_theorem.py +++ b/mathgenerator/funcs/geometry/pythagorean_theorem.py @@ -1,14 +1,17 @@ from .__init__ import * -def pythagoreanTheoremFunc(maxLength=20): +def pythagoreanTheoremFunc(maxLength=20, format='string'): 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 + if format == 'string': + 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 + else: + return a, b, round(c,2) pythagorean_theorem = Generator( diff --git a/mathgenerator/funcs/geometry/radian_to_deg.py b/mathgenerator/funcs/geometry/radian_to_deg.py index a33e783..fa9f133 100644 --- a/mathgenerator/funcs/geometry/radian_to_deg.py +++ b/mathgenerator/funcs/geometry/radian_to_deg.py @@ -2,16 +2,18 @@ from .__init__ import * from numpy import pi -def radianToDegFunc(max_rad=3): +def radianToDegFunc(max_rad=3, format='string'): # max_rad is supposed to be pi but random can't handle non-integer a = random.randint(0, max_rad) b = (180 * a) / pi b = round(b, 2) - problem = "Angle " + str(a) + " in degrees is = " - solution = str(b) - - return problem, solution + if format == 'string': + problem = "Angle " + str(a) + " in degrees is = " + solution = str(b) + return problem, solution + else: + return a, b radian_to_deg = Generator("Radians to Degrees", 87, radianToDegFunc, diff --git a/mathgenerator/funcs/geometry/sector_area.py b/mathgenerator/funcs/geometry/sector_area.py index 408121a..d09c1e7 100644 --- a/mathgenerator/funcs/geometry/sector_area.py +++ b/mathgenerator/funcs/geometry/sector_area.py @@ -1,14 +1,18 @@ from .__init__ import * -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) +def sectorAreaFunc(maxRadius=49, maxAngle=359, format='string'): + r = random.randint(1, maxRadius) + a = random.randint(1, maxAngle) + secArea = float((a / 360) * math.pi * r * r) formatted_float = "{:.5f}".format(secArea) - solution = f"Area of sector = {formatted_float}" - return problem, solution + + if format == 'string': + problem = f"Given radius, {r} and angle, {a}. Find the area of the sector." + solution = f"Area of sector = {formatted_float}" + return problem, solution + else: + return r, a, formatted_float sector_area = Generator("Area of a Sector", 75, sectorAreaFunc, diff --git a/mathgenerator/funcs/geometry/sum_of_polygon_angles.py b/mathgenerator/funcs/geometry/sum_of_polygon_angles.py index 0b9de18..f5b13fe 100644 --- a/mathgenerator/funcs/geometry/sum_of_polygon_angles.py +++ b/mathgenerator/funcs/geometry/sum_of_polygon_angles.py @@ -1,13 +1,15 @@ from .__init__ import * -def sumOfAnglesOfPolygonFunc(maxSides=12): - side = random.randint(3, maxSides) - sum = (side - 2) * 180 +def sumOfAnglesOfPolygonFunc(maxSides=12, format='string'): + side_count = random.randint(3, maxSides) + sum = (side_count - 2) * 180 - problem = f"Sum of angles of polygon with {side} sides = " - solution = sum - return problem, solution + if format == 'string': + problem = f"Sum of angles of polygon with {side_count} sides = " + return problem, sum + else: + return side_count, sum sum_of_polygon_angles = Generator("Sum of Angles of Polygon", 58, diff --git a/mathgenerator/funcs/geometry/surface_area_cone.py b/mathgenerator/funcs/geometry/surface_area_cone.py index 5bb9d23..df57259 100644 --- a/mathgenerator/funcs/geometry/surface_area_cone.py +++ b/mathgenerator/funcs/geometry/surface_area_cone.py @@ -1,16 +1,19 @@ from .__init__ import * -def surfaceAreaCone(maxRadius=20, maxHeight=50, unit='m'): +def surfaceAreaCone(maxRadius=20, maxHeight=50, unit='m', format='string'): 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 + if format == 'string': + problem = f"Surface area of cone with height = {a}{unit} and radius = {b}{unit} is" + solution = f"{ans} {unit}^2" + return problem, solution + else: + return a, b, ans, unit surface_area_cone = Generator( diff --git a/mathgenerator/funcs/geometry/surface_area_cube.py b/mathgenerator/funcs/geometry/surface_area_cube.py index 5f7a6fb..76e0c79 100644 --- a/mathgenerator/funcs/geometry/surface_area_cube.py +++ b/mathgenerator/funcs/geometry/surface_area_cube.py @@ -1,12 +1,16 @@ from .__init__ import * -def surfaceAreaCube(maxSide=20, unit='m'): +def surfaceAreaCube(maxSide=20, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Surface area of cube with side = {a}{unit} is" + solution = f"{ans} {unit}^2" + return problem, solution + else: + return a, ans, unit surface_area_cube = Generator("Surface Area of Cube", 32, diff --git a/mathgenerator/funcs/geometry/surface_area_cuboid.py b/mathgenerator/funcs/geometry/surface_area_cuboid.py index 01d49b0..7a42b47 100644 --- a/mathgenerator/funcs/geometry/surface_area_cuboid.py +++ b/mathgenerator/funcs/geometry/surface_area_cuboid.py @@ -1,15 +1,18 @@ from .__init__ import * -def surfaceAreaCuboid(maxSide=20, unit='m'): +def surfaceAreaCuboid(maxSide=20, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Surface area of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" + solution = f"{ans} {unit}^2" + return problem, solution + else: + return a, b, c, ans, unit surface_area_cuboid = Generator( diff --git a/mathgenerator/funcs/geometry/surface_area_cylinder.py b/mathgenerator/funcs/geometry/surface_area_cylinder.py index b0b06a9..4b04fba 100644 --- a/mathgenerator/funcs/geometry/surface_area_cylinder.py +++ b/mathgenerator/funcs/geometry/surface_area_cylinder.py @@ -1,14 +1,17 @@ from .__init__ import * -def surfaceAreaCylinder(maxRadius=20, maxHeight=50, unit='m'): +def surfaceAreaCylinder(maxRadius=20, maxHeight=50, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Surface area of cylinder with height = {a}{unit} and radius = {b}{unit} is" + solution = f"{ans} {unit}^2" + return problem, solution + else: + return a, b, ans, unit surface_area_cylinder = Generator( diff --git a/mathgenerator/funcs/geometry/surface_area_sphere.py b/mathgenerator/funcs/geometry/surface_area_sphere.py index f5dbd91..bc07beb 100644 --- a/mathgenerator/funcs/geometry/surface_area_sphere.py +++ b/mathgenerator/funcs/geometry/surface_area_sphere.py @@ -1,13 +1,16 @@ from .__init__ import * -def surfaceAreaSphere(maxSide=20, unit='m'): +def surfaceAreaSphere(maxSide=20, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Surface area of Sphere with radius = {r}{unit} is" + solution = f"{ans} {unit}^2" + return problem, solution + else: + return r, ans, unit surface_area_sphere = Generator( diff --git a/mathgenerator/funcs/geometry/third_angle_of_triangle.py b/mathgenerator/funcs/geometry/third_angle_of_triangle.py index d1e155c..8aa8f50 100644 --- a/mathgenerator/funcs/geometry/third_angle_of_triangle.py +++ b/mathgenerator/funcs/geometry/third_angle_of_triangle.py @@ -1,14 +1,16 @@ from .__init__ import * -def thirdAngleOfTriangleFunc(maxAngle=89): +def thirdAngleOfTriangleFunc(maxAngle=89, format='string'): 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 + if format == 'string': + problem = f"Third angle of triangle with angles {angle1} and {angle2} = " + return problem, angle3 + else: + return angle1, angle2, angle3 third_angle_of_triangle = Generator("Third Angle of Triangle", 22, diff --git a/mathgenerator/funcs/geometry/valid_triangle.py b/mathgenerator/funcs/geometry/valid_triangle.py index 74dab41..7aaa7eb 100644 --- a/mathgenerator/funcs/geometry/valid_triangle.py +++ b/mathgenerator/funcs/geometry/valid_triangle.py @@ -1,7 +1,7 @@ from .__init__ import * -def isTriangleValidFunc(maxSideLength=50): +def isTriangleValidFunc(maxSideLength=50, format='string'): sideA = random.randint(1, maxSideLength) sideB = random.randint(1, maxSideLength) sideC = random.randint(1, maxSideLength) @@ -11,13 +11,16 @@ def isTriangleValidFunc(maxSideLength=50): 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" + if format == 'string': + problem = f"Does triangle with sides {sideA}, {sideB} and {sideC} exist?" + if exists: + solution = "Yes" + else: + solution = "No" return problem, solution - solution = "No" - return problem, solution + else: + return sideA, sideB, sideC, exists valid_triangle = Generator("Triangle exists check", 19, diff --git a/mathgenerator/funcs/geometry/volume_cone.py b/mathgenerator/funcs/geometry/volume_cone.py index 4582680..fb8abfd 100644 --- a/mathgenerator/funcs/geometry/volume_cone.py +++ b/mathgenerator/funcs/geometry/volume_cone.py @@ -1,14 +1,17 @@ from .__init__ import * -def volumeCone(maxRadius=20, maxHeight=50, unit='m'): +def volumeCone(maxRadius=20, maxHeight=50, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Volume of cone with height = {a}{unit} and radius = {b}{unit} is" + solution = f"{ans} {unit}^3" + return problem, solution + else: + return a, b, ans, unit volume_cone = Generator( diff --git a/mathgenerator/funcs/geometry/volume_cube.py b/mathgenerator/funcs/geometry/volume_cube.py index b0aab00..eb5d62f 100644 --- a/mathgenerator/funcs/geometry/volume_cube.py +++ b/mathgenerator/funcs/geometry/volume_cube.py @@ -1,13 +1,16 @@ from .__init__ import * -def volumeCube(maxSide=20, unit='m'): +def volumeCube(maxSide=20, unit='m', format='string'): a = random.randint(1, maxSide) + ans = a ** 3 - problem = f"Volume of cube with side = {a}{unit} is" - ans = a * a * a - solution = f"{ans} {unit}^3" - return problem, solution + if format == 'string': + problem = f"Volume of cube with side = {a}{unit} is" + solution = f"{ans} {unit}^3" + return problem, solution + else: + return a, ans, unit volume_cube = Generator("Volum of Cube", 35, diff --git a/mathgenerator/funcs/geometry/volume_cuboid.py b/mathgenerator/funcs/geometry/volume_cuboid.py index 7125927..e3d47ef 100644 --- a/mathgenerator/funcs/geometry/volume_cuboid.py +++ b/mathgenerator/funcs/geometry/volume_cuboid.py @@ -1,15 +1,18 @@ from .__init__ import * -def volumeCuboid(maxSide=20, unit='m'): +def volumeCuboid(maxSide=20, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Volume of cuboid with sides = {a}{unit}, {b}{unit}, {c}{unit} is" + solution = f"{ans} {unit}^3" + return problem, solution + else: + return a, b, c, ans, unit volume_cuboid = Generator( diff --git a/mathgenerator/funcs/geometry/volume_cylinder.py b/mathgenerator/funcs/geometry/volume_cylinder.py index c58f05b..7bb7006 100644 --- a/mathgenerator/funcs/geometry/volume_cylinder.py +++ b/mathgenerator/funcs/geometry/volume_cylinder.py @@ -1,14 +1,17 @@ from .__init__ import * -def volumeCylinder(maxRadius=20, maxHeight=50, unit='m'): +def volumeCylinder(maxRadius=20, maxHeight=50, unit='m', format='string'): 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 + + if format == 'string': + problem = f"Volume of cylinder with height = {a}{unit} and radius = {b}{unit} is" + solution = f"{ans} {unit}^3" + return problem, solution + else: + return a, b, ans, unit volume_cylinder = Generator( diff --git a/mathgenerator/funcs/geometry/volume_sphere.py b/mathgenerator/funcs/geometry/volume_sphere.py index ea5700e..616b5a2 100644 --- a/mathgenerator/funcs/geometry/volume_sphere.py +++ b/mathgenerator/funcs/geometry/volume_sphere.py @@ -1,13 +1,16 @@ from .__init__ import * -def volumeSphereFunc(maxRadius=100): +def volumeSphereFunc(maxRadius=100, format='string'): r = random.randint(1, maxRadius) + ans = (4 * math.pi / 3) * r ** 3 - 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 + if format == 'string': + problem = f"Volume of sphere with radius {r} m = " + solution = f"{ans} m^3" + return problem, solution + else: + return r, ans volume_sphere = Generator("Volume of Sphere", 61, diff --git a/mathgenerator/funcs/misc/arithmetic_progression_sum.py b/mathgenerator/funcs/misc/arithmetic_progression_sum.py index 695f91a..218b979 100644 --- a/mathgenerator/funcs/misc/arithmetic_progression_sum.py +++ b/mathgenerator/funcs/misc/arithmetic_progression_sum.py @@ -1,18 +1,23 @@ from .__init__ import * -def arithmeticProgressionSumFunc(maxd=100, maxa=100, maxn=100): +def arithmeticProgressionSumFunc(maxd=100, maxa=100, maxn=100, format='string'): d = random.randint(-1 * maxd, maxd) a1 = random.randint(-1 * maxa, maxa) a2 = a1 + d a3 = a1 + 2 * d n = random.randint(4, maxn) apString = str(a1) + ', ' + str(a2) + ', ' + str(a3) + ' ... ' - problem = 'Find the sum of first ' + \ - str(n) + ' terms of the AP series: ' + apString an = a1 + (n - 1) * d solution = n * (a1 + an) / 2 - return problem, solution + + + if format == 'string': + problem = 'Find the sum of first ' + \ + str(n) + ' terms of the AP series: ' + apString + return problem, solution + else: + return n, apString, solution arithmetic_progression_sum = Generator( diff --git a/mathgenerator/funcs/misc/arithmetic_progression_term.py b/mathgenerator/funcs/misc/arithmetic_progression_term.py index 37e9570..68588e4 100644 --- a/mathgenerator/funcs/misc/arithmetic_progression_term.py +++ b/mathgenerator/funcs/misc/arithmetic_progression_term.py @@ -1,17 +1,21 @@ from .__init__ import * -def arithmeticProgressionTermFunc(maxd=100, maxa=100, maxn=100): +def arithmeticProgressionTermFunc(maxd=100, maxa=100, maxn=100, format='string'): d = random.randint(-1 * maxd, maxd) a1 = random.randint(-1 * maxa, maxa) a2 = a1 + d a3 = a2 + d n = random.randint(4, maxn) apString = str(a1) + ', ' + str(a2) + ', ' + str(a3) + ' ... ' - problem = 'Find the term number ' + str( - n) + ' of the AP series: ' + apString solution = a1 + ((n - 1) * d) - return problem, solution + + if format == 'string': + problem = 'Find the term number ' + str( + n) + ' of the AP series: ' + apString + return problem, solution + else: + return n, apString, solution arithmetic_progression_term = Generator( diff --git a/mathgenerator/funcs/misc/base_conversion.py b/mathgenerator/funcs/misc/base_conversion.py index b8f051a..82a3162 100644 --- a/mathgenerator/funcs/misc/base_conversion.py +++ b/mathgenerator/funcs/misc/base_conversion.py @@ -30,7 +30,7 @@ def fromBaseTenTo(n, toBase): # return int(n,fromBase) -def baseConversionFunc(maxNum=60000, maxBase=16): +def baseConversionFunc(maxNum=60000, maxBase=16, format='string'): assert type( maxNum ) == int and maxNum >= 100 and maxNum <= 65536, "maxNum({}) must be >=100 and <=65536".format( @@ -47,10 +47,13 @@ def baseConversionFunc(maxNum=60000, maxBase=16): while bases[0] == bases[1]: bases = random.choices(dist, k=2) - problem = "Convert {} from base {} to base {}.".format( - fromBaseTenTo(n, bases[0]), bases[0], bases[1]) - ans = fromBaseTenTo(n, bases[1]) - return problem, ans + if format == 'string': + problem = "Convert {} from base {} to base {}.".format( + fromBaseTenTo(n, bases[0]), bases[0], bases[1]) + ans = fromBaseTenTo(n, bases[1]) + return problem, ans + else: + return fromBaseTenTo(n, bases[0]), bases[0], bases[1], fromBaseTenTo(n, bases[1]) base_conversion = Generator("Base Conversion", 94, diff --git a/mathgenerator/funcs/misc/binomial_distribution.py b/mathgenerator/funcs/misc/binomial_distribution.py index d1ee33e..a9573e4 100644 --- a/mathgenerator/funcs/misc/binomial_distribution.py +++ b/mathgenerator/funcs/misc/binomial_distribution.py @@ -13,29 +13,28 @@ def newton_symbol(n, k): return factorial(n) / (factorial(k) * factorial(n - k)) -def binomialDistFunc(): - +def binomialDistFunc(format='string'): rejected_fraction = float(random.randint(30, 40)) + random.random() batch = random.randint(10, 20) rejections = random.randint(1, 9) answer = 0 - rejected_fraction = round(rejected_fraction, 2) - - problem = "A manufacturer of metal pistons finds that, on average, {0:}% "\ - "of the pistons they manufacture are rejected because " \ - "they are incorrectly sized. What is the probability that a "\ - "batch of {1:} pistons will contain no more than {2:} " \ - "rejected pistons?".format(rejected_fraction, batch, rejections) - for i in range(0, rejections + 1): answer += newton_symbol(float(batch), float(i)) * ((rejected_fraction / 100.) ** float(i)) * \ ((1 - (rejected_fraction / 100.)) ** (float(batch) - float(i))) answer = round(100 * answer, 2) - return problem, answer + if format == 'string': + problem = "A manufacturer of metal pistons finds that, on average, {0:}% "\ + "of the pistons they manufacture are rejected because " \ + "they are incorrectly sized. What is the probability that a "\ + "batch of {1:} pistons will contain no more than {2:} " \ + "rejected pistons?".format(rejected_fraction, batch, rejections) + return problem, answer + else: + return rejected_fraction, batch, rejections, answer binomial_distribution = Generator("Binomial distribution", 109, diff --git a/mathgenerator/funcs/misc/celsius_to_fahrenheit.py b/mathgenerator/funcs/misc/celsius_to_fahrenheit.py index a786885..2cb1260 100644 --- a/mathgenerator/funcs/misc/celsius_to_fahrenheit.py +++ b/mathgenerator/funcs/misc/celsius_to_fahrenheit.py @@ -1,13 +1,17 @@ from .__init__ import * -def celsiustofahrenheitFunc(maxTemp=100): +def celsiustofahrenheitFunc(maxTemp=100, format='string'): 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 + + if format == 'string': + problem = "Convert " + str( + celsius) + " degrees Celsius to degrees Fahrenheit =" + solution = str(fahrenheit) + return problem, solution + else: + return celsius, fahrenheit celsius_to_fahrenheit = Generator("Celsius To Fahrenheit", 81, diff --git a/mathgenerator/funcs/misc/common_factors.py b/mathgenerator/funcs/misc/common_factors.py index 9fca490..0d46fae 100644 --- a/mathgenerator/funcs/misc/common_factors.py +++ b/mathgenerator/funcs/misc/common_factors.py @@ -1,7 +1,7 @@ from .__init__ import * -def commonFactorsFunc(maxVal=100): +def commonFactorsFunc(maxVal=100, format='string'): a = x = random.randint(1, maxVal) b = y = random.randint(1, maxVal) @@ -19,9 +19,12 @@ def commonFactorsFunc(maxVal=100): count = count + 1 arr.append(i) - problem = f"Common Factors of {a} and {b} = " - solution = arr - return problem, solution + if format == 'string': + problem = f"Common Factors of {a} and {b} = " + solution = arr + return problem, solution + else: + return a, b, arr common_factors = Generator("Common Factors", 40, diff --git a/mathgenerator/funcs/misc/complex_to_polar.py b/mathgenerator/funcs/misc/complex_to_polar.py index c2a035e..77d8c8d 100644 --- a/mathgenerator/funcs/misc/complex_to_polar.py +++ b/mathgenerator/funcs/misc/complex_to_polar.py @@ -3,17 +3,19 @@ from .__init__ import * import math -def complexToPolarFunc(minRealImaginaryNum=-20, maxRealImaginaryNum=20): +def complexToPolarFunc(minRealImaginaryNum=-20, maxRealImaginaryNum=20, format='string'): num = complex(random.randint(minRealImaginaryNum, maxRealImaginaryNum), random.randint(minRealImaginaryNum, maxRealImaginaryNum)) a = num.real b = num.imag r = round(math.hypot(a, b), 2) theta = round(math.atan2(b, a), 2) - plr = str(r) + "exp(i" + str(theta) + ")" - problem = "rexp(itheta) = " - solution = plr - return problem, solution + + if format == 'string': + problem = f'{r}({a}theta + i{b}theta)' + return problem, theta + else: + return r, a, b, theta complex_to_polar = Generator("Complex To Polar Form", 92, complexToPolarFunc, diff --git a/mathgenerator/funcs/misc/decimal_to_roman_numerals.py b/mathgenerator/funcs/misc/decimal_to_roman_numerals.py index 711fdef..ade0866 100644 --- a/mathgenerator/funcs/misc/decimal_to_roman_numerals.py +++ b/mathgenerator/funcs/misc/decimal_to_roman_numerals.py @@ -3,9 +3,8 @@ from .__init__ import * import math -def decimalToRomanNumeralsFunc(maxDecimal=4000): +def decimalToRomanNumeralsFunc(maxDecimal=4000, format='string'): x = random.randint(0, maxDecimal) - problem = "The number " + str(x) + " in Roman Numerals is: " roman_dict = { 1: "I", 5: "V", @@ -32,7 +31,12 @@ def decimalToRomanNumeralsFunc(maxDecimal=4000): solution += (roman_dict[divisor] + roman_dict[divisor * 10]) x = math.floor(x % divisor) divisor /= 10 - return problem, solution + + if format == 'string': + problem = "The number " + str(x) + " in Roman Numerals is: " + return problem, solution + else: + return x, solution decimal_to_roman_numerals = Generator("Converts decimal to Roman Numerals", 85, diff --git a/mathgenerator/funcs/misc/euclidian_norm.py b/mathgenerator/funcs/misc/euclidian_norm.py index b68d386..ef1ad25 100644 --- a/mathgenerator/funcs/misc/euclidian_norm.py +++ b/mathgenerator/funcs/misc/euclidian_norm.py @@ -3,13 +3,17 @@ from .__init__ import * import math -def euclidianNormFunc(maxEltAmt=20): +def euclidianNormFunc(maxEltAmt=20, format='string'): vec = [ random.uniform(0, 1000) for i in range(random.randint(2, maxEltAmt)) ] - problem = f"Euclidian norm or L2 norm of the vector{vec} is:" solution = math.sqrt(sum([i**2 for i in vec])) - return problem, solution + + if format == 'string': + problem = f"Euclidian norm or L2 norm of the vector{vec} is:" + return problem, solution + else: + return vec, solution eucldian_norm = Generator( diff --git a/mathgenerator/funcs/misc/gcd.py b/mathgenerator/funcs/misc/gcd.py index 70af2f9..edcc584 100644 --- a/mathgenerator/funcs/misc/gcd.py +++ b/mathgenerator/funcs/misc/gcd.py @@ -1,15 +1,19 @@ from .__init__ import * -def gcdFunc(maxVal=20): +def gcdFunc(maxVal=20, format='string'): 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 + + if format == 'string': + problem = f"GCD of {a} and {b} = " + solution = str(x) + return problem, solution + else: + return a, b, x gcd = Generator("GCD (Greatest Common Denominator)", 10, gcdFunc, diff --git a/mathgenerator/funcs/misc/geometric_mean.py b/mathgenerator/funcs/misc/geometric_mean.py index 9e9838a..0f0b333 100644 --- a/mathgenerator/funcs/misc/geometric_mean.py +++ b/mathgenerator/funcs/misc/geometric_mean.py @@ -1,7 +1,7 @@ from .__init__ import * -def geometricMeanFunc(maxValue=100, maxNum=4): +def geometricMeanFunc(maxValue=100, maxNum=4, format='string'): a = random.randint(1, maxValue) b = random.randint(1, maxValue) c = random.randint(1, maxValue) diff --git a/mathgenerator/funcs/misc/geometric_progression.py b/mathgenerator/funcs/misc/geometric_progression.py index abceb01..e538d34 100644 --- a/mathgenerator/funcs/misc/geometric_progression.py +++ b/mathgenerator/funcs/misc/geometric_progression.py @@ -5,7 +5,8 @@ def geomProgrFunc(number_values=6, min_value=2, max_value=12, n_term=7, - sum_term=5): + sum_term=5, + format='string'): r = random.randint(min_value, max_value) a = random.randint(min_value, max_value) n_term = random.randint(number_values, number_values + 5) @@ -13,14 +14,19 @@ def geomProgrFunc(number_values=6, 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 + + if format == 'string': + 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" + 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 + else: + return GP, n_term, sum_term, a, r, n_term, value_nth_term, sum_term, sum_till_nth_term + geometric_progression = Generator( diff --git a/mathgenerator/funcs/misc/harmonic_mean.py b/mathgenerator/funcs/misc/harmonic_mean.py index 70c71ee..fd36ebe 100644 --- a/mathgenerator/funcs/misc/harmonic_mean.py +++ b/mathgenerator/funcs/misc/harmonic_mean.py @@ -1,7 +1,7 @@ from .__init__ import * -def harmonicMeanFunc(maxValue=100, maxNum=4): +def harmonicMeanFunc(maxValue=100, maxNum=4, format='string'): a = random.randint(1, maxValue) b = random.randint(1, maxValue) diff --git a/mathgenerator/funcs/misc/hcf.py b/mathgenerator/funcs/misc/hcf.py index 60a9364..ee4ee01 100644 --- a/mathgenerator/funcs/misc/hcf.py +++ b/mathgenerator/funcs/misc/hcf.py @@ -1,15 +1,19 @@ from .__init__ import * -def hcfFunc(maxVal=20): +def hcfFunc(maxVal=20, format='string'): 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 + + if format == 'string': + problem = f"HCF of {a} and {b} = " + solution = str(x) + return problem, solution + else: + return a, b, x hcf = Generator("HCF (Highest Common Factor)", 51, hcfFunc, diff --git a/mathgenerator/funcs/misc/is_leap_year.py b/mathgenerator/funcs/misc/is_leap_year.py index 0d2f9c7..75d9c36 100644 --- a/mathgenerator/funcs/misc/is_leap_year.py +++ b/mathgenerator/funcs/misc/is_leap_year.py @@ -1,22 +1,28 @@ from .__init__ import * -def IsLeapYear(minNumber=1900, maxNumber=2099): +def IsLeapYear(minNumber=1900, maxNumber=2099, format='string'): year = random.randint(minNumber, maxNumber) problem = "Year " + str(year) + " " - solution = "" if (year % 4) == 0: if (year % 100) == 0: if (year % 400) == 0: - solution = "is a leap year" + ans = True else: - solution = "is not a leap year" + ans = False else: - solution = "is a leap year" + ans = True else: - solution = "is not a leap year" + ans = False - return problem, solution + if format == 'string': + if ans: + solution = "is a leap year" + else: + solution = "is not a leap year" + return problem, solution + else: + return year, ans is_leap_year = Generator("Leap Year or Not", 101, diff --git a/mathgenerator/funcs/misc/lcm.py b/mathgenerator/funcs/misc/lcm.py index 662a69c..1266f44 100644 --- a/mathgenerator/funcs/misc/lcm.py +++ b/mathgenerator/funcs/misc/lcm.py @@ -1,7 +1,7 @@ from .__init__ import * -def lcmFunc(maxVal=20): +def lcmFunc(maxVal=20, format='string'): a = random.randint(1, maxVal) b = random.randint(1, maxVal) c = a * b @@ -11,10 +11,12 @@ def lcmFunc(maxVal=20): x, y = y, x % y d = c // x - problem = f"LCM of {a} and {b} =" - solution = str(d) - - return problem, solution + if format == 'string': + problem = f"LCM of {a} and {b} =" + solution = str(d) + return problem, solution + else: + return a, b, d lcm = Generator("LCM (Least Common Multiple)", 9, diff --git a/mathgenerator/funcs/misc/minutes_to_hours.py b/mathgenerator/funcs/misc/minutes_to_hours.py index d3df2e1..f0a02e1 100644 --- a/mathgenerator/funcs/misc/minutes_to_hours.py +++ b/mathgenerator/funcs/misc/minutes_to_hours.py @@ -1,13 +1,17 @@ from .__init__ import * -def minutesToHoursFunc(maxMinutes=999): +def minutesToHoursFunc(maxMinutes=999, format='string'): minutes = random.randint(1, maxMinutes) - hours1 = int(minutes / 60) - hours2 = minutes % 60 - problem = f"Convert {minutes} minutes to Hours & Minutes" - solution = f"{hours1} hours and {hours2} minutes" - return problem, solution + ansHours = int(minutes / 60) + ansMinutes = minutes % 60 + + if format == 'string': + problem = f"Convert {minutes} minutes to Hours & Minutes" + solution = f"{ansHours} hours and {ansMinutes} minutes" + return problem, solution + else: + return minutes, ansHours, ansMinutes minutes_to_hours = Generator("Minute to Hour conversion", 102, diff --git a/mathgenerator/funcs/misc/prime_factors.py b/mathgenerator/funcs/misc/prime_factors.py index b7534c1..971cdc5 100644 --- a/mathgenerator/funcs/misc/prime_factors.py +++ b/mathgenerator/funcs/misc/prime_factors.py @@ -1,7 +1,7 @@ from .__init__ import * -def primeFactorsFunc(minVal=1, maxVal=200): +def primeFactorsFunc(minVal=1, maxVal=200, format='string'): a = random.randint(minVal, maxVal) n = a i = 2 @@ -17,9 +17,12 @@ 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 + if format == 'string': + problem = f"Find prime factors of {a}" + solution = f"{factors}" + return problem, solution + else: + return a, factors prime_factors = Generator("Prime Factorisation", 27,primeFactorsFunc, diff --git a/mathgenerator/funcs/misc/profit_loss_percent.py b/mathgenerator/funcs/misc/profit_loss_percent.py index e29b113..c586fd4 100644 --- a/mathgenerator/funcs/misc/profit_loss_percent.py +++ b/mathgenerator/funcs/misc/profit_loss_percent.py @@ -1,7 +1,7 @@ from .__init__ import * -def profitLossPercentFunc(maxCP=1000, maxSP=1000): +def profitLossPercentFunc(maxCP=1000, maxSP=1000, format='string'): cP = random.randint(1, maxCP) sP = random.randint(1, maxSP) diff = abs(sP - cP) @@ -10,10 +10,12 @@ def profitLossPercentFunc(maxCP=1000, maxSP=1000): else: profitOrLoss = "Loss" percent = diff / cP * 100 - problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " - solution = percent - return problem, solution + if format == 'string': + problem = f"{profitOrLoss} percent when CP = {cP} and SP = {sP} is: " + return problem, str(percent) + else: + return profitOrLoss, cP, sP, percent profit_loss_percent = Generator( diff --git a/mathgenerator/funcs/misc/quotient_of_power_same_base.py b/mathgenerator/funcs/misc/quotient_of_power_same_base.py index 94f1e95..3863bfc 100644 --- a/mathgenerator/funcs/misc/quotient_of_power_same_base.py +++ b/mathgenerator/funcs/misc/quotient_of_power_same_base.py @@ -1,19 +1,19 @@ from .__init__ import * -def quotientOfPowerSameBaseFunc(maxBase=50, maxPower=10): +def quotientOfPowerSameBaseFunc(maxBase=50, maxPower=10, format='string'): base = random.randint(1, maxBase) power1 = random.randint(1, maxPower) power2 = random.randint(1, maxPower) step = power1 - power2 + solution = base**step - problem = "The Quotient of {base}^{power1} and {base}^{power2} = " \ - "{base}^({power1}-{power2}) = {base}^{step}".format(base=base, - power1=power1, - power2=power2, - step=step) - solution = str(base**step) - return problem, solution + if format == 'string': + problem = f"The Quotient of {base}^{power1} and {base}^{power2} = " \ + f"{base}^({power1}-{power2}) = {base}^{step}" + return problem, str(solution) + else: + return base, power1, power2, step, solution quotient_of_power_same_base = Generator("Quotient of Powers with Same Base", diff --git a/mathgenerator/funcs/misc/quotient_of_power_same_power.py b/mathgenerator/funcs/misc/quotient_of_power_same_power.py index 5e0f226..5f6ec15 100644 --- a/mathgenerator/funcs/misc/quotient_of_power_same_power.py +++ b/mathgenerator/funcs/misc/quotient_of_power_same_power.py @@ -1,19 +1,19 @@ from .__init__ import * -def quotientOfPowerSamePowerFunc(maxBase=50, maxPower=10): +def quotientOfPowerSamePowerFunc(maxBase=50, maxPower=10, format='string'): base1 = random.randint(1, maxBase) base2 = random.randint(1, maxBase) power = random.randint(1, maxPower) step = base1 / base2 + solution = step**power - problem = "The Quotient of {base1}^{power} and {base2}^{power} = " \ - "({base1}/{base2})^{power} = {step}^{power}".format(base1=base1, - base2=base2, - power=power, - step=step) - solution = str(step**power) - return problem, solution + if format == 'string': + problem = f"The Quotient of {base1}^{power} and {base2}^{power} = " \ + f"({base1}/{base2})^{power} = {step}^{power}" + return problem, str(solution) + else: + return base1, base2, power, step, solution quotient_of_power_same_power = Generator("Quotient of Powers with Same Power", diff --git a/mathgenerator/funcs/misc/set_operation.py b/mathgenerator/funcs/misc/set_operation.py index 56a335c..e79253f 100644 --- a/mathgenerator/funcs/misc/set_operation.py +++ b/mathgenerator/funcs/misc/set_operation.py @@ -1,7 +1,7 @@ from .__init__ import * -def set_operation(minval=3, maxval=7, n_a=4, n_b=5): +def set_operation(minval=3, maxval=7, n_a=4, n_b=5, format='string'): number_variables_a = random.randint(minval, maxval) number_variables_b = random.randint(minval, maxval) a = [] diff --git a/mathgenerator/funcs/misc/signum_function.py b/mathgenerator/funcs/misc/signum_function.py index bfcf222..b8214b5 100644 --- a/mathgenerator/funcs/misc/signum_function.py +++ b/mathgenerator/funcs/misc/signum_function.py @@ -2,16 +2,20 @@ from .__init__ import * import random -def signumFunc(min=-999, max=999): +def signumFunc(min=-999, max=999, format='string'): a = random.randint(min, max) b = 0 if (a > 0): b = 1 if (a < 0): b = -1 - problem = "signum of " + str(a) + " is " + "=" - solution = str(b) - return problem, solution + + if format == 'string': + problem = "signum of " + str(a) + " is " + "=" + solution = str(b) + return problem, solution + else: + return a, b signum_function = Generator("signum function", 106, signumFunc, diff --git a/mathgenerator/funcs/misc/surds_comparison.py b/mathgenerator/funcs/misc/surds_comparison.py index f914d03..858e7c5 100644 --- a/mathgenerator/funcs/misc/surds_comparison.py +++ b/mathgenerator/funcs/misc/surds_comparison.py @@ -3,11 +3,9 @@ from .__init__ import * import math -def surdsComparisonFunc(maxValue=100, maxRoot=10): +def surdsComparisonFunc(maxValue=100, maxRoot=10, format='string'): 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) @@ -16,7 +14,12 @@ def surdsComparisonFunc(maxValue=100, maxRoot=10): solution = ">" elif first < second: solution = "<" - return problem, solution + + if format == 'string': + problem = f"Fill in the blanks {radicand1}^(1/{degree1}) _ {radicand2}^(1/{degree2})" + return problem, solution + else: + return radicand1, degree1, radicand2, degree2, solution surds_comparison = Generator("Comparing surds", 55, surdsComparisonFunc, diff --git a/mathgenerator/funcs/statistics/combinations.py b/mathgenerator/funcs/statistics/combinations.py index 1498dd5..faf1f3e 100644 --- a/mathgenerator/funcs/statistics/combinations.py +++ b/mathgenerator/funcs/statistics/combinations.py @@ -1,7 +1,7 @@ from .__init__ import * -def combinationsFunc(maxlength=20): +def combinationsFunc(maxlength=20, format='string'): def factorial(a): d = 1 for i in range(a): @@ -13,10 +13,12 @@ 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) - return problem, solution + if format == 'string': + problem = f"Number of combinations from {a} objects picked {b} at a time " + return problem, str(solution) + else: + return a, b, solution combinations = Generator( diff --git a/mathgenerator/funcs/statistics/conditional_probability.py b/mathgenerator/funcs/statistics/conditional_probability.py index f53f628..1dc9778 100644 --- a/mathgenerator/funcs/statistics/conditional_probability.py +++ b/mathgenerator/funcs/statistics/conditional_probability.py @@ -1,7 +1,7 @@ from .__init__ import * -def conditionalProbFunc(): +def conditionalProbFunc(format='string'): P_disease = round(2. * random.random(), 2) true_positive = round(random.random() + float(random.randint(90, 99)), 2) true_negative = round(random.random() + float(random.randint(90, 99)), 2) @@ -15,14 +15,17 @@ def conditionalProbFunc(): return P_disease_plus - problem = "Someone tested positive for a nasty disease which only {0:.2f}% of population have. " \ + answer = round(BayesFormula(P_disease, true_positive, true_negative), 2) + + if format == 'string': + problem = "Someone tested positive for a nasty disease which only {0:.2f}% of population have. " \ "Test sensitivity (true positive) is equal to SN= {1:.2f}% whereas test specificity (true negative) SP= {2:.2f}%. " \ "What is the probability that this guy really has that disease?".format( P_disease, true_positive, true_negative) - answer = str( - round(BayesFormula(P_disease, true_positive, true_negative), 2)) + "%" - - return problem, answer + solution = str(answer) + "%" + return problem, solution + else: + return P_disease, true_positive, true_negative, answer conditional_probability = Generator("Conditional Probability", diff --git a/mathgenerator/funcs/statistics/confidence_interval.py b/mathgenerator/funcs/statistics/confidence_interval.py index 32a667d..3f5198d 100644 --- a/mathgenerator/funcs/statistics/confidence_interval.py +++ b/mathgenerator/funcs/statistics/confidence_interval.py @@ -3,7 +3,7 @@ from .__init__ import * import math -def confidenceIntervalFunc(): +def confidenceIntervalFunc(format='string'): n = random.randint(20, 40) j = random.randint(0, 3) @@ -26,11 +26,16 @@ def confidenceIntervalFunc(): sd = sd / n standard_error = lst_t[j] * math.sqrt(sd / n) + upper = mean + standard_error + lower = 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 + if format == 'string': + problem = 'The confidence interval for sample {} with {}% confidence is'.format( + [x for x in lst], lst_per[j]) + solution = f'({upper}, {lower})' + return problem, solution + else: + return [x for x in lst], lst_per[j], upper, lower confidence_interval = Generator("Confidence interval For sample S", 54, diff --git a/mathgenerator/funcs/statistics/data_summary.py b/mathgenerator/funcs/statistics/data_summary.py index 28b96e6..2aaaa7c 100644 --- a/mathgenerator/funcs/statistics/data_summary.py +++ b/mathgenerator/funcs/statistics/data_summary.py @@ -1,7 +1,7 @@ from .__init__ import * -def dataSummaryFunc(number_values=15, minval=5, maxval=50): +def dataSummaryFunc(number_values=15, minval=5, maxval=50, format='string'): random_list = [] for i in range(number_values): @@ -18,11 +18,13 @@ def dataSummaryFunc(number_values=15, minval=5, maxval=50): standardDeviation = var / number_values variance = (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, standardDeviation, variance) - return problem, solution + if format == 'string': + problem = "Find the mean,standard deviation and variance for the data" + \ + str(random_list) + solution = f"The Mean is {mean} , Standard Deviation is {standardDeviation}, Variance is {variance}" + return problem, solution + else: + return random_list, mean, standardDeviation, variance data_summary = Generator("Mean,Standard Deviation,Variance", 59, dataSummaryFunc, diff --git a/mathgenerator/funcs/statistics/dice_sum_probability.py b/mathgenerator/funcs/statistics/dice_sum_probability.py index e22c3f1..98382bb 100644 --- a/mathgenerator/funcs/statistics/dice_sum_probability.py +++ b/mathgenerator/funcs/statistics/dice_sum_probability.py @@ -1,7 +1,7 @@ from .__init__ import * -def DiceSumProbFunc(maxDice=3): +def DiceSumProbFunc(maxDice=3, format='string'): a = random.randint(1, maxDice) b = random.randint(a, 6 * a) @@ -20,10 +20,12 @@ def DiceSumProbFunc(maxDice=3): 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 + if format == 'string': + problem = f"If {a} dice are rolled at the same time, the probability of getting a sum of {b} =" + solution = f"{count}/{6**a}" + return problem, solution + else: + return a, b, count, 6**a dice_sum_probability = Generator( diff --git a/mathgenerator/funcs/statistics/mean_median.py b/mathgenerator/funcs/statistics/mean_median.py index c1f0760..2b60716 100644 --- a/mathgenerator/funcs/statistics/mean_median.py +++ b/mathgenerator/funcs/statistics/mean_median.py @@ -2,17 +2,21 @@ from .__init__ import * import random -def meanMedianFunc(maxlen=10): +def meanMedianFunc(maxlen=10, format='string'): 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 + + if format == 'string': + problem = f"Given the series of numbers {randomlist}. find the arithmatic mean and mdian of the series" + solution = f"Arithmetic mean of the series is {mean} and Arithmetic median of this series is {median}" + return problem, solution + else: + return randomlist, mean, median mean_median = Generator("Mean and Median", 76, meanMedianFunc, diff --git a/mathgenerator/funcs/statistics/permutation.py b/mathgenerator/funcs/statistics/permutation.py index 287b2a3..b097775 100644 --- a/mathgenerator/funcs/statistics/permutation.py +++ b/mathgenerator/funcs/statistics/permutation.py @@ -3,14 +3,17 @@ from .__init__ import * import math -def permutationFunc(maxlength=20): +def permutationFunc(maxlength=20, format='string'): a = random.randint(10, maxlength) b = random.randint(0, 9) + answer = int(math.factorial(a) / (math.factorial(a - b))) - 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 + if format == 'string': + problem = f"Number of Permutations from {a} objects picked {b} at a time = " + solution = str(answer) + return problem, solution + else: + return a, b, answer permutation = Generator(