math-exercises 3.0.214 → 3.0.216

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 (371) 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 +82 -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 +2 -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/graphs/adjacentMatrixPath.d.ts +10 -0
  233. package/lib/exercises/math/graphs/adjacentMatrixPath.d.ts.map +1 -0
  234. package/lib/exercises/math/graphs/adjacentMatrixPath.js +89 -0
  235. package/lib/exercises/math/graphs/edgesNumberFromSummitsDegrees.d.ts +7 -0
  236. package/lib/exercises/math/graphs/edgesNumberFromSummitsDegrees.d.ts.map +1 -0
  237. package/lib/exercises/math/graphs/edgesNumberFromSummitsDegrees.js +98 -0
  238. package/lib/exercises/math/graphs/eulerianChainFromAdjacentMatrix.d.ts +8 -0
  239. package/lib/exercises/math/graphs/eulerianChainFromAdjacentMatrix.d.ts.map +1 -0
  240. package/lib/exercises/math/graphs/eulerianChainFromAdjacentMatrix.js +96 -0
  241. package/lib/exercises/math/graphs/graphsChainOrPathOfLengthN.d.ts +15 -0
  242. package/lib/exercises/math/graphs/graphsChainOrPathOfLengthN.d.ts.map +1 -0
  243. package/lib/exercises/math/graphs/graphsChainOrPathOfLengthN.js +262 -0
  244. package/lib/exercises/math/graphs/graphsCheckIsConnectedUndirectedGraph.d.ts +11 -0
  245. package/lib/exercises/math/graphs/graphsCheckIsConnectedUndirectedGraph.d.ts.map +1 -0
  246. package/lib/exercises/math/graphs/graphsCheckIsConnectedUndirectedGraph.js +178 -0
  247. package/lib/exercises/math/graphs/graphsCheckIsSameGraph.d.ts +19 -0
  248. package/lib/exercises/math/graphs/graphsCheckIsSameGraph.d.ts.map +1 -0
  249. package/lib/exercises/math/graphs/graphsCheckIsSameGraph.js +301 -0
  250. package/lib/exercises/math/graphs/graphsCheckIsVerticesAdjacent.d.ts +16 -0
  251. package/lib/exercises/math/graphs/graphsCheckIsVerticesAdjacent.d.ts.map +1 -0
  252. package/lib/exercises/math/graphs/graphsCheckIsVerticesAdjacent.js +207 -0
  253. package/lib/exercises/math/graphs/graphsDegreeOfVertex.d.ts +15 -0
  254. package/lib/exercises/math/graphs/graphsDegreeOfVertex.d.ts.map +1 -0
  255. package/lib/exercises/math/graphs/graphsDegreeOfVertex.js +232 -0
  256. package/lib/exercises/math/graphs/graphsOrderOfGraph.d.ts +14 -0
  257. package/lib/exercises/math/graphs/graphsOrderOfGraph.d.ts.map +1 -0
  258. package/lib/exercises/math/graphs/graphsOrderOfGraph.js +222 -0
  259. package/lib/exercises/math/graphs/index.d.ts +10 -0
  260. package/lib/exercises/math/graphs/index.d.ts.map +1 -0
  261. package/lib/exercises/math/graphs/index.js +9 -0
  262. package/lib/exercises/math/index.d.ts +1 -0
  263. package/lib/exercises/math/index.d.ts.map +1 -1
  264. package/lib/exercises/math/index.js +1 -0
  265. package/lib/exercises/math/matrices/areMatricesInverse.d.ts +9 -0
  266. package/lib/exercises/math/matrices/areMatricesInverse.d.ts.map +1 -0
  267. package/lib/exercises/math/matrices/areMatricesInverse.js +106 -0
  268. package/lib/exercises/math/matrices/computeFixedMatrixInRecurrenceSequence.d.ts +9 -0
  269. package/lib/exercises/math/matrices/computeFixedMatrixInRecurrenceSequence.d.ts.map +1 -0
  270. package/lib/exercises/math/matrices/computeFixedMatrixInRecurrenceSequence.js +144 -0
  271. package/lib/exercises/math/matrices/findInversedMatrixFromSystem.d.ts +8 -0
  272. package/lib/exercises/math/matrices/findInversedMatrixFromSystem.d.ts.map +1 -0
  273. package/lib/exercises/math/matrices/findInversedMatrixFromSystem.js +148 -0
  274. package/lib/exercises/math/matrices/index.d.ts +12 -0
  275. package/lib/exercises/math/matrices/index.d.ts.map +1 -1
  276. package/lib/exercises/math/matrices/index.js +12 -0
  277. package/lib/exercises/math/matrices/isMatrixTransitionMatrix.d.ts +8 -0
  278. package/lib/exercises/math/matrices/isMatrixTransitionMatrix.d.ts.map +1 -0
  279. package/lib/exercises/math/matrices/isMatrixTransitionMatrix.js +132 -0
  280. package/lib/exercises/math/matrices/matrixBuildMatrixFromCoefficients.d.ts +8 -0
  281. package/lib/exercises/math/matrices/matrixBuildMatrixFromCoefficients.d.ts.map +1 -0
  282. package/lib/exercises/math/matrices/matrixBuildMatrixFromCoefficients.js +152 -0
  283. package/lib/exercises/math/matrices/matrixCheckIsSymmetrical.d.ts +8 -0
  284. package/lib/exercises/math/matrices/matrixCheckIsSymmetrical.d.ts.map +1 -0
  285. package/lib/exercises/math/matrices/matrixCheckIsSymmetrical.js +155 -0
  286. package/lib/exercises/math/matrices/matrixComputeDetOfMat2.d.ts +8 -0
  287. package/lib/exercises/math/matrices/matrixComputeDetOfMat2.d.ts.map +1 -0
  288. package/lib/exercises/math/matrices/matrixComputeDetOfMat2.js +142 -0
  289. package/lib/exercises/math/matrices/matrixComputeInverseOfMat2.d.ts +8 -0
  290. package/lib/exercises/math/matrices/matrixComputeInverseOfMat2.d.ts.map +1 -0
  291. package/lib/exercises/math/matrices/matrixComputeInverseOfMat2.js +237 -0
  292. package/lib/exercises/math/matrices/matrixComputeLinearCombination.d.ts +15 -0
  293. package/lib/exercises/math/matrices/matrixComputeLinearCombination.d.ts.map +1 -0
  294. package/lib/exercises/math/matrices/matrixComputeLinearCombination.js +232 -0
  295. package/lib/exercises/math/matrices/matrixComputePower.d.ts +12 -0
  296. package/lib/exercises/math/matrices/matrixComputePower.d.ts.map +1 -0
  297. package/lib/exercises/math/matrices/matrixComputePower.js +230 -0
  298. package/lib/exercises/math/matrices/matrixComputeProduct.d.ts +9 -0
  299. package/lib/exercises/math/matrices/matrixComputeProduct.d.ts.map +1 -0
  300. package/lib/exercises/math/matrices/matrixComputeProduct.js +178 -0
  301. package/lib/exercises/math/matrices/writeMatrixAssociatedToSystem.d.ts +8 -0
  302. package/lib/exercises/math/matrices/writeMatrixAssociatedToSystem.d.ts.map +1 -0
  303. package/lib/exercises/math/matrices/writeMatrixAssociatedToSystem.js +105 -0
  304. package/lib/exercises/math/spaceGeometry/basis/index.d.ts +1 -0
  305. package/lib/exercises/math/spaceGeometry/basis/index.d.ts.map +1 -1
  306. package/lib/exercises/math/spaceGeometry/basis/index.js +1 -0
  307. package/lib/exercises/math/spaceGeometry/basis/spaceSegmentLengthInRectangularPrism.d.ts +18 -0
  308. package/lib/exercises/math/spaceGeometry/basis/spaceSegmentLengthInRectangularPrism.d.ts.map +1 -0
  309. package/lib/exercises/math/spaceGeometry/basis/spaceSegmentLengthInRectangularPrism.js +538 -0
  310. package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.d.ts.map +1 -1
  311. package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.js +6 -5
  312. package/lib/exercises/math/trigonometry/triangle/trigonometrySohcahtoaCalcul.js +1 -1
  313. package/lib/exercises/utils/geogebra/toolBarConstructor.d.ts +1 -0
  314. package/lib/exercises/utils/geogebra/toolBarConstructor.d.ts.map +1 -1
  315. package/lib/exercises/utils/geogebra/toolBarConstructor.js +2 -0
  316. package/lib/exercises/vea/matrixVEA.d.ts +2 -0
  317. package/lib/exercises/vea/matrixVEA.d.ts.map +1 -0
  318. package/lib/exercises/vea/matrixVEA.js +1 -0
  319. package/lib/geogebra/parsers/geogebraParser.d.ts +3 -0
  320. package/lib/geogebra/parsers/geogebraParser.d.ts.map +1 -1
  321. package/lib/geogebra/parsers/geogebraParser.js +27 -0
  322. package/lib/index.d.ts +286 -23
  323. package/lib/index.d.ts.map +1 -1
  324. package/lib/latexTester.js +2 -0
  325. package/lib/math/geometry/angle.d.ts.map +1 -1
  326. package/lib/math/geometry/angle.js +3 -0
  327. package/lib/math/geometry/point.d.ts.map +1 -1
  328. package/lib/math/geometry/point.js +3 -1
  329. package/lib/math/geometry/segment.d.ts +1 -1
  330. package/lib/math/geometry/segment.d.ts.map +1 -1
  331. package/lib/math/geometry/segment.js +5 -2
  332. package/lib/math/graphs/graph.d.ts +43 -0
  333. package/lib/math/graphs/graph.d.ts.map +1 -0
  334. package/lib/math/graphs/graph.js +391 -0
  335. package/lib/math/matrices/matrix.d.ts +42 -3
  336. package/lib/math/matrices/matrix.d.ts.map +1 -1
  337. package/lib/math/matrices/matrix.js +173 -7
  338. package/lib/math/matrices/parseMatrix.d.ts +3 -0
  339. package/lib/math/matrices/parseMatrix.d.ts.map +1 -0
  340. package/lib/math/matrices/parseMatrix.js +22 -0
  341. package/lib/math/systems/generalSystem.d.ts +2 -0
  342. package/lib/math/systems/generalSystem.d.ts.map +1 -1
  343. package/lib/math/systems/generalSystem.js +5 -0
  344. package/lib/math/utils/geometry/angleBetweenPoints.d.ts +4 -0
  345. package/lib/math/utils/geometry/angleBetweenPoints.d.ts.map +1 -0
  346. package/lib/math/utils/geometry/angleBetweenPoints.js +58 -0
  347. package/lib/math/utils/geometry/angleNWSE.d.ts +3 -0
  348. package/lib/math/utils/geometry/angleNWSE.d.ts.map +1 -0
  349. package/lib/math/utils/geometry/angleNWSE.js +56 -0
  350. package/lib/math/utils/graphs/graphRenderer.d.ts +25 -0
  351. package/lib/math/utils/graphs/graphRenderer.d.ts.map +1 -0
  352. package/lib/math/utils/graphs/graphRenderer.js +123 -0
  353. package/lib/playground.d.ts +6 -1
  354. package/lib/playground.d.ts.map +1 -1
  355. package/lib/playground.js +6 -5
  356. package/lib/tests/singleExo.test.d.ts.map +1 -1
  357. package/lib/tests/singleExo.test.js +2 -2
  358. package/lib/tree/parsers/latexParser.d.ts +1 -1
  359. package/lib/tree/utilities/nodeSimplifier.d.ts +1 -1
  360. package/lib/types/keyIds.d.ts +2 -0
  361. package/lib/types/keyIds.d.ts.map +1 -1
  362. package/lib/utils/arrays/arrayChunks.d.ts +9 -0
  363. package/lib/utils/arrays/arrayChunks.d.ts.map +1 -0
  364. package/lib/utils/arrays/arrayChunks.js +34 -0
  365. package/lib/utils/strings/frenchDays.d.ts +2 -0
  366. package/lib/utils/strings/frenchDays.d.ts.map +1 -0
  367. package/lib/utils/strings/frenchDays.js +9 -0
  368. package/lib/utils/strings/ordinalSuffixed.d.ts +2 -0
  369. package/lib/utils/strings/ordinalSuffixed.d.ts.map +1 -0
  370. package/lib/utils/strings/ordinalSuffixed.js +5 -0
  371. package/package.json +7 -1
