math-exercises 3.0.214 → 3.0.215

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/lib/exercises/math/arithmetic/findLeftInHugeNumberDivision.d.ts +9 -0
  2. package/lib/exercises/math/arithmetic/findLeftInHugeNumberDivision.d.ts.map +1 -0
  3. package/lib/exercises/math/arithmetic/findLeftInHugeNumberDivision.js +194 -0
  4. package/lib/exercises/math/arithmetic/findMissingNumberToMakeNumberDivisibleBy9.d.ts +8 -0
  5. package/lib/exercises/math/arithmetic/findMissingNumberToMakeNumberDivisibleBy9.d.ts.map +1 -0
  6. package/lib/exercises/math/arithmetic/findMissingNumberToMakeNumberDivisibleBy9.js +121 -0
  7. package/lib/exercises/math/arithmetic/index.d.ts +7 -0
  8. package/lib/exercises/math/arithmetic/index.d.ts.map +1 -1
  9. package/lib/exercises/math/arithmetic/index.js +7 -0
  10. package/lib/exercises/math/arithmetic/isBigNumberPrime.d.ts +7 -0
  11. package/lib/exercises/math/arithmetic/isBigNumberPrime.d.ts.map +1 -0
  12. package/lib/exercises/math/arithmetic/isBigNumberPrime.js +107 -0
  13. package/lib/exercises/math/arithmetic/numberOfEndingZerosOfBigProduct.d.ts +8 -0
  14. package/lib/exercises/math/arithmetic/numberOfEndingZerosOfBigProduct.d.ts.map +1 -0
  15. package/lib/exercises/math/arithmetic/numberOfEndingZerosOfBigProduct.js +139 -0
  16. package/lib/exercises/math/arithmetic/pgcdFromEuclid.d.ts +8 -0
  17. package/lib/exercises/math/arithmetic/pgcdFromEuclid.d.ts.map +1 -0
  18. package/lib/exercises/math/arithmetic/pgcdFromEuclid.js +123 -0
  19. package/lib/exercises/math/arithmetic/solveDiophantianEquationByUsingPrimality.d.ts +7 -0
  20. package/lib/exercises/math/arithmetic/solveDiophantianEquationByUsingPrimality.d.ts.map +1 -0
  21. package/lib/exercises/math/arithmetic/solveDiophantianEquationByUsingPrimality.js +117 -0
  22. package/lib/exercises/math/arithmetic/whichDayInXDays.d.ts +8 -0
  23. package/lib/exercises/math/arithmetic/whichDayInXDays.d.ts.map +1 -0
  24. package/lib/exercises/math/arithmetic/whichDayInXDays.js +81 -0
  25. package/lib/exercises/math/calcul/fractions/fractionsSumFillInTheBlank.d.ts +15 -0
  26. package/lib/exercises/math/calcul/fractions/fractionsSumFillInTheBlank.d.ts.map +1 -0
  27. package/lib/exercises/math/calcul/fractions/fractionsSumFillInTheBlank.js +256 -0
  28. package/lib/exercises/math/calcul/fractions/index.d.ts +1 -0
  29. package/lib/exercises/math/calcul/fractions/index.d.ts.map +1 -1
  30. package/lib/exercises/math/calcul/fractions/index.js +1 -0
  31. package/lib/exercises/math/calcul/index.d.ts +1 -0
  32. package/lib/exercises/math/calcul/index.d.ts.map +1 -1
  33. package/lib/exercises/math/calcul/index.js +1 -0
  34. package/lib/exercises/math/calcul/mentalCaluls/index.d.ts +3 -0
  35. package/lib/exercises/math/calcul/mentalCaluls/index.d.ts.map +1 -1
  36. package/lib/exercises/math/calcul/mentalCaluls/index.js +3 -0
  37. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplication101AndFriends.d.ts +10 -0
  38. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplication101AndFriends.d.ts.map +1 -0
  39. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplication101AndFriends.js +264 -0
  40. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplication11AndFriends.d.ts +10 -0
  41. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplication11AndFriends.d.ts.map +1 -0
  42. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplication11AndFriends.js +264 -0
  43. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplicationTable.d.ts +11 -0
  44. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplicationTable.d.ts.map +1 -0
  45. package/lib/exercises/math/calcul/mentalCaluls/mentalMultiplicationTable.js +141 -0
  46. package/lib/exercises/math/calcul/ratio/index.d.ts +1 -0
  47. package/lib/exercises/math/calcul/ratio/index.d.ts.map +1 -1
  48. package/lib/exercises/math/calcul/ratio/index.js +1 -0
  49. package/lib/exercises/math/calcul/ratio/partsUsingRatio.d.ts +13 -0
  50. package/lib/exercises/math/calcul/ratio/partsUsingRatio.d.ts.map +1 -0
  51. package/lib/exercises/math/calcul/ratio/partsUsingRatio.js +237 -0
  52. package/lib/exercises/math/calcul/relatives/index.d.ts +2 -0
  53. package/lib/exercises/math/calcul/relatives/index.d.ts.map +1 -0
  54. package/lib/exercises/math/calcul/relatives/index.js +1 -0
  55. package/lib/exercises/math/calcul/relatives/relativesAddAndSub.d.ts +17 -0
  56. package/lib/exercises/math/calcul/relatives/relativesAddAndSub.d.ts.map +1 -0
  57. package/lib/exercises/math/calcul/relatives/relativesAddAndSub.js +448 -0
  58. package/lib/exercises/math/calculLitteral/factorisation/factoByXK.d.ts +10 -0
  59. package/lib/exercises/math/calculLitteral/factorisation/factoByXK.d.ts.map +1 -0
  60. package/lib/exercises/math/calculLitteral/factorisation/factoByXK.js +190 -0
  61. package/lib/exercises/math/calculLitteral/factorisation/index.d.ts +1 -0
  62. package/lib/exercises/math/calculLitteral/factorisation/index.d.ts.map +1 -1
  63. package/lib/exercises/math/calculLitteral/factorisation/index.js +1 -0
  64. package/lib/exercises/math/complex/algebraic/addComplex.d.ts +10 -0
  65. package/lib/exercises/math/complex/algebraic/addComplex.d.ts.map +1 -0
  66. package/lib/exercises/math/complex/algebraic/addComplex.js +125 -0
  67. package/lib/exercises/math/complex/algebraic/conjugateComplex.d.ts +8 -0
  68. package/lib/exercises/math/complex/algebraic/conjugateComplex.d.ts.map +1 -0
  69. package/lib/exercises/math/complex/algebraic/conjugateComplex.js +105 -0
  70. package/lib/exercises/math/complex/algebraic/conjugateDivideComplex.d.ts +8 -0
  71. package/lib/exercises/math/complex/algebraic/conjugateDivideComplex.d.ts.map +1 -0
  72. package/lib/exercises/math/complex/algebraic/conjugateDivideComplex.js +137 -0
  73. package/lib/exercises/math/complex/algebraic/conjugateMultiplyComplex.d.ts +8 -0
  74. package/lib/exercises/math/complex/algebraic/conjugateMultiplyComplex.d.ts.map +1 -0
  75. package/lib/exercises/math/complex/algebraic/conjugateMultiplyComplex.js +116 -0
  76. package/lib/exercises/math/complex/algebraic/divideComplex.d.ts +8 -0
  77. package/lib/exercises/math/complex/algebraic/divideComplex.d.ts.map +1 -0
  78. package/lib/exercises/math/complex/algebraic/divideComplex.js +128 -0
  79. package/lib/exercises/math/complex/algebraic/index.d.ts +11 -0
  80. package/lib/exercises/math/complex/algebraic/index.d.ts.map +1 -0
  81. package/lib/exercises/math/complex/algebraic/index.js +10 -0
  82. package/lib/exercises/math/complex/algebraic/inverseComplex.d.ts +8 -0
  83. package/lib/exercises/math/complex/algebraic/inverseComplex.d.ts.map +1 -0
  84. package/lib/exercises/math/complex/algebraic/inverseComplex.js +95 -0
  85. package/lib/exercises/math/complex/algebraic/linearCombinaisonComplex.d.ts +10 -0
  86. package/lib/exercises/math/complex/algebraic/linearCombinaisonComplex.d.ts.map +1 -0
  87. package/lib/exercises/math/complex/algebraic/linearCombinaisonComplex.js +105 -0
  88. package/lib/exercises/math/complex/algebraic/moduloFromAlgebraicComplex.d.ts +8 -0
  89. package/lib/exercises/math/complex/algebraic/moduloFromAlgebraicComplex.d.ts.map +1 -0
  90. package/lib/exercises/math/complex/algebraic/moduloFromAlgebraicComplex.js +93 -0
  91. package/lib/exercises/math/complex/algebraic/mutiplyComplex.d.ts +8 -0
  92. package/lib/exercises/math/complex/algebraic/mutiplyComplex.d.ts.map +1 -0
  93. package/lib/exercises/math/complex/algebraic/mutiplyComplex.js +106 -0
  94. package/lib/exercises/math/complex/algebraic/reAndIm.d.ts +9 -0
  95. package/lib/exercises/math/complex/algebraic/reAndIm.d.ts.map +1 -0
  96. package/lib/exercises/math/complex/algebraic/reAndIm.js +92 -0
  97. package/lib/exercises/math/complex/geometric/complexAlgebraicFromModuloAndArg.d.ts +9 -0
  98. package/lib/exercises/math/complex/geometric/complexAlgebraicFromModuloAndArg.d.ts.map +1 -0
  99. package/lib/exercises/math/complex/geometric/complexAlgebraicFromModuloAndArg.js +151 -0
  100. package/lib/exercises/math/complex/geometric/complexDistance.d.ts +11 -0
  101. package/lib/exercises/math/complex/geometric/complexDistance.d.ts.map +1 -0
  102. package/lib/exercises/math/complex/geometric/complexDistance.js +125 -0
  103. package/lib/exercises/math/complex/geometric/complexGeomAffixAlgFromPoint.d.ts +9 -0
  104. package/lib/exercises/math/complex/geometric/complexGeomAffixAlgFromPoint.d.ts.map +1 -0
  105. package/lib/exercises/math/complex/geometric/complexGeomAffixAlgFromPoint.js +326 -0
  106. package/lib/exercises/math/complex/geometric/complexGeomAffixExpFromCenteredRegularPolygon.d.ts +10 -0
  107. package/lib/exercises/math/complex/geometric/complexGeomAffixExpFromCenteredRegularPolygon.d.ts.map +1 -0
  108. package/lib/exercises/math/complex/geometric/complexGeomAffixExpFromCenteredRegularPolygon.js +459 -0
  109. package/lib/exercises/math/complex/geometric/complexGeomAffixExpFromPoint.d.ts +14 -0
  110. package/lib/exercises/math/complex/geometric/complexGeomAffixExpFromPoint.d.ts.map +1 -0
  111. package/lib/exercises/math/complex/geometric/complexGeomAffixExpFromPoint.js +539 -0
  112. package/lib/exercises/math/complex/geometric/complexGeomAffixTrigFromPoint.d.ts +13 -0
  113. package/lib/exercises/math/complex/geometric/complexGeomAffixTrigFromPoint.d.ts.map +1 -0
  114. package/lib/exercises/math/complex/geometric/complexGeomAffixTrigFromPoint.js +485 -0
  115. package/lib/exercises/math/complex/geometric/complexGeomApproxOfCosArgOrSinArgFromPointAndAffixTrig.d.ts +12 -0
  116. package/lib/exercises/math/complex/geometric/complexGeomApproxOfCosArgOrSinArgFromPointAndAffixTrig.d.ts.map +1 -0
  117. package/lib/exercises/math/complex/geometric/complexGeomApproxOfCosArgOrSinArgFromPointAndAffixTrig.js +224 -0
  118. package/lib/exercises/math/complex/geometric/complexGeomArgumentOfFracCBABFromFigure.d.ts +11 -0
  119. package/lib/exercises/math/complex/geometric/complexGeomArgumentOfFracCBABFromFigure.d.ts.map +1 -0
  120. package/lib/exercises/math/complex/geometric/complexGeomArgumentOfFracCBABFromFigure.js +448 -0
  121. package/lib/exercises/math/complex/geometric/complexGeomFindPointFromAffixExp.d.ts +11 -0
  122. package/lib/exercises/math/complex/geometric/complexGeomFindPointFromAffixExp.d.ts.map +1 -0
  123. package/lib/exercises/math/complex/geometric/complexGeomFindPointFromAffixExp.js +223 -0
  124. package/lib/exercises/math/complex/geometric/complexGeomFindPointFromPowerOfUnitRootFromFigure.d.ts +11 -0
  125. package/lib/exercises/math/complex/geometric/complexGeomFindPointFromPowerOfUnitRootFromFigure.d.ts.map +1 -0
  126. package/lib/exercises/math/complex/geometric/complexGeomFindPointFromPowerOfUnitRootFromFigure.js +348 -0
  127. package/lib/exercises/math/complex/geometric/complexGeomPlaceAffixPoint.d.ts +8 -0
  128. package/lib/exercises/math/complex/geometric/complexGeomPlaceAffixPoint.d.ts.map +1 -0
  129. package/lib/exercises/math/complex/geometric/complexGeomPlaceAffixPoint.js +86 -0
  130. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZAPlusZ.d.ts +11 -0
  131. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZAPlusZ.d.ts.map +1 -0
  132. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZAPlusZ.js +311 -0
  133. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZATimesZ.d.ts +11 -0
  134. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZATimesZ.d.ts.map +1 -0
  135. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZATimesZ.js +345 -0
  136. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZATransformed.d.ts +16 -0
  137. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZATransformed.d.ts.map +1 -0
  138. package/lib/exercises/math/complex/geometric/complexGeomPlacePointFromZATransformed.js +729 -0
  139. package/lib/exercises/math/complex/geometric/complexGeomPlacePointWithAffixInU.d.ts +11 -0
  140. package/lib/exercises/math/complex/geometric/complexGeomPlacePointWithAffixInU.d.ts.map +1 -0
  141. package/lib/exercises/math/complex/geometric/complexGeomPlacePointWithAffixInU.js +253 -0
  142. package/lib/exercises/math/complex/geometric/index.d.ts +12 -0
  143. package/lib/exercises/math/complex/geometric/index.d.ts.map +1 -0
  144. package/lib/exercises/math/complex/geometric/index.js +19 -0
  145. package/lib/exercises/math/complex/index.d.ts +4 -10
  146. package/lib/exercises/math/complex/index.d.ts.map +1 -1
  147. package/lib/exercises/math/complex/index.js +4 -11
  148. package/lib/exercises/math/complex/polynomials/factorizePolynomialInC.d.ts +10 -0
  149. package/lib/exercises/math/complex/polynomials/factorizePolynomialInC.d.ts.map +1 -0
  150. package/lib/exercises/math/complex/polynomials/factorizePolynomialInC.js +176 -0
  151. package/lib/exercises/math/complex/polynomials/index.d.ts +4 -0
  152. package/lib/exercises/math/complex/polynomials/index.d.ts.map +1 -0
  153. package/lib/exercises/math/complex/polynomials/index.js +3 -0
  154. package/lib/exercises/math/complex/polynomials/solveSecondDegreeInComplex.d.ts +10 -0
  155. package/lib/exercises/math/complex/polynomials/solveSecondDegreeInComplex.d.ts.map +1 -0
  156. package/lib/exercises/math/complex/polynomials/solveSecondDegreeInComplex.js +190 -0
  157. package/lib/exercises/math/complex/polynomials/solveZSquareEqualsA.d.ts +11 -0
  158. package/lib/exercises/math/complex/polynomials/solveZSquareEqualsA.d.ts.map +1 -0
  159. package/lib/exercises/math/complex/polynomials/solveZSquareEqualsA.js +158 -0
  160. package/lib/exercises/math/complex/unitRoots/giveNUnitRoot.d.ts +7 -0
  161. package/lib/exercises/math/complex/unitRoots/giveNUnitRoot.d.ts.map +1 -0
  162. package/lib/exercises/math/complex/unitRoots/giveNUnitRoot.js +122 -0
  163. package/lib/exercises/math/complex/unitRoots/giveOneSolutionToComplexPowNEqualsOne.d.ts +8 -0
  164. package/lib/exercises/math/complex/unitRoots/giveOneSolutionToComplexPowNEqualsOne.d.ts.map +1 -0
  165. package/lib/exercises/math/complex/unitRoots/giveOneSolutionToComplexPowNEqualsOne.js +138 -0
  166. package/lib/exercises/math/complex/unitRoots/index.d.ts +3 -0
  167. package/lib/exercises/math/complex/unitRoots/index.d.ts.map +1 -0
  168. package/lib/exercises/math/complex/unitRoots/index.js +2 -0
  169. package/lib/exercises/math/conversion/clock/clockReading.d.ts +12 -0
  170. package/lib/exercises/math/conversion/clock/clockReading.d.ts.map +1 -0
  171. package/lib/exercises/math/conversion/clock/clockReading.js +385 -0
  172. package/lib/exercises/math/conversion/clock/clockReadingPlusTimeOperation.d.ts +2 -0
  173. package/lib/exercises/math/conversion/clock/clockReadingPlusTimeOperation.d.ts.map +1 -0
  174. package/lib/exercises/math/conversion/clock/clockReadingPlusTimeOperation.js +521 -0
  175. package/lib/exercises/math/conversion/clock/clockWritingByManipulatingNeedles.d.ts +2 -0
  176. package/lib/exercises/math/conversion/clock/clockWritingByManipulatingNeedles.d.ts.map +1 -0
  177. package/lib/exercises/math/conversion/clock/clockWritingByManipulatingNeedles.js +359 -0
  178. package/lib/exercises/math/conversion/clock/dateTimeOperationAdd.d.ts +16 -0
  179. package/lib/exercises/math/conversion/clock/dateTimeOperationAdd.d.ts.map +1 -0
  180. package/lib/exercises/math/conversion/clock/dateTimeOperationAdd.js +319 -0
  181. package/lib/exercises/math/conversion/clock/index.d.ts +3 -0
  182. package/lib/exercises/math/conversion/clock/index.d.ts.map +1 -0
  183. package/lib/exercises/math/conversion/clock/index.js +4 -0
  184. package/lib/exercises/math/conversion/index.d.ts +1 -0
  185. package/lib/exercises/math/conversion/index.d.ts.map +1 -1
  186. package/lib/exercises/math/conversion/index.js +1 -0
  187. package/lib/exercises/math/geometry/angles/angleNatureFromFigure.d.ts +11 -0
  188. package/lib/exercises/math/geometry/angles/angleNatureFromFigure.d.ts.map +1 -0
  189. package/lib/exercises/math/geometry/angles/angleNatureFromFigure.js +233 -0
  190. package/lib/exercises/math/geometry/angles/angleNatureFromMeasure.d.ts +10 -0
  191. package/lib/exercises/math/geometry/angles/angleNatureFromMeasure.d.ts.map +1 -0
  192. package/lib/exercises/math/geometry/angles/angleNatureFromMeasure.js +137 -0
  193. package/lib/exercises/math/geometry/angles/index.d.ts +2 -0
  194. package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -1
  195. package/lib/exercises/math/geometry/angles/index.js +2 -0
  196. package/lib/exercises/math/geometry/circles/buildCircleFromRadius.d.ts +9 -0
  197. package/lib/exercises/math/geometry/circles/buildCircleFromRadius.d.ts.map +1 -0
  198. package/lib/exercises/math/geometry/circles/buildCircleFromRadius.js +187 -0
  199. package/lib/exercises/math/geometry/circles/index.d.ts +1 -0
  200. package/lib/exercises/math/geometry/circles/index.d.ts.map +1 -1
  201. package/lib/exercises/math/geometry/circles/index.js +1 -0
  202. package/lib/exercises/math/geometry/lines/buildParallelFromLineAndPoint.d.ts +11 -0
  203. package/lib/exercises/math/geometry/lines/buildParallelFromLineAndPoint.d.ts.map +1 -0
  204. package/lib/exercises/math/geometry/lines/buildParallelFromLineAndPoint.js +154 -0
  205. package/lib/exercises/math/geometry/lines/buildPerpendicularFromLineAndPoint.d.ts +11 -0
  206. package/lib/exercises/math/geometry/lines/buildPerpendicularFromLineAndPoint.d.ts.map +1 -0
  207. package/lib/exercises/math/geometry/lines/buildPerpendicularFromLineAndPoint.js +157 -0
  208. package/lib/exercises/math/geometry/lines/index.d.ts +2 -0
  209. package/lib/exercises/math/geometry/lines/index.d.ts.map +1 -1
  210. package/lib/exercises/math/geometry/lines/index.js +2 -0
  211. package/lib/exercises/math/geometry/triangles/index.d.ts +2 -0
  212. package/lib/exercises/math/geometry/triangles/index.d.ts.map +1 -1
  213. package/lib/exercises/math/geometry/triangles/index.js +2 -1
  214. package/lib/exercises/math/geometry/triangles/traceHeightInTriangle.d.ts +13 -0
  215. package/lib/exercises/math/geometry/triangles/traceHeightInTriangle.d.ts.map +1 -0
  216. package/lib/exercises/math/geometry/triangles/traceHeightInTriangle.js +271 -0
  217. package/lib/exercises/math/geometry/triangles/traceMedianInTriangle.d.ts +8 -0
  218. package/lib/exercises/math/geometry/triangles/traceMedianInTriangle.d.ts.map +1 -1
  219. package/lib/exercises/math/geometry/triangles/traceMedianInTriangle.js +284 -53
  220. package/lib/exercises/math/geometry/vectors/constructions/index.d.ts +1 -0
  221. package/lib/exercises/math/geometry/vectors/constructions/index.d.ts.map +1 -1
  222. package/lib/exercises/math/geometry/vectors/constructions/index.js +1 -0
  223. package/lib/exercises/math/geometry/vectors/constructions/traceVectorSumFromVecs.d.ts +8 -0
  224. package/lib/exercises/math/geometry/vectors/constructions/traceVectorSumFromVecs.d.ts.map +1 -0
  225. package/lib/exercises/math/geometry/vectors/constructions/traceVectorSumFromVecs.js +165 -0
  226. package/lib/exercises/math/geometry/volumes/index.d.ts +1 -0
  227. package/lib/exercises/math/geometry/volumes/index.d.ts.map +1 -1
  228. package/lib/exercises/math/geometry/volumes/index.js +1 -0
  229. package/lib/exercises/math/geometry/volumes/volumeOfCylinder.d.ts +8 -0
  230. package/lib/exercises/math/geometry/volumes/volumeOfCylinder.d.ts.map +1 -0
  231. package/lib/exercises/math/geometry/volumes/volumeOfCylinder.js +157 -0
  232. package/lib/exercises/math/spaceGeometry/basis/index.d.ts +1 -0
  233. package/lib/exercises/math/spaceGeometry/basis/index.d.ts.map +1 -1
  234. package/lib/exercises/math/spaceGeometry/basis/index.js +1 -0
  235. package/lib/exercises/math/spaceGeometry/basis/spaceSegmentLengthInRectangularPrism.d.ts +18 -0
  236. package/lib/exercises/math/spaceGeometry/basis/spaceSegmentLengthInRectangularPrism.d.ts.map +1 -0
  237. package/lib/exercises/math/spaceGeometry/basis/spaceSegmentLengthInRectangularPrism.js +538 -0
  238. package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.d.ts.map +1 -1
  239. package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.js +6 -5
  240. package/lib/exercises/math/trigonometry/triangle/trigonometrySohcahtoaCalcul.js +1 -1
  241. package/lib/exercises/utils/geogebra/toolBarConstructor.d.ts +1 -0
  242. package/lib/exercises/utils/geogebra/toolBarConstructor.d.ts.map +1 -1
  243. package/lib/exercises/utils/geogebra/toolBarConstructor.js +2 -0
  244. package/lib/geogebra/parsers/geogebraParser.d.ts +3 -0
  245. package/lib/geogebra/parsers/geogebraParser.d.ts.map +1 -1
  246. package/lib/geogebra/parsers/geogebraParser.js +27 -0
  247. package/lib/index.d.ts +213 -23
  248. package/lib/index.d.ts.map +1 -1
  249. package/lib/latexTester.js +2 -0
  250. package/lib/math/geometry/angle.d.ts.map +1 -1
  251. package/lib/math/geometry/angle.js +3 -0
  252. package/lib/math/geometry/segment.d.ts +1 -1
  253. package/lib/math/geometry/segment.d.ts.map +1 -1
  254. package/lib/math/geometry/segment.js +5 -2
  255. package/lib/math/utils/geometry/angleBetweenPoints.d.ts +4 -0
  256. package/lib/math/utils/geometry/angleBetweenPoints.d.ts.map +1 -0
  257. package/lib/math/utils/geometry/angleBetweenPoints.js +58 -0
  258. package/lib/math/utils/geometry/angleNWSE.d.ts +3 -0
  259. package/lib/math/utils/geometry/angleNWSE.d.ts.map +1 -0
  260. package/lib/math/utils/geometry/angleNWSE.js +56 -0
  261. package/lib/tests/singleExo.test.d.ts.map +1 -1
  262. package/lib/tests/singleExo.test.js +2 -2
  263. package/lib/utils/strings/frenchDays.d.ts +2 -0
  264. package/lib/utils/strings/frenchDays.d.ts.map +1 -0
  265. package/lib/utils/strings/frenchDays.js +9 -0
  266. package/package.json +1 -1
