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
and | | 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) | Multiplyand | | -65 | -37 | -9 | 34 |
| 88 | 26 | 18 | -2 |
| -55 | -38 | -6 | 41 |
| -53 | -44 | -4 | 53 |
| 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(