@@ -0,0 +1,11 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { PointIdentifiers } from "../../../../math/geometry/point.js";
3
+ import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
4
+ type Identifiers = {
5
+ nodeIdsModule: NodeIdentifiers;
6
+ nodeIdsArgument: NodeIdentifiers;
7
+ pointIds: PointIdentifiers[];
8
+ };
9
+ export declare const complexGeomFindPointFromAffixExp: Exercise<Identifiers>;
10
+ export {};
11
+ //# sourceMappingURL=complexGeomFindPointFromAffixExp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexGeomFindPointFromAffixExp.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/complex/geometric/complexGeomFindPointFromAffixExp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AA4E7C,KAAK,WAAW,GAAG;IACjB,aAAa,EAAE,eAAe,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B,CAAC;AAkPF,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CAAC,WAAW,CAkBlE,CAAC"}
@@ -0,0 +1,223 @@
1
+ import { addValidProp, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { colorWithOpacity } from "../../../../geogebra/colors.js";
4
+ import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
5
+ import { Point, PointConstructor, } from "../../../../math/geometry/point.js";
6
+ import { Vector } from "../../../../math/geometry/vector.js";
7
+ import { randfloat } from "../../../../math/utils/random/randfloat.js";
8
+ import { round } from "../../../../math/utils/round.js";
9
+ import { cos } from "../../../../tree/nodes/functions/cosNode.js";
10
+ import { exp } from "../../../../tree/nodes/functions/expNode.js";
11
+ import { sin } from "../../../../tree/nodes/functions/sinNode.js";
12
+ import { NodeConstructor, } from "../../../../tree/nodes/nodeConstructor.js";
13
+ import { PiNode } from "../../../../tree/nodes/numbers/piNode.js";
14
+ import { add } from "../../../../tree/nodes/operators/addNode.js";
15
+ import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
16
+ import { isMultiplyNode, multiply, } from "../../../../tree/nodes/operators/multiplyNode.js";
17
+ import { substract } from "../../../../tree/nodes/operators/substractNode.js";
18
+ import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
19
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
20
+ import { shuffle } from "../../../../utils/alea/shuffle.js";
21
+ //TODO: frac does not simplify "i"
22
+ // const nodeI = new ComplexNode((0).toTree(), (1).toTree());
23
+ const nodeI = new VariableNode("i");
24
+ const _degreesToRadians = (angleInDegrees, precision) => {
25
+ const oneOver180 = 0.00555555555555555;
26
+ return round(multiply(multiply(angleInDegrees, PiNode), oneOver180).evaluate(), precision);
27
+ };
28
+ const rotateVector = (vec, angle, name) => {
29
+ //x' = cos(t)*x -sin(t)*y
30
+ //y' = sin(t)*x + cos(t)*y
31
+ const cos = Math.cos(angle);
32
+ const sin = Math.sin(angle);
33
+ 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());
34
+ };
35
+ const rotatePoint = (target, angle, center, name, precision = 2) => {
36
+ const vSrc = createVector(center, target, "vSrc", precision);
37
+ const vRotated = rotateVector(vSrc, angle, "vRotated");
38
+ return createPoint(add(center.x, vRotated.x).evaluate(), add(center.y, vRotated.y).evaluate(), name, precision);
39
+ };
40
+ const createVector = (from, to, name, precision = 5) => {
41
+ return new Vector(name, round(substract(to.x, from.x).evaluate(), precision).toTree(), round(substract(to.y, from.y).evaluate(), precision).toTree());
42
+ };
43
+ const createPoint = (x, y, name, precision = 5) => {
44
+ return new Point(name, round(x, precision), round(y, precision));
45
+ };
46
+ const getHydrated = (identifiers) => {
47
+ const { nodeIdsModule, nodeIdsArgument, pointIds } = identifiers;
48
+ const [nodeModule, nodeArgument] = [nodeIdsModule, nodeIdsArgument].map((nodeIds) => NodeConstructor.fromIdentifiers(nodeIds));
49
+ const arrPoint = pointIds.map((pointIds) => PointConstructor.fromIdentifiers(pointIds));
50
+ const nodeAffixSimplified = multiply(nodeModule, exp(multiply(nodeI, nodeArgument.simplify({ towardsDistribute: true }))));
51
+ return {
52
+ nodeModule,
53
+ nodeArgument,
54
+ arrPoint,
55
+ nodeAffixSimplified,
56
+ };
57
+ };
58
+ const getInstruction = (identifiers) => {
59
+ const { nodeAffixSimplified } = getHydrated(identifiers);
60
+ return `Quel point est le point image du nombre $${nodeAffixSimplified.toTex()}$ ?`;
61
+ };
62
+ const getAnswer = (identifiers) => {
63
+ const { arrPoint } = getHydrated(identifiers);
64
+ const [pointAnswer, _] = arrPoint;
65
+ return pointAnswer.name;
66
+ };
67
+ const getHint = () => {
68
+ return `Le nombre $\\pi$ vaut environ $${(3.14).frenchify()}$.
69
+ Le demi-plan supérieur contient les points images de nombres dont l'argument principal est compris entre $0$ et $\\pi$.
70
+ Le demi-plan inférieur contient les points images de nombres dont l'argument principal est compris entre $-\\pi$ et $0$.
71
+
72
+ Détermine une valeur approchée de l'argument du nombre donné pour trouver le point demandé.`;
73
+ };
74
+ const getCorrection = (identifiers) => {
75
+ const { nodeModule, nodeArgument, nodeAffixSimplified, arrPoint } = getHydrated(identifiers);
76
+ const [pointAnswer, _] = arrPoint;
77
+ const nodeModuleWithPi = isMultiplyNode(nodeModule) ? nodeModule : undefined;
78
+ const nodeArgumentWithoutPi = isMultiplyNode(nodeArgument)
79
+ ? undefined
80
+ : nodeArgument;
81
+ return `${nodeModuleWithPi !== undefined
82
+ ? `On peut réécrire sous forme approchée le module donné :
83
+
84
+ $$
85
+ ${nodeModuleWithPi.toTex()} \\approx ${round(nodeModuleWithPi.evaluate(), 2).frenchify()}
86
+ $$
87
+
88
+ `
89
+ : ``}
90
+ ${nodeArgumentWithoutPi !== undefined
91
+ ? `On peut réécrire sous forme approchée l'argument donné :
92
+
93
+ $$
94
+ ${nodeArgumentWithoutPi.toTex()} \\approx ${round(frac(nodeArgumentWithoutPi, PiNode).evaluate(), 2).frenchify()} \\pi
95
+ $$
96
+
97
+ `
98
+ : `On cherche un point à la distance $${nodeModule.toTex()}$ de l'origine.`}
99
+
100
+ On peut ainsi détérminer plus aisément que le point image de $${nodeAffixSimplified.toTex()}$ est le point $${pointAnswer.name}$.
101
+
102
+ `;
103
+ };
104
+ const getGGBOptions = (identifiers) => {
105
+ const { arrPoint } = getHydrated(identifiers);
106
+ const nodeAngleBase = frac(PiNode, 6);
107
+ const nbRays = frac(multiply(2, PiNode), nodeAngleBase)
108
+ .simplify({ towardsDistribute: false })
109
+ .evaluate();
110
+ const arrNodeAngle = [...Array(nbRays).keys()].map((i) => multiply(i, nodeAngleBase));
111
+ const pointO = new Point("O", 0, 0);
112
+ const pointA = new Point("A", 1, 0);
113
+ const precision = 5;
114
+ const arrPointForAngle = arrNodeAngle.map((nodeAngle, i) => rotatePoint(pointA, nodeAngle.evaluate(), pointO, `PA${i}`, precision));
115
+ const strLineColor = `"${colorWithOpacity("#000000", 26)}"`;
116
+ const ggb = new GeogebraConstructor({
117
+ isGridSimple: true,
118
+ commands: [
119
+ //circles
120
+ ...[...Array(4).keys()]
121
+ .map((i) => i + 1)
122
+ .flatMap((v, i) => [
123
+ `c${i} = Circle((0,0), ${v})`,
124
+ // `SetColor(c${i}, ${strLineColor})`,
125
+ `SetLineThickness(c${i}, 1)`,
126
+ ]),
127
+ //rays
128
+ ...arrPointForAngle.flatMap((point, i) => [
129
+ `ray${i} = Ray(${pointO.toMathString()}, ${point.toMathString()})`,
130
+ `SetColor(ray${i}, ${strLineColor})`,
131
+ `SetLineThickness(ray${i}, 1)`,
132
+ ]),
133
+ //points
134
+ ...arrPoint.flatMap((point) => point.toGGBCommand({
135
+ isFixed: true,
136
+ isSelectionnable: true,
137
+ showLabel: true,
138
+ // style: 1,
139
+ })),
140
+ ],
141
+ fontSize: 16,
142
+ });
143
+ return ggb.getOptions({
144
+ coords: [-4.1, 4.1, -4.1, 4.1],
145
+ });
146
+ };
147
+ const getPropositions = (_n, { answer, ...identifiers }) => {
148
+ const propositions = [];
149
+ const { arrPoint } = getHydrated(identifiers);
150
+ const [pointAnswer, _] = arrPoint;
151
+ arrPoint
152
+ .toSorted((point1, point2) => point1.name.localeCompare(point2.name))
153
+ .forEach((point) => {
154
+ if (point.name === pointAnswer.name) {
155
+ addValidProp(propositions, point.name);
156
+ }
157
+ else {
158
+ tryToAddWrongProp(propositions, point.name);
159
+ }
160
+ });
161
+ return propositions;
162
+ };
163
+ const getComplexGeomFindPointFromAffixExpQuestion = () => {
164
+ function createRandomAffixObj(name) {
165
+ const nodeModule = coinFlip()
166
+ ? randfloat(1, 4, 1).toTree()
167
+ : multiply(randfloat(0.5, 1.2, 1), PiNode);
168
+ const nodeArgument = coinFlip()
169
+ ? randfloat(-5, 5, 1, [0]).toTree()
170
+ : multiply(randfloat(-1.5, 1.5, 1, [0]), PiNode);
171
+ const point = new Point(name, multiply(nodeModule, cos(nodeArgument)), multiply(nodeModule, sin(nodeArgument)));
172
+ const affixObj = { nodeModule, nodeArgument, point };
173
+ return affixObj;
174
+ }
175
+ const arrAffixObj = (() => {
176
+ let arrLetter = ["A", "B", "C", "D"];
177
+ const arrAffixObj = [];
178
+ while (arrAffixObj.length < 4) {
179
+ const [name, ...arrLetterRest] = arrLetter;
180
+ const affixObjCandidate = createRandomAffixObj(name);
181
+ const isFarEnough = arrAffixObj.every(({ point: pointExisting }) => affixObjCandidate.point.distanceTo(pointExisting) > 0.5);
182
+ if (isFarEnough) {
183
+ arrAffixObj.push(affixObjCandidate);
184
+ arrLetter = arrLetterRest;
185
+ }
186
+ }
187
+ const arrAffixObjShuffled = shuffle(arrAffixObj);
188
+ return arrAffixObjShuffled;
189
+ })();
190
+ const [affixObjAsked, _] = arrAffixObj;
191
+ const identifiers = {
192
+ nodeIdsModule: affixObjAsked.nodeModule.toIdentifiers(),
193
+ nodeIdsArgument: affixObjAsked.nodeArgument.toIdentifiers(),
194
+ pointIds: arrAffixObj.map(({ point }) => point.toIdentifiers()),
195
+ };
196
+ return getQuestionFromIdentifiers(identifiers);
197
+ };
198
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
199
+ const question = {
200
+ answer: getAnswer(identifiers),
201
+ instruction: getInstruction(identifiers),
202
+ answerFormat: "tex",
203
+ identifiers,
204
+ hint: getHint(identifiers),
205
+ correction: getCorrection(identifiers),
206
+ ggbOptions: getGGBOptions(identifiers, opts),
207
+ };
208
+ return question;
209
+ };
210
+ export const complexGeomFindPointFromAffixExp = {
211
+ id: "complexGeomFindPointFromAffixExp",
212
+ label: "Déterminer le point image d'un nombre complexe donné sous forme exponentielle",
213
+ isSingleStep: true,
214
+ generator: (nb, opts) => getDistinctQuestions(() => getComplexGeomFindPointFromAffixExpQuestion(opts), nb),
215
+ qcmTimer: 60,
216
+ freeTimer: 60,
217
+ getPropositions,
218
+ subject: "Mathématiques",
219
+ getQuestionFromIdentifiers,
220
+ hasHintAndCorrection: true,
221
+ hasGeogebra: true,
222
+ answerType: "QCU",
223
+ };
@@ -0,0 +1,11 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { PointIdentifiers } from "../../../../math/geometry/point.js";
3
+ type Identifiers = {
4
+ nbSides: number;
5
+ pointIds: PointIdentifiers[];
6
+ indexTarget: number;
7
+ exponent: number;
8
+ };
9
+ export declare const complexGeomFindPointFromPowerOfUnitRootFromFigure: Exercise<Identifiers>;
10
+ export {};
11
+ //# sourceMappingURL=complexGeomFindPointFromPowerOfUnitRootFromFigure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexGeomFindPointFromPowerOfUnitRootFromFigure.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/complex/geometric/complexGeomFindPointFromPowerOfUnitRootFromFigure.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAiBT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAoGtC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAyYF,eAAO,MAAM,iDAAiD,EAAE,QAAQ,CAAC,WAAW,CAoBjF,CAAC"}
@@ -0,0 +1,348 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, propWhile, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { colorWithOpacity } from "../../../../geogebra/colors.js";
4
+ import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
5
+ import { Point, PointConstructor, } from "../../../../math/geometry/point.js";
6
+ import { Vector } from "../../../../math/geometry/vector.js";
7
+ import { lcm } from "../../../../math/utils/arithmetic/lcm.js";
8
+ import { randint } from "../../../../math/utils/random/randint.js";
9
+ import { round } from "../../../../math/utils/round.js";
10
+ import { cos } from "../../../../tree/nodes/functions/cosNode.js";
11
+ import { exp } from "../../../../tree/nodes/functions/expNode.js";
12
+ import { sin } from "../../../../tree/nodes/functions/sinNode.js";
13
+ import { PiNode } from "../../../../tree/nodes/numbers/piNode.js";
14
+ import { add } from "../../../../tree/nodes/operators/addNode.js";
15
+ import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
16
+ import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
17
+ import { power } from "../../../../tree/nodes/operators/powerNode.js";
18
+ import { substract } from "../../../../tree/nodes/operators/substractNode.js";
19
+ import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
20
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
21
+ import { probaFlip } from "../../../../utils/alea/probaFlip.js";
22
+ import { probaLawFlip } from "../../../../utils/alea/probaLawFlip.js";
23
+ import { random } from "../../../../utils/alea/random.js";
24
+ import { zip } from "../../../../utils/arrays/arrayZip.js";
25
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
26
+ const pointO = new Point("O", 0, 0);
27
+ //TODO: frac does not simplify "i"
28
+ // const nodeI = new ComplexNode((0).toTree(), (1).toTree());
29
+ const nodeI = new VariableNode("i");
30
+ const _degreesToRadians = (angleInDegrees, precision) => {
31
+ const oneOver180 = 0.00555555555555555;
32
+ return round(multiply(multiply(angleInDegrees, PiNode), oneOver180).evaluate(), precision);
33
+ };
34
+ const rotateVector = (vec, angle, name) => {
35
+ //x' = cos(t)*x -sin(t)*y
36
+ //y' = sin(t)*x + cos(t)*y
37
+ const cos = Math.cos(angle);
38
+ const sin = Math.sin(angle);
39
+ 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());
40
+ };
41
+ const rotatePoint = (target, angle, center, name, precision = 2) => {
42
+ const vSrc = createVector(center, target, "vSrc", precision);
43
+ const vRotated = rotateVector(vSrc, angle, "vRotated");
44
+ return createPoint(add(center.x, vRotated.x).evaluate(), add(center.y, vRotated.y).evaluate(), name, precision);
45
+ };
46
+ const createVector = (from, to, name, precision = 5) => {
47
+ return new Vector(name, round(substract(to.x, from.x).evaluate(), precision).toTree(), round(substract(to.y, from.y).evaluate(), precision).toTree());
48
+ };
49
+ const createPoint = (x, y, name, precision = 5) => {
50
+ return new Point(name, round(x, precision), round(y, precision));
51
+ };
52
+ const createPointForModuleAndArgument = (nodeModule, nodeArgument, name) => new Point(name, multiply(nodeModule, cos(nodeArgument)), multiply(nodeModule, sin(nodeArgument)));
53
+ const getHydrated = (identifiers) => {
54
+ const { nbSides, pointIds, indexTarget, exponent } = identifiers;
55
+ const nodeAngleBase = frac(multiply(2, PiNode), nbSides);
56
+ const arrDictPointAndAffix = pointIds.map((pointIds, i) => {
57
+ const point = PointConstructor.fromIdentifiers(pointIds);
58
+ const nodeArgument = multiply(i, nodeAngleBase).simplify({
59
+ towardsDistribute: false,
60
+ });
61
+ const nodeAffix = exp(multiply(nodeI, nodeArgument));
62
+ return {
63
+ point,
64
+ nodeArgument,
65
+ nodeAffix,
66
+ };
67
+ });
68
+ const strNamePolygon = arrDictPointAndAffix.reduce((acc, { point }) => acc + point.name, "");
69
+ const nodeAffixTarget = arrDictPointAndAffix[indexTarget].nodeAffix;
70
+ const nodeAffixInstruction = power(nodeAffixTarget, exponent);
71
+ const nodeArgumentTarget = arrDictPointAndAffix[indexTarget].nodeArgument;
72
+ const nodeAffixAnswer = exp(multiply(nodeI, multiply(exponent, nodeArgumentTarget)));
73
+ const indexAnswer = (indexTarget * exponent) % nbSides;
74
+ return {
75
+ strNamePolygon,
76
+ nodeAngleBase,
77
+ arrDictPointAndAffix,
78
+ nodeArgumentTarget,
79
+ nodeAffixTarget,
80
+ nodeAffixInstruction,
81
+ indexAnswer,
82
+ nodeAffixAnswer,
83
+ };
84
+ };
85
+ const getInstruction = (identifiers) => {
86
+ const { nbSides } = identifiers;
87
+ const { nodeAffixInstruction, strNamePolygon } = getHydrated(identifiers);
88
+ return `Les points du polygone $${strNamePolygon}$ sont les points images des racines $${nbSides}$èmes de l'unité.
89
+ Quel est le point d'affixe $${nodeAffixInstruction.toTex()}$ ?`;
90
+ };
91
+ const getAnswer = (identifiers) => {
92
+ const { arrDictPointAndAffix, indexAnswer } = getHydrated(identifiers);
93
+ const { point } = arrDictPointAndAffix[indexAnswer];
94
+ return point.name;
95
+ };
96
+ const getHint = (identifiers) => {
97
+ const { exponent } = identifiers;
98
+ const { nodeAffixTarget } = getHydrated(identifiers);
99
+ return `Soit $\\alpha$ un nombre réel et $n$ un nombre entier.
100
+ Le calcul des puissances d'une exponentielle complexe est simple :
101
+
102
+ $$
103
+ (e^{i \\alpha})^n = e^{i (n \\alpha)}
104
+ $$
105
+
106
+ L'argument de $(e^{i \\alpha})^n$ est $n$ fois $\\alpha$.
107
+ Tu peux donc répérer la rotation qu'il faut effectuer pour partir du point $A$ et arriver au point d'affixe $${nodeAffixTarget.toTex()}$
108
+ et la faire $${exponent}$ fois en partant du point $A$.`;
109
+ };
110
+ const getCorrection = (identifiers) => {
111
+ const { exponent, indexTarget, nbSides } = identifiers;
112
+ const { nodeAffixInstruction, nodeAffixTarget, nodeArgumentTarget, nodeAffixAnswer, arrDictPointAndAffix, indexAnswer, } = getHydrated(identifiers);
113
+ const { point: pointTarget } = arrDictPointAndAffix[indexTarget];
114
+ const { point: pointAnswer } = arrDictPointAndAffix[indexAnswer];
115
+ return `Le calcul des puissances d'une exponentielle complexe est simple :
116
+
117
+ $$
118
+ ${nodeAffixInstruction.toTex()} = ${nodeAffixAnswer.toTex()}
119
+ $$
120
+
121
+ Le point d'affixe $${nodeAffixTarget.toTex()}$ est le point $${pointTarget.name}$.
122
+ On effectue une rotation d'angle $${nodeArgumentTarget.toTex()}$ pour partir du point $A$ arriver au point $${pointTarget.name}$.
123
+
124
+ On effectue $${exponent}$ fois cette rotation en partant du point $A$.
125
+ On tombe sur le point $${pointAnswer.toTex()}$.
126
+
127
+ En effet :
128
+
129
+ $$
130
+ {${indexTarget} \\times ${exponent}} \\equiv ${indexAnswer} \\pmod{${nbSides}}
131
+ $$
132
+
133
+ `;
134
+ };
135
+ const getCorrectionGGBOptions = (identifiers) => {
136
+ const { nbSides, exponent, indexTarget } = identifiers;
137
+ const { arrDictPointAndAffix, nodeArgumentTarget } = getHydrated(identifiers);
138
+ const arrPoint = arrDictPointAndAffix.map(({ point }) => point);
139
+ const [arrArrPointForArcs, arrArrPointForArrows] = (() => {
140
+ const arrIndexes = [...Array(exponent + 1).keys()].map((i) => (i * indexTarget) % nbSides);
141
+ const arrPointForIndexes = arrIndexes.map((index) => arrDictPointAndAffix[index].point);
142
+ const arrArrArrPointForArcs = zip(arrPointForIndexes.slice(0, -1), arrPointForIndexes.slice(1)).map(([pointRawStart, pointRawEnd], i) => {
143
+ const factor = 0.5 + (i * 0.5) / exponent;
144
+ const [pointArcStart, pointArcEnd] = [pointRawStart, pointRawEnd].map((pointRaw) => new Point("NoName", multiply(factor, pointRaw.x), multiply(factor, pointRaw.y)));
145
+ const pointArrowStart = rotatePoint(pointArcStart, multiply(0.97, nodeArgumentTarget).evaluate(), pointO, "NoName", 5);
146
+ const arrPointForArcs = [pointArcStart, pointArcEnd];
147
+ const arrPointForArrows = [pointArrowStart, pointArcEnd];
148
+ return [arrPointForArcs, arrPointForArrows];
149
+ });
150
+ const arrArrPointForArcs = arrArrArrPointForArcs.map(([arrPointForArcs, _]) => arrPointForArcs);
151
+ const arrArrPointForArrows = arrArrArrPointForArcs.map(([_, arrPointForArrows]) => arrPointForArrows);
152
+ return [arrArrPointForArcs, arrArrPointForArrows];
153
+ })();
154
+ const strLineColor = `"${colorWithOpacity("#000000", 26)}"`;
155
+ const arrStrCaption = "①②③④⑤⑥⑦⑧⑨".split("");
156
+ const ggb = new GeogebraConstructor({
157
+ isGridSimple: true,
158
+ commands: [
159
+ //points
160
+ ...[pointO, ...arrPoint].flatMap((point) => point.toGGBCommand({
161
+ isFixed: true,
162
+ isSelectionnable: true,
163
+ showLabel: true,
164
+ })),
165
+ //segments (rays)
166
+ ...arrPoint.flatMap((point, i) => [
167
+ `segRay${i} = Segment(${pointO.toMathString()}, ${point.toMathString()})`,
168
+ `SetColor(segRay${i}, ${strLineColor})`,
169
+ `SetLineThickness(segRay${i}, 1)`,
170
+ `SetLineStyle(segRay${i}, 1)`,
171
+ ]),
172
+ //arcs
173
+ ...arrArrPointForArcs.flatMap(([pointArcStart, pointArcEnd], i) => [
174
+ `arc${i} = CircleArc(${pointO.toMathString()}, ${pointArcStart.toMathString()}, ${pointArcEnd.toMathString()})`,
175
+ // `SetColor(arc${i}, ${strLineColor})`,
176
+ `SetLineThickness(arc${i}, 3)`,
177
+ `SetLineStyle(arc${i}, 0)`,
178
+ // `SetDecoration(arc${i}, 2)`,
179
+ `SetCaption(arc${i}, "${arrStrCaption[i]}")`,
180
+ `ShowLabel(arc${i}, true)`,
181
+ ]),
182
+ //arrows
183
+ ...arrArrPointForArrows.flatMap(([pointArrowStart, pointArrowEnd], i) => [
184
+ `vecArrow${i} = Vector(${pointArrowStart.toMathString()}, ${pointArrowEnd.toMathString()})`,
185
+ // `SetLineThickness(vecArrow${i}, 1)`,
186
+ ]),
187
+ ],
188
+ fontSize: 16,
189
+ xAxis: {
190
+ hideNumbers: true,
191
+ },
192
+ yAxis: {
193
+ hideNumbers: true,
194
+ },
195
+ });
196
+ const radius = 1;
197
+ const lForFrame = radius + 0.1;
198
+ return ggb.getOptions({
199
+ coords: [-lForFrame, lForFrame, -lForFrame, lForFrame],
200
+ });
201
+ };
202
+ const getGGBOptions = (identifiers) => {
203
+ const { arrDictPointAndAffix } = getHydrated(identifiers);
204
+ const arrPoint = arrDictPointAndAffix.map(({ point }) => point);
205
+ const pointO = new Point("O", 0, 0);
206
+ const strLineColor = `"${colorWithOpacity("#000000", 26)}"`;
207
+ const ggb = new GeogebraConstructor({
208
+ isGridSimple: true,
209
+ commands: [
210
+ //points
211
+ ...[pointO, ...arrPoint].flatMap((point) => point.toGGBCommand({
212
+ isFixed: true,
213
+ isSelectionnable: true,
214
+ showLabel: true,
215
+ })),
216
+ //segments (rays)
217
+ ...arrPoint.flatMap((point, i) => [
218
+ `segRay${i} = Segment(${pointO.toMathString()}, ${point.toMathString()})`,
219
+ `SetColor(segRay${i}, ${strLineColor})`,
220
+ `SetLineThickness(segRay${i}, 1)`,
221
+ `SetLineStyle(segRay${i}, 1)`,
222
+ ]),
223
+ ],
224
+ fontSize: 16,
225
+ xAxis: {
226
+ hideNumbers: true,
227
+ },
228
+ yAxis: {
229
+ hideNumbers: true,
230
+ },
231
+ });
232
+ const radius = 1;
233
+ const lForFrame = radius + 0.1;
234
+ return ggb.getOptions({
235
+ coords: [-lForFrame, lForFrame, -lForFrame, lForFrame],
236
+ });
237
+ };
238
+ const getPropositions = (n, { answer, ...identifiers }) => {
239
+ const propositions = [];
240
+ addValidProp(propositions, answer);
241
+ const { nbSides, indexTarget, exponent } = identifiers;
242
+ const { indexAnswer, arrDictPointAndAffix } = getHydrated(identifiers);
243
+ //student: almost there: offset
244
+ if (probaFlip(0.3)) {
245
+ const vAbsOffset = probaLawFlip([
246
+ [1, 0.5],
247
+ [2, 0.3],
248
+ [3, 0.2],
249
+ ]);
250
+ const indexWrong = (() => {
251
+ const indexRaw = (indexAnswer + (coinFlip() ? +1 : -1) * vAbsOffset) % nbSides;
252
+ if (indexRaw >= 0) {
253
+ return indexRaw;
254
+ }
255
+ else {
256
+ return nbSides + indexRaw;
257
+ }
258
+ })();
259
+ const { point: pointWrong } = arrDictPointAndAffix[indexWrong];
260
+ tryToAddWrongProp(propositions, pointWrong.name);
261
+ }
262
+ //student: a \\times exponent -> a + exponent
263
+ {
264
+ const indexWrong = (indexTarget + exponent) % nbSides;
265
+ const { point: pointWrong } = arrDictPointAndAffix[indexWrong];
266
+ tryToAddWrongProp(propositions, pointWrong.name);
267
+ }
268
+ //student: (exp(i argumentTarget))^n -> (exp(i baseAngle))^n
269
+ {
270
+ const indexWrong = (1 * exponent) % nbSides;
271
+ const { point: pointWrong } = arrDictPointAndAffix[indexWrong];
272
+ tryToAddWrongProp(propositions, pointWrong.name);
273
+ }
274
+ //filler
275
+ propWhile(propositions, n, () => {
276
+ if (nbSides < n) {
277
+ tryToAddWrongProp(propositions, "O");
278
+ }
279
+ const { point: pointWrong } = random(arrDictPointAndAffix);
280
+ tryToAddWrongProp(propositions, pointWrong.name);
281
+ });
282
+ return shuffleProps(propositions, n).toSorted((proposition1, proposition2) => proposition1.statement.localeCompare(proposition2.statement));
283
+ };
284
+ const getKeys = (identifiers) => {
285
+ const { arrDictPointAndAffix } = getHydrated(identifiers);
286
+ return arrDictPointAndAffix.map(({ point }) => point.name);
287
+ };
288
+ const isAnswerValid = (ans, { answer }) => {
289
+ try {
290
+ return ans === answer;
291
+ }
292
+ catch (err) {
293
+ return handleVEAError(err);
294
+ }
295
+ };
296
+ // const createRandomIdentifiers = (opts: Options) => {};
297
+ const getComplexGeomFindPointFromPowerOfUnitRootFromFigureQuestion = () => {
298
+ const nbSides = randint(3, 9);
299
+ const nodeAngleBase = frac(multiply(2, PiNode), nbSides);
300
+ const arrLetter = "ABCDEFGHIJKL".split("");
301
+ const arrPoint = [...Array(nbSides).keys()].map((i) => {
302
+ const letter = arrLetter[i];
303
+ const nodeModule = (1).toTree();
304
+ const nodeArgument = multiply(i, nodeAngleBase);
305
+ const point = createPointForModuleAndArgument(nodeModule, nodeArgument, letter);
306
+ const pointEvaluated = new Point(point.name, point.x.evaluate(), point.y.evaluate());
307
+ return pointEvaluated;
308
+ });
309
+ const indexTarget = randint(1, nbSides);
310
+ const exponent = probaFlip(0.2)
311
+ ? lcm(indexTarget, nbSides) / indexTarget
312
+ : randint(2, 4);
313
+ const identifiers = {
314
+ nbSides,
315
+ pointIds: arrPoint.map((point) => point.toIdentifiers()),
316
+ indexTarget,
317
+ exponent,
318
+ };
319
+ return getQuestionFromIdentifiers(identifiers);
320
+ };
321
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
322
+ const question = {
323
+ answer: getAnswer(identifiers),
324
+ instruction: getInstruction(identifiers),
325
+ keys: getKeys(identifiers, opts),
326
+ answerFormat: "tex",
327
+ identifiers,
328
+ hint: getHint(identifiers),
329
+ correction: getCorrection(identifiers),
330
+ correctionGgbOptions: getCorrectionGGBOptions(identifiers),
331
+ ggbOptions: getGGBOptions(identifiers, opts),
332
+ };
333
+ return question;
334
+ };
335
+ export const complexGeomFindPointFromPowerOfUnitRootFromFigure = {
336
+ id: "complexGeomFindPointFromPowerOfUnitRootFromFigure",
337
+ label: "Déterminer le point dont l'affixe est une puissance d'une racine nième de l'unité",
338
+ isSingleStep: true,
339
+ generator: (nb, opts) => getDistinctQuestions(() => getComplexGeomFindPointFromPowerOfUnitRootFromFigureQuestion(opts), nb),
340
+ qcmTimer: 60,
341
+ freeTimer: 60,
342
+ isAnswerValid,
343
+ getPropositions,
344
+ subject: "Mathématiques",
345
+ getQuestionFromIdentifiers,
346
+ hasHintAndCorrection: true,
347
+ hasGeogebra: true,
348
+ };
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ type Identifiers = {
3
+ re: number;
4
+ im: number;
5
+ };
6
+ export declare const complexGeomPlaceAffixPoint: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=complexGeomPlaceAffixPoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexGeomPlaceAffixPoint.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/complex/geometric/complexGeomPlaceAffixPoint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AA4EF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAiB5D,CAAC"}