@@ -0,0 +1,539 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, GeneratorOptionTarget, GeneratorOptionType, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { defaultArrayedOptsWhereNeeded } from "../../../../exercises/utils/options/arrayedOptions.js";
4
+ import { blueMain, colorWithOpacity, orange } from "../../../../geogebra/colors.js";
5
+ import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
6
+ import { Point } from "../../../../math/geometry/point.js";
7
+ import { Vector } from "../../../../math/geometry/vector.js";
8
+ import { randint } from "../../../../math/utils/random/randint.js";
9
+ import { round } from "../../../../math/utils/round.js";
10
+ import { abs } from "../../../../tree/nodes/functions/absNode.js";
11
+ import { exp, isExpNode } from "../../../../tree/nodes/functions/expNode.js";
12
+ import { isOppositeNode } from "../../../../tree/nodes/functions/oppositeNode.js";
13
+ import { sqrt } from "../../../../tree/nodes/functions/sqrtNode.js";
14
+ import { NodeConstructor, } from "../../../../tree/nodes/nodeConstructor.js";
15
+ import { isNumberNode } from "../../../../tree/nodes/numbers/numberNode.js";
16
+ import { PiNode } from "../../../../tree/nodes/numbers/piNode.js";
17
+ import { add } from "../../../../tree/nodes/operators/addNode.js";
18
+ import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
19
+ import { isMultiplyNode, multiply, } from "../../../../tree/nodes/operators/multiplyNode.js";
20
+ import { substract } from "../../../../tree/nodes/operators/substractNode.js";
21
+ import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
22
+ import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
23
+ import { NodeComparator } from "../../../../tree/utilities/nodeComparator.js";
24
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
25
+ import { probaFlip } from "../../../../utils/alea/probaFlip.js";
26
+ import { random } from "../../../../utils/alea/random.js";
27
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
28
+ //TODO: frac does not simplify "i"
29
+ // const nodeI = new ComplexNode((0).toTree(), (1).toTree());
30
+ const nodeI = new VariableNode("i");
31
+ const _degreesToRadians = (angleInDegrees, precision) => {
32
+ const oneOver180 = 0.00555555555555555;
33
+ return round(multiply(multiply(angleInDegrees, PiNode), oneOver180).evaluate(), precision);
34
+ };
35
+ const rotateVector = (vec, angle, name) => {
36
+ //x' = cos(t)*x -sin(t)*y
37
+ //y' = sin(t)*x + cos(t)*y
38
+ const cos = Math.cos(angle);
39
+ const sin = Math.sin(angle);
40
+ return new Vector(name, substract(multiply(cos, vec.x), multiply(sin, vec.y)).evaluate().toTree(), add(multiply(sin, vec.x), multiply(cos, vec.y)).evaluate().toTree());
41
+ };
42
+ const rotatePoint = (target, angle, center, name, precision = 2) => {
43
+ const vSrc = createVector(center, target, "vSrc", precision);
44
+ const vRotated = rotateVector(vSrc, angle, "vRotated");
45
+ return createPoint(add(center.x, vRotated.x).evaluate(), add(center.y, vRotated.y).evaluate(), name, precision);
46
+ };
47
+ const createVector = (from, to, name, precision = 5) => {
48
+ return new Vector(name, round(substract(to.x, from.x).evaluate(), precision).toTree(), round(substract(to.y, from.y).evaluate(), precision).toTree());
49
+ };
50
+ const createPoint = (x, y, name, precision = 5) => {
51
+ return new Point(name, round(x, precision), round(y, precision));
52
+ };
53
+ const getHydrated = (identifiers) => {
54
+ const { nodeIdsModule, nodeIdsArgument, nodeIdsAngleBase } = identifiers;
55
+ const [nodeModule, nodeArgument, nodeAngleBase] = [
56
+ nodeIdsModule,
57
+ nodeIdsArgument,
58
+ nodeIdsAngleBase,
59
+ ].map((nodeIds) => NodeConstructor.fromIdentifiers(nodeIds));
60
+ const vFactor = frac(nodeArgument, nodeAngleBase)
61
+ .simplify({ towardsDistribute: false })
62
+ .evaluate();
63
+ const nodeAffix = multiply(nodeModule, exp(multiply(nodeI, nodeArgument)));
64
+ const nodeAffixSimplified = multiply(nodeModule, exp(multiply(nodeI, nodeArgument.simplify({ towardsDistribute: true }))));
65
+ return {
66
+ nodeAngleBase,
67
+ nodeModule,
68
+ nodeArgument,
69
+ vFactor,
70
+ nodeAffix,
71
+ nodeAffixSimplified,
72
+ };
73
+ };
74
+ const getInstruction = (_identifiers) => {
75
+ return `Donner l'affixe du point $M$, sous forme exponentielle.`;
76
+ };
77
+ const getAnswerNode = (identifiers) => {
78
+ const { nodeAffixSimplified } = getHydrated(identifiers);
79
+ return nodeAffixSimplified;
80
+ };
81
+ const getAnswer = (identifiers) => {
82
+ return getAnswerNode(identifiers).toTex();
83
+ };
84
+ const getHint = () => {
85
+ return `Soit $z$ l'affixe du point $M$.
86
+ L'écriture sous forme exponentielle de $z$ est :
87
+
88
+ $$
89
+ m \\ e^{i \\alpha}
90
+ $$
91
+
92
+ avec $m$ le module de $z$ et $\\alpha$ un argument de $z$.
93
+
94
+ Le module de $z$ est la distance du point $M$ à l'origine $O$.
95
+ L'argument principal de $z$ est l'angle orienté $(\\overrightarrow{OM}, \\overrightarrow{u})$, avec $\\overrightarrow{u}$ le vecteur unitaire de l'axe des réels.
96
+ `;
97
+ };
98
+ const getCorrection = (identifiers) => {
99
+ const { nodeModule, nodeArgument, nodeAngleBase, nodeAffixSimplified } = getHydrated(identifiers);
100
+ const nodeArgumentSimplified = nodeArgument.simplify({
101
+ towardsDistribute: false,
102
+ });
103
+ const [texArgument, texArgumentSimplified] = [
104
+ nodeArgument,
105
+ nodeArgumentSimplified,
106
+ ].map((node) => node.toTex());
107
+ return `Le point $M$ appartient au cercle centré sur l'origine et de rayon $${nodeModule.toTex()}$.
108
+ Son module est donc $${nodeModule.toTex()}$.
109
+ On lit son argument principal en comptant les graduations d'angle.
110
+ La graduation pour les angles est $${nodeAngleBase.toTex()}$.
111
+ L'argument principal est $${texArgument} ${texArgumentSimplified !== texArgument ? `= ${texArgumentSimplified}` : ""}$.
112
+
113
+ L'affixe du point $M$ est donc $${nodeAffixSimplified.toTex()}$.`;
114
+ };
115
+ const _getCorrectionGGBOptions = (identifiers) => {
116
+ const { nodeAngleBase, nodeArgument, nodeModule } = getHydrated(identifiers);
117
+ const nbRays = frac(multiply(2, PiNode), nodeAngleBase)
118
+ .simplify({ towardsDistribute: false })
119
+ .evaluate();
120
+ const arrNodeAngle = [...Array(nbRays).keys()].map((i) => multiply(i, nodeAngleBase));
121
+ const pointO = new Point("O", 0, 0);
122
+ const pointA = new Point("A", 1, 0);
123
+ const precision = 5;
124
+ const arrPointForAngle = arrNodeAngle.map((nodeAngle, i) => rotatePoint(pointA, nodeAngle.evaluate(), pointO, `PA${i}`, precision));
125
+ const strLineColor = `"${colorWithOpacity("#000000", 26)}"`;
126
+ const pointAM = new Point("AM", nodeModule, 0);
127
+ const pointM = rotatePoint(pointAM, nodeArgument.evaluate(), pointO, "M", precision);
128
+ const ggb = new GeogebraConstructor({
129
+ isGridSimple: true,
130
+ commands: [
131
+ //circles
132
+ ...[...Array(4).keys()]
133
+ .map((i) => i + 1)
134
+ .flatMap((v, i) => [
135
+ `c${i} = Circle((0,0), ${v})`,
136
+ // `SetColor(c${i}, ${strLineColor})`,
137
+ `SetLineThickness(c${i}, 1)`,
138
+ ]),
139
+ //rays
140
+ ...arrPointForAngle.flatMap((point, i) => [
141
+ `ray${i} = Ray(${pointO.toMathString()}, ${point.toMathString()})`,
142
+ `SetColor(ray${i}, ${strLineColor})`,
143
+ `SetLineThickness(ray${i}, 1)`,
144
+ ]),
145
+ //pointM
146
+ ...[
147
+ `M = ${pointM.toMathString()}`,
148
+ `SetFixed(M, true, false)`,
149
+ `ShowLabel(M, true)`,
150
+ ],
151
+ //angle
152
+ ...[
153
+ `rayM = Ray(${pointO.toMathString()}, ${arrPointForAngle[1].toMathString()})`,
154
+ `SetVisibleInView(rayM, 1, false)`,
155
+ `ang = Angle(ray0, rayM)`,
156
+ `SetCaption(ang, "$\\\\ \\\\ \\ \\ ${nodeAngleBase.toTex()}$")`,
157
+ `ShowLabel(ang, true)`,
158
+ ],
159
+ //pointO
160
+ ...[
161
+ `O = ${pointO.toMathString()}`,
162
+ `SetFixed(O, true, false)`,
163
+ `ShowLabel(O, true)`,
164
+ ],
165
+ //vecU
166
+ ...[
167
+ `vecU = Vector(${pointO.toMathString()}, ${pointA.toMathString()})`,
168
+ `SetCaption(vecU, "$\\overrightarrow{u}$")`,
169
+ `ShowLabel(vecU, true)`,
170
+ `SetColor(vecU, "${blueMain}")`,
171
+ ],
172
+ //argument
173
+ ...(() => {
174
+ const isClockwise = nodeArgument.evaluate() > 0;
175
+ return [
176
+ `rayOAM = Ray(${pointO.toMathString()}, ${pointAM.toMathString()})`,
177
+ `rayOM = Ray(${pointO.toMathString()}, ${pointM.toMathString()})`,
178
+ `SetVisibleInView(rayOAM, 1, false)`,
179
+ `SetVisibleInView(rayOM, 1, false)`,
180
+ `angArg = ${isClockwise ? "Angle(rayOAM, rayOM)" : "Angle(rayOM, rayOAM)"}`,
181
+ `ShowLabel(angArg, false)`,
182
+ `SetDecoration(angArg, ${isClockwise ? 6 : 7})`,
183
+ `SetColor(angArg, "${orange}")`,
184
+ ];
185
+ })(),
186
+ ],
187
+ fontSize: 16,
188
+ });
189
+ return ggb.getOptions({
190
+ coords: [-4.1, 4.1, -4.1, 4.1],
191
+ });
192
+ };
193
+ const getGGBOptions = (identifiers, optsIn) => {
194
+ const opts = optsIn ?? optsDefault;
195
+ const { nodeAngleBase, nodeArgument, nodeModule } = getHydrated(identifiers);
196
+ const nbRays = frac(multiply(2, PiNode), nodeAngleBase)
197
+ .simplify({ towardsDistribute: false })
198
+ .evaluate();
199
+ const arrNodeAngle = [...Array(nbRays).keys()].map((i) => multiply(i, nodeAngleBase));
200
+ const pointO = new Point("O", 0, 0);
201
+ const pointA = new Point("A", 1, 0);
202
+ const precision = 5;
203
+ const arrPointForAngle = arrNodeAngle.map((nodeAngle, i) => rotatePoint(pointA, nodeAngle.evaluate(), pointO, `PA${i}`, precision));
204
+ const strLineColor = `"${colorWithOpacity("#000000", 26)}"`;
205
+ const pointAM = new Point("AM", nodeModule, 0);
206
+ const pointM = rotatePoint(pointAM, nodeArgument.evaluate(), pointO, "M", precision);
207
+ const ggb = new GeogebraConstructor({
208
+ isGridSimple: true,
209
+ commands: [
210
+ //circles
211
+ ...[...Array(4).keys()]
212
+ .map((i) => i + 1)
213
+ .flatMap((v, i) => [
214
+ `c${i} = Circle((0,0), ${v})`,
215
+ // `SetColor(c${i}, ${strLineColor})`,
216
+ `SetLineThickness(c${i}, 1)`,
217
+ ]),
218
+ //rays
219
+ ...arrPointForAngle.flatMap((point, i) => [
220
+ `ray${i} = Ray(${pointO.toMathString()}, ${point.toMathString()})`,
221
+ `SetColor(ray${i}, ${strLineColor})`,
222
+ `SetLineThickness(ray${i}, 1)`,
223
+ ]),
224
+ //pointM
225
+ ...[
226
+ `M = ${pointM.toMathString()}`,
227
+ `SetFixed(M, true, false)`,
228
+ `ShowLabel(M, true)`,
229
+ ],
230
+ //angle
231
+ ...(opts.isShouldDisplayAngleBase
232
+ ? [
233
+ `rayM = Ray(${pointO.toMathString()}, ${arrPointForAngle[1].toMathString()})`,
234
+ `SetVisibleInView(rayM, 1, false)`,
235
+ `ang = Angle(ray0, rayM)`,
236
+ `SetCaption(ang, "$\\\\ \\\\ \\ \\ ${nodeAngleBase.toTex()}$")`,
237
+ `ShowLabel(ang, true)`,
238
+ ]
239
+ : []),
240
+ ],
241
+ fontSize: 16,
242
+ });
243
+ return ggb.getOptions({
244
+ coords: [-4.1, 4.1, -4.1, 4.1],
245
+ });
246
+ };
247
+ const getPropositions = (n, { answer, ...identifiers }, optsIn) => {
248
+ const arrayedOpts = defaultArrayedOptsWhereNeeded(optsIn, arrayedOptsDefault);
249
+ const propositions = [];
250
+ addValidProp(propositions, answer);
251
+ const { nodeModule: nodeModulePure, nodeArgument, nodeAngleBase, vFactor, } = getHydrated(identifiers);
252
+ function createNodeAffixSimplified(nodeModule, nodeArgument) {
253
+ const nodeAffixSimplified = multiply(nodeModule, exp(multiply(nodeI, nodeArgument.simplify({ towardsDistribute: true }))));
254
+ return nodeAffixSimplified;
255
+ }
256
+ const isTerrorWrtModule = probaFlip(0.39);
257
+ const nodeModule = (() => {
258
+ if (isTerrorWrtModule) {
259
+ const vModulePure = nodeModulePure.evaluate();
260
+ const poolVModuleWrong = [2, 3, 4].filter((v) => v !== vModulePure);
261
+ const vModuleWrong = random(poolVModuleWrong);
262
+ return vModuleWrong.toTree();
263
+ }
264
+ else {
265
+ return nodeModulePure;
266
+ }
267
+ })();
268
+ //student: reprocesses read module: module becomes sqrt(2),sqrt(3),sqrt(5)
269
+ {
270
+ const [{ nodeModuleWrong }] = [sqrt(2), sqrt(3), sqrt(5)]
271
+ .map((nodeModuleWrong) => {
272
+ const nodeDistance = abs(substract(nodeModuleWrong, nodeModule));
273
+ return {
274
+ nodeModuleWrong,
275
+ nodeDistance,
276
+ };
277
+ })
278
+ .toSorted(({ nodeDistance: nodeDistance1 }, { nodeDistance: nodeDistance2 }) => NodeComparator.compareViaSub(nodeDistance1, nodeDistance2));
279
+ const nodeAffixSimplified = createNodeAffixSimplified(nodeModuleWrong, nodeArgument);
280
+ tryToAddWrongProp(propositions, nodeAffixSimplified.toTex());
281
+ }
282
+ //student: forgets i
283
+ {
284
+ const nodeAffixSimplified = multiply(nodeModule, exp(nodeArgument.simplify({ towardsDistribute: true })));
285
+ tryToAddWrongProp(propositions, nodeAffixSimplified.toTex());
286
+ }
287
+ //student: forgets Pi
288
+ {
289
+ const nodeAffixSimplified = multiply(nodeModule, exp(multiply(nodeI, frac(nodeArgument, PiNode).simplify({ towardsDistribute: true }))));
290
+ tryToAddWrongProp(propositions, nodeAffixSimplified.toTex());
291
+ }
292
+ //student: reads wrong angle: offset
293
+ if (Math.abs(vFactor) > 3) {
294
+ const nodeArgumentWrong = add(nodeArgument, multiply(coinFlip() ? +1 : -1, nodeAngleBase)).simplify({ towardsDistribute: false });
295
+ const nodeAffixSimplified = createNodeAffixSimplified(nodeModule, nodeArgumentWrong);
296
+ tryToAddWrongProp(propositions, nodeAffixSimplified.toTex());
297
+ }
298
+ //student: wrong sign
299
+ {
300
+ const nodeAffixSimplified = multiply(nodeModule, exp(multiply(nodeI, multiply(-1, nodeArgument).simplify({ towardsDistribute: true }))));
301
+ tryToAddWrongProp(propositions, nodeAffixSimplified.toTex());
302
+ }
303
+ //student: mistake wrt base angle
304
+ {
305
+ function createNodeAngleBase(texAngleBase) {
306
+ switch (texAngleBase) {
307
+ case `$${frac(PiNode, 18).toTex()}$`: {
308
+ return frac(PiNode, 18);
309
+ }
310
+ case `$${frac(PiNode, 9).toTex()}$`: {
311
+ return frac(PiNode, 9);
312
+ }
313
+ case `$${frac(PiNode, 6).toTex()}$`: {
314
+ const nodeAngleBase = frac(PiNode, 6);
315
+ return nodeAngleBase;
316
+ }
317
+ case `$${frac(multiply(2, PiNode), 9).toTex()}$`: {
318
+ return frac(multiply(2, PiNode), 9);
319
+ }
320
+ case `$${frac(PiNode, 3).toTex()}$`: {
321
+ return frac(PiNode, 3);
322
+ }
323
+ default:
324
+ throw new Error("Unsupported opts.texAngleBase: " + texAngleBase);
325
+ }
326
+ }
327
+ arrayedOpts.texAngleBase
328
+ .map(createNodeAngleBase)
329
+ .map((nodeAngleBaseWrong) => {
330
+ const nodeArgumentWrong = multiply(vFactor, nodeAngleBaseWrong);
331
+ const nodeAffixSimplified = multiply(nodeModule, exp(multiply(nodeI, nodeArgumentWrong.simplify({ towardsDistribute: true }))));
332
+ tryToAddWrongProp(propositions, nodeAffixSimplified.toTex());
333
+ });
334
+ }
335
+ return shuffleProps(propositions, n);
336
+ };
337
+ const getKeys = () => {
338
+ return ["epower", "i", "pi"];
339
+ };
340
+ const isAnswerValid = (ans, { answer, ...identifiers }) => {
341
+ try {
342
+ const nodeAns = parseAlgebraic(ans);
343
+ const [nodeModuleAns, nodeArgumentAns] = (() => {
344
+ if (isMultiplyNode(nodeAns)) {
345
+ if (isExpNode(nodeAns.leftChild)) {
346
+ if (isNumberNode(nodeAns.rightChild) ||
347
+ isOppositeNode(nodeAns.rightChild)) {
348
+ const nodeModule = nodeAns.rightChild;
349
+ const nodeExp = nodeAns.leftChild;
350
+ const nodeArgument = frac(nodeExp.child, nodeI).simplify({
351
+ towardsDistribute: false,
352
+ });
353
+ return [nodeModule, nodeArgument];
354
+ }
355
+ else {
356
+ return [undefined, nodeAns.leftChild];
357
+ }
358
+ }
359
+ else if (isExpNode(nodeAns.rightChild)) {
360
+ if (isNumberNode(nodeAns.leftChild) ||
361
+ isOppositeNode(nodeAns.leftChild)) {
362
+ const nodeModule = nodeAns.leftChild;
363
+ const nodeExp = nodeAns.rightChild;
364
+ const nodeArgument = frac(nodeExp.child, nodeI).simplify({
365
+ towardsDistribute: false,
366
+ });
367
+ return [nodeModule, nodeArgument];
368
+ }
369
+ else {
370
+ return [undefined, nodeAns.leftChild];
371
+ }
372
+ }
373
+ else {
374
+ return [undefined, nodeAns.leftChild];
375
+ }
376
+ }
377
+ else if (isExpNode(nodeAns)) {
378
+ const nodeExp = nodeAns;
379
+ const nodeArgument = frac(nodeExp.child, nodeI).simplify({
380
+ towardsDistribute: false,
381
+ });
382
+ const nodeModule = (1).toTree();
383
+ return [nodeModule, nodeArgument];
384
+ }
385
+ else {
386
+ return [undefined, undefined];
387
+ }
388
+ })();
389
+ if (nodeModuleAns === undefined || nodeArgumentAns === undefined) {
390
+ return false;
391
+ }
392
+ const { nodeModule: nodeModuleAnswer, nodeArgument: nodeArgumentAnswer } = getHydrated(identifiers);
393
+ const isModuleValid = (nodeModule) => {
394
+ return (NodeComparator.isEqualViaSub(nodeModule, nodeModuleAnswer) ||
395
+ NodeComparator.isEqualViaFrac(nodeModule, nodeModuleAnswer));
396
+ };
397
+ const isArgumentValid = (nodeArgument) => {
398
+ const nodeSub = substract(nodeArgument, nodeArgumentAnswer).simplify({
399
+ towardsDistribute: false,
400
+ });
401
+ const nodeFrac = frac(nodeSub, PiNode).simplify({
402
+ towardsDistribute: false,
403
+ });
404
+ const vFrac = nodeFrac.evaluate();
405
+ return vFrac % 2 === 0;
406
+ };
407
+ const isValid = (nodeModule, nodeArgument) => {
408
+ return isModuleValid(nodeModule) && isArgumentValid(nodeArgument);
409
+ };
410
+ return isValid(nodeModuleAns, nodeArgumentAns);
411
+ //uncomment if you want to allow: m.exp(ia) === (-m).exp(i(a+Pi))
412
+ // ||isValid(
413
+ // multiply(-1, nodeModuleAns).simplify(),
414
+ // add(PiNode, nodeArgumentAns),
415
+ // )
416
+ }
417
+ catch (err) {
418
+ return handleVEAError(err);
419
+ }
420
+ };
421
+ // const createRandomIdentifiers = (opts: Options) => {};
422
+ const getComplexGeomAffixExpFromPointQuestion = (optsIn) => {
423
+ const arrayedOpts = defaultArrayedOptsWhereNeeded(optsIn, arrayedOptsDefault);
424
+ const opts = {
425
+ ...(optsIn ?? optsDefault),
426
+ texAngleBase: random(arrayedOpts.texAngleBase),
427
+ };
428
+ const [nodeAngleBase, nodeArgumentM] = (() => {
429
+ switch (opts.texAngleBase) {
430
+ case `$${frac(PiNode, 18).toTex()}$`: {
431
+ const nodeAngleBase = frac(PiNode, 18);
432
+ const vFactor = (coinFlip() ? +1 : -1) * randint(1, 18);
433
+ const nodeAngleM = multiply(vFactor, nodeAngleBase).simplify({
434
+ towardsDistribute: false,
435
+ });
436
+ return [nodeAngleBase, nodeAngleM];
437
+ }
438
+ case `$${frac(PiNode, 9).toTex()}$`: {
439
+ const nodeAngleBase = frac(PiNode, 9);
440
+ const vFactor = (coinFlip() ? +1 : -1) * randint(1, 9);
441
+ const nodeAngleM = multiply(vFactor, nodeAngleBase).simplify({
442
+ towardsDistribute: false,
443
+ });
444
+ return [nodeAngleBase, nodeAngleM];
445
+ }
446
+ case `$${frac(PiNode, 6).toTex()}$`: {
447
+ const nodeAngleBase = frac(PiNode, 6);
448
+ const vFactor = (coinFlip() ? +1 : -1) * randint(1, 6);
449
+ const nodeAngleM = multiply(vFactor, nodeAngleBase).simplify({
450
+ towardsDistribute: false,
451
+ });
452
+ return [nodeAngleBase, nodeAngleM];
453
+ }
454
+ case `$${frac(multiply(2, PiNode), 9).toTex()}$`: {
455
+ const nodeAngleBase = frac(multiply(2, PiNode), 9);
456
+ const vFactor = (coinFlip() ? +1 : -1) * randint(1, 5);
457
+ const nodeAngleM = multiply(vFactor, nodeAngleBase).simplify({
458
+ towardsDistribute: false,
459
+ });
460
+ return [nodeAngleBase, nodeAngleM];
461
+ }
462
+ case `$${frac(PiNode, 3).toTex()}$`: {
463
+ const nodeAngleBase = frac(PiNode, 3);
464
+ const vFactor = (coinFlip() ? +1 : -1) * randint(1, 3);
465
+ const nodeAngleM = multiply(vFactor, nodeAngleBase).simplify({
466
+ towardsDistribute: false,
467
+ });
468
+ return [nodeAngleBase, nodeAngleM];
469
+ }
470
+ default:
471
+ throw new Error("Unsupported opts.texAngleBase: " + opts.texAngleBase);
472
+ }
473
+ })();
474
+ const vModuleM = randint(1, 5);
475
+ const nodeModuleM = vModuleM.toTree();
476
+ const identifiers = {
477
+ nodeIdsModule: nodeModuleM.toIdentifiers(),
478
+ nodeIdsArgument: nodeArgumentM.toIdentifiers(),
479
+ nodeIdsAngleBase: nodeAngleBase.toIdentifiers(),
480
+ };
481
+ return getQuestionFromIdentifiers(identifiers, opts);
482
+ };
483
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
484
+ const question = {
485
+ answer: getAnswer(identifiers),
486
+ instruction: getInstruction(identifiers),
487
+ keys: getKeys(identifiers, opts),
488
+ answerFormat: "tex",
489
+ identifiers,
490
+ hint: getHint(identifiers),
491
+ correction: getCorrection(identifiers),
492
+ ggbOptions: getGGBOptions(identifiers, opts),
493
+ };
494
+ return question;
495
+ };
496
+ const optsDefault = {
497
+ isShouldDisplayAngleBase: false,
498
+ };
499
+ const arrayedOptsDefault = {
500
+ texAngleBase: [frac(PiNode, 6), frac(PiNode, 3)].map((node) => `$${node.toTex()}$`),
501
+ };
502
+ const options = [
503
+ {
504
+ id: "texAngleBase",
505
+ label: "Graduation d'angle",
506
+ target: GeneratorOptionTarget.generation,
507
+ type: GeneratorOptionType.multiselect,
508
+ values: [
509
+ frac(PiNode, 18),
510
+ frac(PiNode, 9),
511
+ frac(PiNode, 6),
512
+ frac(multiply(2, PiNode), 9),
513
+ frac(PiNode, 3),
514
+ ].map((node) => `$${node.toTex()}$`),
515
+ defaultValue: arrayedOptsDefault.texAngleBase,
516
+ },
517
+ {
518
+ id: "isShouldDisplayAngleBase",
519
+ label: "Afficher l'angle de graduation ?",
520
+ target: GeneratorOptionTarget.generation,
521
+ type: GeneratorOptionType.checkbox,
522
+ defaultValue: optsDefault.isShouldDisplayAngleBase,
523
+ },
524
+ ];
525
+ export const complexGeomAffixExpFromPoint = {
526
+ id: "complexGeomAffixExpFromPoint",
527
+ label: "Déterminer l'affixe d'un point sous forme exponentielle",
528
+ isSingleStep: true,
529
+ generator: (nb, opts) => getDistinctQuestions(() => getComplexGeomAffixExpFromPointQuestion(opts), nb),
530
+ options,
531
+ qcmTimer: 60,
532
+ freeTimer: 60,
533
+ isAnswerValid,
534
+ getPropositions,
535
+ subject: "Mathématiques",
536
+ getQuestionFromIdentifiers,
537
+ hasHintAndCorrection: true,
538
+ hasGeogebra: true,
539
+ };
@@ -0,0 +1,13 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
3
+ type Identifiers = {
4
+ nodeIdsModule: NodeIdentifiers;
5
+ nodeIdsArgument: NodeIdentifiers;
6
+ isAngleInDegrees: boolean;
7
+ };
8
+ type Options = {
9
+ isAngleInDegrees: boolean;
10
+ };
11
+ export declare const complexGeomAffixTrigFromPoint: Exercise<Identifiers, Options>;
12
+ export {};
13
+ //# sourceMappingURL=complexGeomAffixTrigFromPoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexGeomAffixTrigFromPoint.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/complex/geometric/complexGeomAffixTrigFromPoint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAerC,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAiF7C,KAAK,WAAW,GAAG;IACjB,aAAa,EAAE,eAAe,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AA8gBF,KAAK,OAAO,GAAG;IACb,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAgBF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAkBxE,CAAC"}