math-exercises 3.0.200 → 3.0.201

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 (406) hide show
  1. package/lib/exercises/math/calcul/fractions/fractionsSumsPrimeDenominators.js +1 -1
  2. package/lib/exercises/math/calcul/index.d.ts +1 -0
  3. package/lib/exercises/math/calcul/index.d.ts.map +1 -1
  4. package/lib/exercises/math/calcul/index.js +1 -0
  5. package/lib/exercises/math/calculLitteral/inequations/index.d.ts +1 -0
  6. package/lib/exercises/math/calculLitteral/inequations/index.d.ts.map +1 -1
  7. package/lib/exercises/math/calculLitteral/inequations/index.js +1 -0
  8. package/lib/exercises/math/calculLitteral/inequations/inequationCenteredInterval.d.ts +14 -0
  9. package/lib/exercises/math/calculLitteral/inequations/inequationCenteredInterval.d.ts.map +1 -0
  10. package/lib/exercises/math/calculLitteral/inequations/inequationCenteredInterval.js +263 -0
  11. package/lib/exercises/math/combinatory/anagrams.d.ts.map +1 -1
  12. package/lib/exercises/math/combinatory/anagrams.js +89 -68
  13. package/lib/exercises/math/combinatory/index.d.ts +1 -0
  14. package/lib/exercises/math/combinatory/index.d.ts.map +1 -1
  15. package/lib/exercises/math/combinatory/index.js +1 -0
  16. package/lib/exercises/math/dataRepresentations/index.d.ts +1 -1
  17. package/lib/exercises/math/dataRepresentations/index.d.ts.map +1 -1
  18. package/lib/exercises/math/dataRepresentations/index.js +5 -1
  19. package/lib/exercises/math/dataRepresentations/scatterPlot/index.d.ts +0 -2
  20. package/lib/exercises/math/dataRepresentations/scatterPlot/index.d.ts.map +1 -1
  21. package/lib/exercises/math/dataRepresentations/scatterPlot/index.js +2 -2
  22. package/lib/exercises/math/derivation/derivative/trigo/index.d.ts +2 -0
  23. package/lib/exercises/math/derivation/derivative/trigo/index.d.ts.map +1 -1
  24. package/lib/exercises/math/derivation/derivative/trigo/index.js +3 -0
  25. package/lib/exercises/math/derivation/problems/index.d.ts +0 -1
  26. package/lib/exercises/math/derivation/problems/index.d.ts.map +1 -1
  27. package/lib/exercises/math/derivation/problems/index.js +1 -1
  28. package/lib/exercises/math/derivation/problems/problemMovementOnLineFindSpeedAtPoint.d.ts.map +1 -1
  29. package/lib/exercises/math/derivation/problems/problemMovementOnLineFindSpeedAtPoint.js +5 -2
  30. package/lib/exercises/math/derivation/tangent/index.d.ts +0 -1
  31. package/lib/exercises/math/derivation/tangent/index.d.ts.map +1 -1
  32. package/lib/exercises/math/derivation/tangent/index.js +1 -1
  33. package/lib/exercises/math/derivation/variations/index.d.ts +1 -1
  34. package/lib/exercises/math/derivation/variations/index.d.ts.map +1 -1
  35. package/lib/exercises/math/derivation/variations/index.js +2 -1
  36. package/lib/exercises/math/derivation/variations/signVarTableAffinePlusCXLogX.d.ts +10 -0
  37. package/lib/exercises/math/derivation/variations/signVarTableAffinePlusCXLogX.d.ts.map +1 -0
  38. package/lib/exercises/math/derivation/variations/signVarTableAffinePlusCXLogX.js +222 -0
  39. package/lib/exercises/math/derivation/variations/signVarTableProductFExp.js +1 -1
  40. package/lib/exercises/math/derivation/variations/signVarTableQuotientFExp.js +1 -1
  41. package/lib/exercises/math/functions/affines/index.d.ts +5 -0
  42. package/lib/exercises/math/functions/affines/index.d.ts.map +1 -1
  43. package/lib/exercises/math/functions/affines/index.js +5 -0
  44. package/lib/exercises/math/functions/integral/index.d.ts +1 -0
  45. package/lib/exercises/math/functions/integral/index.d.ts.map +1 -1
  46. package/lib/exercises/math/functions/integral/index.js +1 -0
  47. package/lib/exercises/math/functions/integral/integralTrinomialOverX2.d.ts +12 -0
  48. package/lib/exercises/math/functions/integral/integralTrinomialOverX2.d.ts.map +1 -0
  49. package/lib/exercises/math/functions/integral/integralTrinomialOverX2.js +280 -0
  50. package/lib/exercises/math/functions/logarithm/findLargestPossibleDomainOfLogF.d.ts +13 -0
  51. package/lib/exercises/math/functions/logarithm/findLargestPossibleDomainOfLogF.d.ts.map +1 -0
  52. package/lib/exercises/math/functions/logarithm/findLargestPossibleDomainOfLogF.js +622 -0
  53. package/lib/exercises/math/functions/logarithm/index.d.ts +5 -0
  54. package/lib/exercises/math/functions/logarithm/index.d.ts.map +1 -1
  55. package/lib/exercises/math/functions/logarithm/index.js +5 -0
  56. package/lib/exercises/math/functions/logarithm/logEquationLnAXPlusBEqualsK.d.ts +10 -0
  57. package/lib/exercises/math/functions/logarithm/logEquationLnAXPlusBEqualsK.d.ts.map +1 -0
  58. package/lib/exercises/math/functions/logarithm/logEquationLnAXPlusBEqualsK.js +172 -0
  59. package/lib/exercises/math/functions/logarithm/logInequationIntegerSolutions.d.ts +11 -0
  60. package/lib/exercises/math/functions/logarithm/logInequationIntegerSolutions.d.ts.map +1 -0
  61. package/lib/exercises/math/functions/logarithm/logInequationIntegerSolutions.js +163 -0
  62. package/lib/exercises/math/functions/logarithm/logInequationLnAXPlusBInfK.d.ts +18 -0
  63. package/lib/exercises/math/functions/logarithm/logInequationLnAXPlusBInfK.d.ts.map +1 -0
  64. package/lib/exercises/math/functions/logarithm/logInequationLnAXPlusBInfK.js +330 -0
  65. package/lib/exercises/math/functions/logarithm/logLinearCombinationSimplifiying.d.ts +11 -0
  66. package/lib/exercises/math/functions/logarithm/logLinearCombinationSimplifiying.d.ts.map +1 -0
  67. package/lib/exercises/math/functions/logarithm/logLinearCombinationSimplifiying.js +185 -0
  68. package/lib/exercises/math/index.d.ts +1 -1
  69. package/lib/exercises/math/index.d.ts.map +1 -1
  70. package/lib/exercises/math/index.js +2 -1
  71. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.d.ts +15 -0
  72. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.d.ts.map +1 -0
  73. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.js +505 -0
  74. package/lib/exercises/math/integration/fromExpr/boundIntegralByBoundingFunctionWithAffinesFromExpr.d.ts +16 -0
  75. package/lib/exercises/math/integration/fromExpr/boundIntegralByBoundingFunctionWithAffinesFromExpr.d.ts.map +1 -0
  76. package/lib/exercises/math/integration/fromExpr/boundIntegralByBoundingFunctionWithAffinesFromExpr.js +433 -0
  77. package/lib/exercises/math/integration/fromExpr/boundIntegralByManualRectanglesMethodFromExpr.d.ts +15 -0
  78. package/lib/exercises/math/integration/fromExpr/boundIntegralByManualRectanglesMethodFromExpr.d.ts.map +1 -0
  79. package/lib/exercises/math/integration/fromExpr/boundIntegralByManualRectanglesMethodFromExpr.js +436 -0
  80. package/lib/exercises/math/integration/fromExpr/byParts/index.d.ts +3 -0
  81. package/lib/exercises/math/integration/fromExpr/byParts/index.d.ts.map +1 -0
  82. package/lib/exercises/math/integration/fromExpr/byParts/index.js +2 -0
  83. package/lib/exercises/math/integration/fromExpr/byParts/integralOfAXPlusBTimesExpKXByParts.d.ts +9 -0
  84. package/lib/exercises/math/integration/fromExpr/byParts/integralOfAXPlusBTimesExpKXByParts.d.ts.map +1 -0
  85. package/lib/exercises/math/integration/fromExpr/byParts/integralOfAXPlusBTimesExpKXByParts.js +234 -0
  86. package/lib/exercises/math/integration/fromExpr/byParts/integralOfPolynomialTimesLogXByParts.d.ts +12 -0
  87. package/lib/exercises/math/integration/fromExpr/byParts/integralOfPolynomialTimesLogXByParts.d.ts.map +1 -0
  88. package/lib/exercises/math/integration/fromExpr/byParts/integralOfPolynomialTimesLogXByParts.js +330 -0
  89. package/lib/exercises/math/integration/fromExpr/checkIsPrimitiveFromExpr.d.ts +15 -0
  90. package/lib/exercises/math/integration/fromExpr/checkIsPrimitiveFromExpr.d.ts.map +1 -0
  91. package/lib/exercises/math/integration/fromExpr/checkIsPrimitiveFromExpr.js +450 -0
  92. package/lib/exercises/math/integration/fromExpr/derivativeOfPrimitive.d.ts +10 -0
  93. package/lib/exercises/math/integration/fromExpr/derivativeOfPrimitive.d.ts.map +1 -0
  94. package/lib/exercises/math/integration/fromExpr/derivativeOfPrimitive.js +261 -0
  95. package/lib/exercises/math/integration/fromExpr/index.d.ts +8 -0
  96. package/lib/exercises/math/integration/fromExpr/index.d.ts.map +1 -0
  97. package/lib/exercises/math/integration/fromExpr/index.js +8 -0
  98. package/lib/exercises/math/integration/fromExpr/integralFromExpr.d.ts +13 -0
  99. package/lib/exercises/math/integration/fromExpr/integralFromExpr.d.ts.map +1 -0
  100. package/lib/exercises/math/integration/fromExpr/integralFromExpr.js +359 -0
  101. package/lib/exercises/math/integration/fromExpr/meanValue/index.d.ts +2 -0
  102. package/lib/exercises/math/integration/fromExpr/meanValue/index.d.ts.map +1 -0
  103. package/lib/exercises/math/integration/fromExpr/meanValue/index.js +1 -0
  104. package/lib/exercises/math/integration/fromExpr/meanValue/meanValueOfTrinomFromIntegralFromExpr.d.ts +14 -0
  105. package/lib/exercises/math/integration/fromExpr/meanValue/meanValueOfTrinomFromIntegralFromExpr.d.ts.map +1 -0
  106. package/lib/exercises/math/integration/fromExpr/meanValue/meanValueOfTrinomFromIntegralFromExpr.js +429 -0
  107. package/lib/exercises/math/integration/fromGraph/boundIntegralByManipulatingAutomaticRectanglesMethodFromGraph.d.ts +10 -0
  108. package/lib/exercises/math/integration/fromGraph/boundIntegralByManipulatingAutomaticRectanglesMethodFromGraph.d.ts.map +1 -0
  109. package/lib/exercises/math/integration/fromGraph/boundIntegralByManipulatingAutomaticRectanglesMethodFromGraph.js +286 -0
  110. package/lib/exercises/math/integration/fromGraph/imageOfPrimitiveByManipulatingIntegralBoundsFromGraph.d.ts +9 -0
  111. package/lib/exercises/math/integration/fromGraph/imageOfPrimitiveByManipulatingIntegralBoundsFromGraph.d.ts.map +1 -0
  112. package/lib/exercises/math/integration/fromGraph/imageOfPrimitiveByManipulatingIntegralBoundsFromGraph.js +231 -0
  113. package/lib/exercises/math/integration/fromGraph/index.d.ts +7 -0
  114. package/lib/exercises/math/integration/fromGraph/index.d.ts.map +1 -0
  115. package/lib/exercises/math/integration/fromGraph/index.js +6 -0
  116. package/lib/exercises/math/integration/fromGraph/integralOfAffineFromExprByComputingArea.d.ts +15 -0
  117. package/lib/exercises/math/integration/fromGraph/integralOfAffineFromExprByComputingArea.d.ts.map +1 -0
  118. package/lib/exercises/math/integration/fromGraph/integralOfAffineFromExprByComputingArea.js +464 -0
  119. package/lib/exercises/math/integration/fromGraph/integralOfAffineFromGraph.d.ts +15 -0
  120. package/lib/exercises/math/integration/fromGraph/integralOfAffineFromGraph.d.ts.map +1 -0
  121. package/lib/exercises/math/integration/fromGraph/integralOfAffineFromGraph.js +493 -0
  122. package/lib/exercises/math/integration/fromGraph/integralOfPiecewiseAffineFromGraph.d.ts +18 -0
  123. package/lib/exercises/math/integration/fromGraph/integralOfPiecewiseAffineFromGraph.d.ts.map +1 -0
  124. package/lib/exercises/math/integration/fromGraph/integralOfPiecewiseAffineFromGraph.js +466 -0
  125. package/lib/exercises/math/integration/fromGraph/varTableOfPrimitiveFromGraph.d.ts +10 -0
  126. package/lib/exercises/math/integration/fromGraph/varTableOfPrimitiveFromGraph.d.ts.map +1 -0
  127. package/lib/exercises/math/integration/fromGraph/varTableOfPrimitiveFromGraph.js +192 -0
  128. package/lib/exercises/math/integration/index.d.ts +4 -0
  129. package/lib/exercises/math/integration/index.d.ts.map +1 -0
  130. package/lib/exercises/math/integration/index.js +3 -0
  131. package/lib/exercises/math/integration/integralOfPiecewiseFunctionByUsingComputedIntegrals.d.ts +14 -0
  132. package/lib/exercises/math/integration/integralOfPiecewiseFunctionByUsingComputedIntegrals.d.ts.map +1 -0
  133. package/lib/exercises/math/integration/integralOfPiecewiseFunctionByUsingComputedIntegrals.js +222 -0
  134. package/lib/exercises/math/limits/frac1XTimesALogXPlusBLimit.d.ts +8 -0
  135. package/lib/exercises/math/limits/frac1XTimesALogXPlusBLimit.d.ts.map +1 -0
  136. package/lib/exercises/math/limits/frac1XTimesALogXPlusBLimit.js +121 -0
  137. package/lib/exercises/math/limits/index.d.ts +3 -0
  138. package/lib/exercises/math/limits/index.d.ts.map +1 -1
  139. package/lib/exercises/math/limits/index.js +3 -0
  140. package/lib/exercises/math/limits/kLogXPlusTrinomLimit.d.ts +12 -0
  141. package/lib/exercises/math/limits/kLogXPlusTrinomLimit.d.ts.map +1 -0
  142. package/lib/exercises/math/limits/kLogXPlusTrinomLimit.js +224 -0
  143. package/lib/exercises/math/limits/logOfPolynomialLimit.d.ts +10 -0
  144. package/lib/exercises/math/limits/logOfPolynomialLimit.d.ts.map +1 -0
  145. package/lib/exercises/math/limits/logOfPolynomialLimit.js +154 -0
  146. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfLinearCombination.d.ts +12 -0
  147. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfLinearCombination.d.ts.map +1 -0
  148. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfLinearCombination.js +170 -0
  149. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfSumFromDice.d.ts +7 -0
  150. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfSumFromDice.d.ts.map +1 -0
  151. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfSumFromDice.js +163 -0
  152. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfSumFromProbaLaw.d.ts +14 -0
  153. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfSumFromProbaLaw.d.ts.map +1 -0
  154. package/lib/exercises/math/probaStat/basicProbas/expectedValueOfSumFromProbaLaw.js +150 -0
  155. package/lib/exercises/math/probaStat/basicProbas/index.d.ts +5 -0
  156. package/lib/exercises/math/probaStat/basicProbas/index.d.ts.map +1 -1
  157. package/lib/exercises/math/probaStat/basicProbas/index.js +5 -0
  158. package/lib/exercises/math/probaStat/basicProbas/varianceOfLinearCombination.d.ts +12 -0
  159. package/lib/exercises/math/probaStat/basicProbas/varianceOfLinearCombination.d.ts.map +1 -0
  160. package/lib/exercises/math/probaStat/basicProbas/varianceOfLinearCombination.js +193 -0
  161. package/lib/exercises/math/probaStat/basicProbas/varianceOfMean.d.ts +13 -0
  162. package/lib/exercises/math/probaStat/basicProbas/varianceOfMean.d.ts.map +1 -0
  163. package/lib/exercises/math/probaStat/basicProbas/varianceOfMean.js +171 -0
  164. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialExpectedValueFromSituation.d.ts +9 -0
  165. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialExpectedValueFromSituation.d.ts.map +1 -0
  166. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialExpectedValueFromSituation.js +125 -0
  167. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindParamsFromSituation.d.ts +9 -0
  168. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindParamsFromSituation.d.ts.map +1 -0
  169. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindParamsFromSituation.js +126 -0
  170. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindProbaOfAtLeastOneSuccessFromSituation.d.ts +8 -0
  171. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindProbaOfAtLeastOneSuccessFromSituation.d.ts.map +1 -0
  172. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindProbaOfAtLeastOneSuccessFromSituation.js +150 -0
  173. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindProbaOfXCompKFromSituation.d.ts +15 -0
  174. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindProbaOfXCompKFromSituation.d.ts.map +1 -0
  175. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindProbaOfXCompKFromSituation.js +386 -0
  176. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindThresholdForNFromSituation.d.ts +14 -0
  177. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindThresholdForNFromSituation.d.ts.map +1 -0
  178. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialFindThresholdForNFromSituation.js +248 -0
  179. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialSituations.d.ts +47 -0
  180. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialSituations.d.ts.map +1 -0
  181. package/lib/exercises/math/probaStat/binomial/fromSituation/binomialSituations.js +184 -0
  182. package/lib/exercises/math/probaStat/binomial/fromSituation/buildTreeBernoulliFromSituation.d.ts +9 -0
  183. package/lib/exercises/math/probaStat/binomial/fromSituation/buildTreeBernoulliFromSituation.d.ts.map +1 -0
  184. package/lib/exercises/math/probaStat/binomial/fromSituation/buildTreeBernoulliFromSituation.js +120 -0
  185. package/lib/exercises/math/probaStat/binomial/fromSituation/index.d.ts +7 -0
  186. package/lib/exercises/math/probaStat/binomial/fromSituation/index.d.ts.map +1 -0
  187. package/lib/exercises/math/probaStat/binomial/fromSituation/index.js +6 -0
  188. package/lib/exercises/math/probaStat/binomial/index.d.ts +1 -0
  189. package/lib/exercises/math/probaStat/binomial/index.d.ts.map +1 -1
  190. package/lib/exercises/math/probaStat/binomial/index.js +1 -0
  191. package/lib/exercises/math/probaStat/index.d.ts +1 -0
  192. package/lib/exercises/math/probaStat/index.d.ts.map +1 -1
  193. package/lib/exercises/math/probaStat/index.js +1 -0
  194. package/lib/exercises/math/probaStat/tchebychev/index.d.ts +5 -0
  195. package/lib/exercises/math/probaStat/tchebychev/index.d.ts.map +1 -0
  196. package/lib/exercises/math/probaStat/tchebychev/index.js +4 -0
  197. package/lib/exercises/math/probaStat/tchebychev/mean/index.d.ts +4 -0
  198. package/lib/exercises/math/probaStat/tchebychev/mean/index.d.ts.map +1 -0
  199. package/lib/exercises/math/probaStat/tchebychev/mean/index.js +3 -0
  200. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevFindRadiusToMinorizeProbaOfMeanInCenteredInterval.d.ts +11 -0
  201. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevFindRadiusToMinorizeProbaOfMeanInCenteredInterval.d.ts.map +1 -0
  202. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevFindRadiusToMinorizeProbaOfMeanInCenteredInterval.js +273 -0
  203. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevMajorizeProbaOfMeanOutOfCenteredInterval.d.ts +14 -0
  204. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevMajorizeProbaOfMeanOutOfCenteredInterval.d.ts.map +1 -0
  205. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevMajorizeProbaOfMeanOutOfCenteredInterval.js +219 -0
  206. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevMinorizeProbaOfMeanInCenteredInterval.d.ts +14 -0
  207. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevMinorizeProbaOfMeanInCenteredInterval.d.ts.map +1 -0
  208. package/lib/exercises/math/probaStat/tchebychev/mean/tchebychevMinorizeProbaOfMeanInCenteredInterval.js +245 -0
  209. package/lib/exercises/math/probaStat/tchebychev/tchebychevFindRadiusToMajorizeProbaOfXOutOfCenteredInterval.d.ts +10 -0
  210. package/lib/exercises/math/probaStat/tchebychev/tchebychevFindRadiusToMajorizeProbaOfXOutOfCenteredInterval.d.ts.map +1 -0
  211. package/lib/exercises/math/probaStat/tchebychev/tchebychevFindRadiusToMajorizeProbaOfXOutOfCenteredInterval.js +191 -0
  212. package/lib/exercises/math/probaStat/tchebychev/tchebychevMajorizeProbaOfXOutOfCenteredInterval.d.ts +10 -0
  213. package/lib/exercises/math/probaStat/tchebychev/tchebychevMajorizeProbaOfXOutOfCenteredInterval.d.ts.map +1 -0
  214. package/lib/exercises/math/probaStat/tchebychev/tchebychevMajorizeProbaOfXOutOfCenteredInterval.js +135 -0
  215. package/lib/exercises/math/probaStat/tchebychev/tchebychevMinorizeProbaOfXInCenteredInterval.d.ts +10 -0
  216. package/lib/exercises/math/probaStat/tchebychev/tchebychevMinorizeProbaOfXInCenteredInterval.d.ts.map +1 -0
  217. package/lib/exercises/math/probaStat/tchebychev/tchebychevMinorizeProbaOfXInCenteredInterval.js +155 -0
  218. package/lib/exercises/math/probaStat/trees/buildTreeBernoulli.d.ts +9 -0
  219. package/lib/exercises/math/probaStat/trees/buildTreeBernoulli.d.ts.map +1 -0
  220. package/lib/exercises/math/probaStat/trees/buildTreeBernoulli.js +124 -0
  221. package/lib/exercises/math/probaStat/trees/index.d.ts +1 -0
  222. package/lib/exercises/math/probaStat/trees/index.d.ts.map +1 -1
  223. package/lib/exercises/math/probaStat/trees/index.js +1 -0
  224. package/lib/exercises/math/sequences/geometric/graph/index.d.ts +4 -0
  225. package/lib/exercises/math/sequences/geometric/graph/index.d.ts.map +1 -1
  226. package/lib/exercises/math/sequences/geometric/graph/index.js +4 -0
  227. package/lib/exercises/math/sequences/geometric/index.d.ts +2 -0
  228. package/lib/exercises/math/sequences/geometric/index.d.ts.map +1 -1
  229. package/lib/exercises/math/sequences/geometric/index.js +2 -0
  230. package/lib/exercises/math/sequences/geometric/situations/geometricFindRankFromSituation.d.ts.map +1 -1
  231. package/lib/exercises/math/sequences/geometric/situations/geometricFindRankFromSituation.js +71 -48
  232. package/lib/exercises/math/sequences/geometric/situations/index.d.ts +2 -1
  233. package/lib/exercises/math/sequences/geometric/situations/index.d.ts.map +1 -1
  234. package/lib/exercises/math/sequences/geometric/situations/index.js +2 -2
  235. package/lib/exercises/math/sets/index.d.ts +3 -0
  236. package/lib/exercises/math/sets/index.d.ts.map +1 -1
  237. package/lib/exercises/math/sets/index.js +3 -0
  238. package/lib/exercises/math/spaceGeometry/basis/index.d.ts +6 -0
  239. package/lib/exercises/math/spaceGeometry/basis/index.d.ts.map +1 -1
  240. package/lib/exercises/math/spaceGeometry/basis/index.js +6 -0
  241. package/lib/exercises/math/spaceGeometry/basis/lineLineRelativePositionsFromCubeOuterPoints.d.ts +11 -0
  242. package/lib/exercises/math/spaceGeometry/basis/lineLineRelativePositionsFromCubeOuterPoints.d.ts.map +1 -0
  243. package/lib/exercises/math/spaceGeometry/basis/lineLineRelativePositionsFromCubeOuterPoints.js +576 -0
  244. package/lib/exercises/math/spaceGeometry/basis/linePlaneRelativePositionsFromCubeOuterPoints.d.ts +11 -0
  245. package/lib/exercises/math/spaceGeometry/basis/linePlaneRelativePositionsFromCubeOuterPoints.d.ts.map +1 -0
  246. package/lib/exercises/math/spaceGeometry/basis/linePlaneRelativePositionsFromCubeOuterPoints.js +595 -0
  247. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystem.d.ts +11 -0
  248. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystem.d.ts.map +1 -0
  249. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystem.js +501 -0
  250. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystemFromVecPath.d.ts +16 -0
  251. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystemFromVecPath.d.ts.map +1 -0
  252. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystemFromVecPath.js +753 -0
  253. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfVectorInCubeCoordSystem.d.ts +12 -0
  254. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfVectorInCubeCoordSystem.d.ts.map +1 -0
  255. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfVectorInCubeCoordSystem.js +546 -0
  256. package/lib/exercises/math/spaceGeometry/basis/spaceVectorLinearCombinationFromCoords.d.ts +13 -0
  257. package/lib/exercises/math/spaceGeometry/basis/spaceVectorLinearCombinationFromCoords.d.ts.map +1 -0
  258. package/lib/exercises/math/spaceGeometry/basis/spaceVectorLinearCombinationFromCoords.js +233 -0
  259. package/lib/exercises/math/spaceGeometry/collinearity/checkAlignedSpacePointsFromCoords.d.ts +11 -0
  260. package/lib/exercises/math/spaceGeometry/collinearity/checkAlignedSpacePointsFromCoords.d.ts.map +1 -0
  261. package/lib/exercises/math/spaceGeometry/collinearity/checkAlignedSpacePointsFromCoords.js +192 -0
  262. package/lib/exercises/math/spaceGeometry/collinearity/checkAlignedSpacePointsFromVecPathsFromCubeOuterPoints.d.ts +15 -0
  263. package/lib/exercises/math/spaceGeometry/collinearity/checkAlignedSpacePointsFromVecPathsFromCubeOuterPoints.d.ts.map +1 -0
  264. package/lib/exercises/math/spaceGeometry/collinearity/checkAlignedSpacePointsFromVecPathsFromCubeOuterPoints.js +511 -0
  265. package/lib/exercises/math/spaceGeometry/collinearity/index.d.ts +3 -0
  266. package/lib/exercises/math/spaceGeometry/collinearity/index.d.ts.map +1 -0
  267. package/lib/exercises/math/spaceGeometry/collinearity/index.js +2 -0
  268. package/lib/exercises/math/spaceGeometry/index.d.ts +5 -0
  269. package/lib/exercises/math/spaceGeometry/index.d.ts.map +1 -1
  270. package/lib/exercises/math/spaceGeometry/index.js +5 -1
  271. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.d.ts +22 -0
  272. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.d.ts.map +1 -0
  273. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.js +366 -0
  274. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.d.ts +2 -0
  275. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.d.ts.map +1 -0
  276. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.js +2 -0
  277. package/lib/exercises/math/spaceGeometry/parametricLine/index.d.ts +3 -0
  278. package/lib/exercises/math/spaceGeometry/parametricLine/index.d.ts.map +1 -0
  279. package/lib/exercises/math/spaceGeometry/parametricLine/index.js +2 -0
  280. package/lib/exercises/math/spaceGeometry/parametricLine/lineLineRelativePositionsFromParametricLines.d.ts +14 -0
  281. package/lib/exercises/math/spaceGeometry/parametricLine/lineLineRelativePositionsFromParametricLines.d.ts.map +1 -0
  282. package/lib/exercises/math/spaceGeometry/parametricLine/lineLineRelativePositionsFromParametricLines.js +325 -0
  283. package/lib/exercises/math/spaceGeometry/parametricLine/parametricLineFromPointAndDirectionVector.d.ts +13 -0
  284. package/lib/exercises/math/spaceGeometry/parametricLine/parametricLineFromPointAndDirectionVector.d.ts.map +1 -0
  285. package/lib/exercises/math/spaceGeometry/parametricLine/parametricLineFromPointAndDirectionVector.js +181 -0
  286. package/lib/exercises/math/spaceGeometry/planes/checkIsPointBelongingToPlane.d.ts +10 -0
  287. package/lib/exercises/math/spaceGeometry/planes/checkIsPointBelongingToPlane.d.ts.map +1 -0
  288. package/lib/exercises/math/spaceGeometry/planes/checkIsPointBelongingToPlane.js +208 -0
  289. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlaneEquation.d.ts +8 -0
  290. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlaneEquation.d.ts.map +1 -0
  291. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlaneEquation.js +255 -0
  292. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.d.ts +10 -0
  293. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.d.ts.map +1 -0
  294. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.js +232 -0
  295. package/lib/exercises/math/spaceGeometry/planes/index.d.ts +5 -1
  296. package/lib/exercises/math/spaceGeometry/planes/index.d.ts.map +1 -1
  297. package/lib/exercises/math/spaceGeometry/planes/index.js +6 -2
  298. package/lib/exercises/math/spaceGeometry/planes/planeEquationFromNormalVectorAndContainedPoint.d.ts +10 -0
  299. package/lib/exercises/math/spaceGeometry/planes/planeEquationFromNormalVectorAndContainedPoint.d.ts.map +1 -0
  300. package/lib/exercises/math/spaceGeometry/planes/planeEquationFromNormalVectorAndContainedPoint.js +273 -0
  301. package/lib/exercises/math/spaceGeometry/planes/planeEquationFromOrthogonalLineAndContainedPoint.d.ts +12 -0
  302. package/lib/exercises/math/spaceGeometry/planes/planeEquationFromOrthogonalLineAndContainedPoint.d.ts.map +1 -0
  303. package/lib/exercises/math/spaceGeometry/planes/planeEquationFromOrthogonalLineAndContainedPoint.js +398 -0
  304. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.d.ts +22 -0
  305. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.d.ts.map +1 -0
  306. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.js +509 -0
  307. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.d.ts +8 -0
  308. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.d.ts.map +1 -0
  309. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.js +229 -0
  310. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsOrthogonalLinesFromParametricReps.d.ts +9 -0
  311. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsOrthogonalLinesFromParametricReps.d.ts.map +1 -0
  312. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsOrthogonalLinesFromParametricReps.js +200 -0
  313. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsOrthogonalSpaceVecsFromCoords.d.ts +8 -0
  314. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsOrthogonalSpaceVecsFromCoords.d.ts.map +1 -0
  315. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsOrthogonalSpaceVecsFromCoords.js +176 -0
  316. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsSpaceVecOrthogonalToPlaneFromCoords.d.ts +9 -0
  317. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsSpaceVecOrthogonalToPlaneFromCoords.d.ts.map +1 -0
  318. package/lib/exercises/math/spaceGeometry/scalarProduct/checkIsSpaceVecOrthogonalToPlaneFromCoords.js +263 -0
  319. package/lib/exercises/math/spaceGeometry/scalarProduct/index.d.ts +6 -0
  320. package/lib/exercises/math/spaceGeometry/scalarProduct/index.d.ts.map +1 -0
  321. package/lib/exercises/math/spaceGeometry/scalarProduct/index.js +6 -0
  322. package/lib/exercises/math/spaceGeometry/scalarProduct/scalarProductFromCubeOuterPoints.d.ts +14 -0
  323. package/lib/exercises/math/spaceGeometry/scalarProduct/scalarProductFromCubeOuterPoints.d.ts.map +1 -0
  324. package/lib/exercises/math/spaceGeometry/scalarProduct/scalarProductFromCubeOuterPoints.js +497 -0
  325. package/lib/exercises/math/spaceGeometry/scalarProduct/scalarProductFromSpacePointCoords.d.ts +8 -0
  326. package/lib/exercises/math/spaceGeometry/scalarProduct/scalarProductFromSpacePointCoords.d.ts.map +1 -0
  327. package/lib/exercises/math/spaceGeometry/scalarProduct/scalarProductFromSpacePointCoords.js +173 -0
  328. package/lib/exercises/math/spaceGeometry/vectors/findLinearDecompositionWrtCoplanarUVFromCoords.d.ts +10 -0
  329. package/lib/exercises/math/spaceGeometry/vectors/findLinearDecompositionWrtCoplanarUVFromCoords.d.ts.map +1 -0
  330. package/lib/exercises/math/spaceGeometry/vectors/findLinearDecompositionWrtCoplanarUVFromCoords.js +236 -0
  331. package/lib/exercises/math/spaceGeometry/vectors/index.d.ts +2 -0
  332. package/lib/exercises/math/spaceGeometry/vectors/index.d.ts.map +1 -1
  333. package/lib/exercises/math/spaceGeometry/vectors/index.js +2 -0
  334. package/lib/exercises/math/spaceGeometry/vectors/spacePointsDistanceCalculation.d.ts +8 -0
  335. package/lib/exercises/math/spaceGeometry/vectors/spacePointsDistanceCalculation.d.ts.map +1 -0
  336. package/lib/exercises/math/spaceGeometry/vectors/spacePointsDistanceCalculation.js +156 -0
  337. package/lib/exercises/math/trigonometry/functions/index.d.ts +1 -0
  338. package/lib/exercises/math/trigonometry/functions/index.d.ts.map +1 -1
  339. package/lib/exercises/math/trigonometry/functions/index.js +1 -0
  340. package/lib/exercises/utils/data/randomDataTable.d.ts +4 -1
  341. package/lib/exercises/utils/data/randomDataTable.d.ts.map +1 -1
  342. package/lib/exercises/utils/data/randomDataTable.js +1 -2
  343. package/lib/exercises/vea/varLineVEA.d.ts.map +1 -1
  344. package/lib/exercises/vea/varLineVEA.js +15 -2
  345. package/lib/exercises/vea/xTableLineVEA.d.ts.map +1 -1
  346. package/lib/exercises/vea/xTableLineVEA.js +13 -2
  347. package/lib/index.d.ts +539 -34
  348. package/lib/index.d.ts.map +1 -1
  349. package/lib/latexTester.d.ts.map +1 -1
  350. package/lib/latexTester.js +9 -7
  351. package/lib/math/geometry/parametricLine.d.ts +1 -1
  352. package/lib/math/geometry/parametricLine.d.ts.map +1 -1
  353. package/lib/math/geometry/parametricLine.js +2 -2
  354. package/lib/math/geometry/spaceVector.d.ts +11 -1
  355. package/lib/math/geometry/spaceVector.d.ts.map +1 -1
  356. package/lib/math/geometry/spaceVector.js +18 -4
  357. package/lib/math/probability/randomVariable.d.ts +3 -2
  358. package/lib/math/probability/randomVariable.d.ts.map +1 -1
  359. package/lib/math/probability/randomVariable.js +14 -8
  360. package/lib/math/systems/generalSystem.d.ts +3 -3
  361. package/lib/math/systems/generalSystem.d.ts.map +1 -1
  362. package/lib/math/systems/generalSystem.js +20 -17
  363. package/lib/math/utils/functions/functionComparison.d.ts.map +1 -1
  364. package/lib/math/utils/functions/functionComparison.js +2 -45
  365. package/lib/math/utils/functions/functionComposition.d.ts +3 -1
  366. package/lib/math/utils/functions/functionComposition.d.ts.map +1 -1
  367. package/lib/math/utils/functions/functionComposition.js +17 -17
  368. package/lib/math/utils/integration/rectanglesMethod.d.ts +6 -0
  369. package/lib/math/utils/integration/rectanglesMethod.d.ts.map +1 -0
  370. package/lib/math/utils/integration/rectanglesMethod.js +66 -0
  371. package/lib/math/utils/polynomial/polynomialUtils.d.ts +9 -1
  372. package/lib/math/utils/polynomial/polynomialUtils.d.ts.map +1 -1
  373. package/lib/math/utils/polynomial/polynomialUtils.js +66 -7
  374. package/lib/math/utils/sequences/situations/seqGeometricSituations.d.ts +34 -2
  375. package/lib/math/utils/sequences/situations/seqGeometricSituations.d.ts.map +1 -1
  376. package/lib/math/utils/sequences/situations/seqGeometricSituations.js +288 -47
  377. package/lib/tests/questionTest.d.ts.map +1 -1
  378. package/lib/tests/questionTest.js +5 -2
  379. package/lib/tests/singleExo.test.js +2 -2
  380. package/lib/tree/nodes/functions/cosNode.d.ts +1 -1
  381. package/lib/tree/nodes/functions/cosNode.d.ts.map +1 -1
  382. package/lib/tree/nodes/functions/cosNode.js +5 -2
  383. package/lib/tree/nodes/functions/factorialNode.d.ts +1 -0
  384. package/lib/tree/nodes/functions/factorialNode.d.ts.map +1 -1
  385. package/lib/tree/nodes/functions/factorialNode.js +16 -1
  386. package/lib/tree/nodes/functions/logNode.d.ts.map +1 -1
  387. package/lib/tree/nodes/functions/logNode.js +2 -1
  388. package/lib/tree/nodes/operators/binomialCoefficientNode.d.ts +2 -0
  389. package/lib/tree/nodes/operators/binomialCoefficientNode.d.ts.map +1 -1
  390. package/lib/tree/nodes/operators/binomialCoefficientNode.js +34 -0
  391. package/lib/tree/nodes/sets/discreteSetNode.d.ts.map +1 -1
  392. package/lib/tree/nodes/sets/discreteSetNode.js +1 -0
  393. package/lib/tree/utilities/nodeComparator.d.ts +7 -0
  394. package/lib/tree/utilities/nodeComparator.d.ts.map +1 -1
  395. package/lib/tree/utilities/nodeComparator.js +59 -0
  396. package/lib/tree/utilities/nodeInspector.d.ts +2 -0
  397. package/lib/tree/utilities/nodeInspector.d.ts.map +1 -1
  398. package/lib/tree/utilities/nodeInspector.js +23 -1
  399. package/lib/tree/utilities/nodeRewriter.d.ts.map +1 -1
  400. package/lib/tree/utilities/nodeRewriter.js +4 -1
  401. package/lib/types/keyIds.d.ts +1 -1
  402. package/lib/types/keyIds.d.ts.map +1 -1
  403. package/lib/utils/strings/splitAndKeep.d.ts +2 -0
  404. package/lib/utils/strings/splitAndKeep.d.ts.map +1 -0
  405. package/lib/utils/strings/splitAndKeep.js +13 -0
  406. package/package.json +1 -1
@@ -0,0 +1,497 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, GeneratorOptionTarget, GeneratorOptionType, propWhile, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { blueMain, colorWithOpacity, greenLight, orange, red, } from "../../../../geogebra/colors.js";
4
+ import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
5
+ import { SpacePoint, SpacePointConstructor, } from "../../../../math/geometry/spacePoint.js";
6
+ import { SpaceVector, SpaceVectorConstructor, } from "../../../../math/geometry/spaceVector.js";
7
+ import { randint } from "../../../../math/utils/random/randint.js";
8
+ import { NodeConstructor, } from "../../../../tree/nodes/nodeConstructor.js";
9
+ import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
10
+ import { isVariableNode, VariableNode, } from "../../../../tree/nodes/variables/variableNode.js";
11
+ import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
12
+ import { NodeComparator } from "../../../../tree/utilities/nodeComparator.js";
13
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
14
+ import { random, randomMany } from "../../../../utils/alea/random.js";
15
+ import { zip } from "../../../../utils/arrays/arrayZip.js";
16
+ import { permute } from "../../../../utils/arrays/permutations.js";
17
+ import { transpose } from "../../../../utils/arrays/transpose.js";
18
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
19
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
20
+ const getSpacePointForRelativeCoords = (spacePointOrigin, coords, arrVec) => {
21
+ return zip(coords.map((v) => v.toTree()), arrVec).reduce((acc, [nodeFactor, vec]) => {
22
+ const vecScaled = vec.times(nodeFactor);
23
+ return vecScaled.getEndPoint(acc);
24
+ }, spacePointOrigin);
25
+ };
26
+ const getPrismPoints = (spacePointOrigin, vecX, vecY, vecZ) => {
27
+ const isRightHanded = vecX.vetorialProduct(vecY).scalarProduct(vecZ).evaluate() > 0;
28
+ const [vecXRH, vecYRH, vecZRH] = isRightHanded
29
+ ? [vecX, vecY, vecZ]
30
+ : [vecY, vecX, vecZ];
31
+ const arrCoordsWrtCubeVecs = [
32
+ [0, 0, 0],
33
+ [0, 1, 0],
34
+ [1, 1, 0],
35
+ [1, 0, 0],
36
+ [0, 0, 1],
37
+ [0, 1, 1],
38
+ [1, 1, 1],
39
+ [1, 0, 1],
40
+ ];
41
+ return arrCoordsWrtCubeVecs.map((coords) => getSpacePointForRelativeCoords(spacePointOrigin, coords, [
42
+ vecXRH,
43
+ vecYRH,
44
+ vecZRH,
45
+ ]));
46
+ };
47
+ const createPointMeshForSide = (spacePointOrigin, u, v, nbH, nbW) => {
48
+ return [...Array(nbH + 1).keys()].map((i) => [...Array(nbW + 1).keys()].map((j) => {
49
+ const spaceVec = u.times(i.toTree()).add(v.times(j.toTree()));
50
+ const spacePointIJ = spaceVec.getEndPoint(spacePointOrigin);
51
+ return spacePointIJ;
52
+ }));
53
+ };
54
+ const createSegmentMeshForPointMesh = (pointMesh) => {
55
+ //horiz
56
+ const arrSegmentHoriz = pointMesh.map((rowOfPoints) => {
57
+ return [rowOfPoints[0], rowOfPoints[rowOfPoints.length - 1]];
58
+ });
59
+ //vert
60
+ const arrSegmentVert = transpose(pointMesh).map((columnOfPoints) => {
61
+ return [columnOfPoints[0], columnOfPoints[columnOfPoints.length - 1]];
62
+ });
63
+ return [...arrSegmentHoriz, ...arrSegmentVert];
64
+ };
65
+ const getAllPointMeshes = (spacePointOrigin, vecX, vecY, vecZ) => {
66
+ const isRightHanded = vecX.vetorialProduct(vecY).scalarProduct(vecZ).evaluate() > 0;
67
+ const [vecXRH, vecYRH, vecZRH] = isRightHanded
68
+ ? [vecX, vecY, vecZ]
69
+ : [vecY, vecX, vecZ];
70
+ const nbS = 2;
71
+ const nodeFactorS = (0.5).toTree();
72
+ return [
73
+ //z-
74
+ createPointMeshForSide(spacePointOrigin, vecXRH.times(nodeFactorS), vecYRH.times(nodeFactorS), nbS, nbS),
75
+ //z+
76
+ createPointMeshForSide(vecZRH.getEndPoint(spacePointOrigin, "NoName"), vecXRH.times(nodeFactorS), vecYRH.times(nodeFactorS), 2, 2),
77
+ //y-
78
+ createPointMeshForSide(spacePointOrigin, vecXRH.times(nodeFactorS), vecZRH.times(nodeFactorS), nbS, nbS),
79
+ //y+
80
+ createPointMeshForSide(vecYRH.getEndPoint(spacePointOrigin, "NoName"), vecXRH.times(nodeFactorS), vecZRH.times(nodeFactorS), 2, 2),
81
+ //x-
82
+ createPointMeshForSide(spacePointOrigin, vecYRH.times(nodeFactorS), vecZRH.times(nodeFactorS), nbS, nbS),
83
+ //x+
84
+ createPointMeshForSide(vecXRH.getEndPoint(spacePointOrigin, "NoName"), vecYRH.times(nodeFactorS), vecZRH.times(nodeFactorS), 2, 2),
85
+ ];
86
+ };
87
+ const getArrCoordsFrame = (arrSpacePoint) => {
88
+ const xMin = arrSpacePoint
89
+ .map((spacePoint) => spacePoint.x.evaluate())
90
+ .reduce((acc, x) => Math.min(acc, x));
91
+ const xMax = arrSpacePoint
92
+ .map((spacePoint) => spacePoint.x.evaluate())
93
+ .reduce((acc, x) => Math.max(acc, x));
94
+ const yMin = arrSpacePoint
95
+ .map((spacePoint) => spacePoint.y.evaluate())
96
+ .reduce((acc, x) => Math.min(acc, x));
97
+ const yMax = arrSpacePoint
98
+ .map((spacePoint) => spacePoint.y.evaluate())
99
+ .reduce((acc, x) => Math.max(acc, x));
100
+ const zMin = arrSpacePoint
101
+ .map((spacePoint) => spacePoint.z.evaluate())
102
+ .reduce((acc, x) => Math.min(acc, x));
103
+ const zMax = arrSpacePoint
104
+ .map((spacePoint) => spacePoint.z.evaluate())
105
+ .reduce((acc, x) => Math.max(acc, x));
106
+ return [xMin, xMax, yMin, yMax, zMin, zMax].map((v) => v * 1.1);
107
+ };
108
+ const getHydrated = (identifiers) => {
109
+ const { spacePointIds, nodeIdsSideLength } = identifiers;
110
+ const nodeSideLength = NodeConstructor.fromIdentifiers(nodeIdsSideLength);
111
+ const [A, B, C, D] = spacePointIds.map((spacePointIds) => SpacePointConstructor.fromIdentifiers(spacePointIds));
112
+ const spacePointCubeOrigin = SpacePointConstructor.fromScalars([0, 0, 0], "O");
113
+ const [vecXCube, vecYCube, vecZCube] = [
114
+ SpaceVectorConstructor.fromScalars([1, 0, 0], "i"),
115
+ SpaceVectorConstructor.fromScalars([0, 1, 0], "j"),
116
+ SpaceVectorConstructor.fromScalars([0, 0, 1], "k"),
117
+ ];
118
+ const [vecAB, vecCD] = [
119
+ [A, B],
120
+ [C, D],
121
+ ].map(([spacePointStart, spacePointEnd]) => SpaceVectorConstructor.fromPoints(spacePointStart, spacePointEnd).times(nodeSideLength));
122
+ return {
123
+ nodeSideLength,
124
+ A,
125
+ B,
126
+ C,
127
+ D,
128
+ spacePointCubeOrigin,
129
+ vecXCube,
130
+ vecYCube,
131
+ vecZCube,
132
+ vecAB,
133
+ vecCD,
134
+ };
135
+ };
136
+ const getInstruction = (identifiers) => {
137
+ const { nodeIdsSideLength } = identifiers;
138
+ const nodeSideLength = NodeConstructor.fromIdentifiers(nodeIdsSideLength);
139
+ return `Le cube représenté ci-dessous a pour côté $${nodeSideLength.toTex()}$.
140
+
141
+ Calculer $\\overrightarrow{AB} \\cdot \\overrightarrow{CD}$ dans la base $(\\overrightarrow{i},\\overrightarrow{j},\\overrightarrow{k})$.
142
+
143
+ *On pourra tourner la fenêtre graphique.*`;
144
+ };
145
+ const getAnswerNode = (identifiers) => {
146
+ const { vecAB, vecCD } = getHydrated(identifiers);
147
+ return vecAB.scalarProduct(vecCD);
148
+ };
149
+ const getAnswer = (identifiers) => {
150
+ const { nodeIdsSideLength } = identifiers;
151
+ const nodeSideLength = NodeConstructor.fromIdentifiers(nodeIdsSideLength);
152
+ return getAnswerNode(identifiers)
153
+ .simplify(isVariableNode(nodeSideLength)
154
+ ? { decimalToFractions: true }
155
+ : { towardsDistribute: true })
156
+ .toTex();
157
+ };
158
+ const getHint = () => {
159
+ return `Si les vecteurs apparaissent manifestement orthogonaux, le produit scalaire sera $0$.
160
+ Sinon, tu peux toujours déterminer les coordonnées de $\\overrightarrow{AB}$ et de $\\overrightarrow{CD}$ puis calculer le produit scalaire à partir des coordonnées.`;
161
+ };
162
+ const getCorrection = (identifiers) => {
163
+ const { vecAB, vecCD } = getHydrated(identifiers);
164
+ const nodeAnswer = getAnswerNode(identifiers);
165
+ return `On détermine les coordonnées de $\\overrightarrow{AB}$ et de $\\overrightarrow{CD}$ dans la base $(\\overrightarrow{i},\\overrightarrow{j},\\overrightarrow{k})$ :
166
+
167
+ ${alignTex([vecAB, vecCD].map((vec) => [vec.toTex(), "=", vec.toCoordsTex()]))}
168
+
169
+ On a donc :
170
+
171
+ ${alignTex([
172
+ ["\\overrightarrow{AB} \\cdot \\overrightarrow{CD}", "=", nodeAnswer.toTex()],
173
+ ["", "=", nodeAnswer.simplify({ towardsDistribute: true }).toTex()],
174
+ ])}
175
+
176
+ `;
177
+ };
178
+ const getCorrectionGGBOptions = (identifiers) => {
179
+ const { A, B, C, D, spacePointCubeOrigin, vecXCube, vecYCube, vecZCube } = getHydrated(identifiers);
180
+ const prismSpacePoints = getPrismPoints(spacePointCubeOrigin, vecXCube, vecYCube, vecZCube);
181
+ const arrSide = getAllPointMeshes(spacePointCubeOrigin, vecXCube, vecYCube, vecZCube);
182
+ const arrSegment = arrSide.flatMap(createSegmentMeshForPointMesh);
183
+ const arrBaseVec = [vecXCube, vecYCube, vecZCube];
184
+ const commands = [
185
+ //hide xOyPlane
186
+ `SetFilling(xOyPlane, 0)`,
187
+ //pretty names
188
+ ...[
189
+ //points
190
+ ...[A, B, C, D].flatMap((spacePoint) => spacePoint.toGGBCommand({
191
+ isFixed: true,
192
+ showLabel: true,
193
+ })),
194
+ ],
195
+ //no names
196
+ ...[
197
+ //prism
198
+ `Pri = Prism(${prismSpacePoints
199
+ .slice(0, 5)
200
+ .map((p) => p.toMathString())
201
+ .join(",")})`,
202
+ `SetColor(Pri, "${colorWithOpacity("#000000", 16)}")`,
203
+ `SetLineThickness(Pri, 1)`,
204
+ //segment meshes
205
+ ...arrSegment.flatMap(([spacePointStart, spacePointEnd], i) => {
206
+ return [
207
+ `S_${i} = Segment(${spacePointStart.toMathString()}, ${spacePointEnd.toMathString()})`,
208
+ `SetColor(S_${i}, "${colorWithOpacity("#BBBBBB", 37)}")`, //opacity is ignored
209
+ `SetLineThickness(S_${i}, 1)`,
210
+ ];
211
+ }),
212
+ //vec
213
+ ...arrBaseVec.flatMap((vec, i) => [
214
+ `v${i} = Vector(Point({${vec.x.toMathString()},${vec.y.toMathString()},${vec.z.toMathString()}}))`,
215
+ `SetColor(v${i}, ${(() => {
216
+ switch (i) {
217
+ case 0:
218
+ return `"${red}"`;
219
+ case 1:
220
+ return `"${greenLight}"`;
221
+ case 2:
222
+ return `"${blueMain}"`;
223
+ default:
224
+ return "#000000";
225
+ }
226
+ })()})`,
227
+ // `SetFilling(v${i}, 0.2)`, //not working :(
228
+ `SetCaption(v${i}, ${(() => {
229
+ switch (i) {
230
+ case 0:
231
+ return `"$\\overrightarrow{i}$"`;
232
+ case 1:
233
+ return `"$\\overrightarrow{j}$"`;
234
+ case 2:
235
+ return `"$\\overrightarrow{k}$"`;
236
+ default:
237
+ return "";
238
+ }
239
+ })()})`,
240
+ `ShowLabel(v${i}, true)`,
241
+ ]),
242
+ ...[
243
+ [A, B],
244
+ [C, D],
245
+ ].flatMap(([spacePointStart, spacePointEnd], i) => [
246
+ `vP${i} = Vector(${spacePointStart.toMathString()},${spacePointEnd.toMathString()})`,
247
+ `SetColor(vP${i}, "${orange}")`,
248
+ ]),
249
+ ],
250
+ ];
251
+ const ggb = new GeogebraConstructor({
252
+ commands,
253
+ is3D: true,
254
+ hideAxes: true,
255
+ viewDirectionVector: [-0.7, -1, -0.5],
256
+ });
257
+ return ggb.getOptions({
258
+ coords: getArrCoordsFrame(prismSpacePoints),
259
+ });
260
+ };
261
+ const getGGBOptions = (identifiers) => {
262
+ const { A, B, C, D, spacePointCubeOrigin, vecXCube, vecYCube, vecZCube } = getHydrated(identifiers);
263
+ const prismSpacePoints = getPrismPoints(spacePointCubeOrigin, vecXCube, vecYCube, vecZCube);
264
+ const arrSide = getAllPointMeshes(spacePointCubeOrigin, vecXCube, vecYCube, vecZCube);
265
+ const arrSegment = arrSide.flatMap(createSegmentMeshForPointMesh);
266
+ const arrBaseVec = [vecXCube, vecYCube, vecZCube];
267
+ const commands = [
268
+ //hide xOyPlane
269
+ `SetFilling(xOyPlane, 0)`,
270
+ //pretty names
271
+ ...[
272
+ //points
273
+ ...[A, B, C, D].flatMap((spacePoint) => spacePoint.toGGBCommand({
274
+ isFixed: true,
275
+ showLabel: true,
276
+ })),
277
+ ],
278
+ //no names
279
+ ...[
280
+ //prism
281
+ `Pri = Prism(${prismSpacePoints
282
+ .slice(0, 5)
283
+ .map((p) => p.toMathString())
284
+ .join(",")})`,
285
+ `SetColor(Pri, "${colorWithOpacity("#000000", 16)}")`,
286
+ `SetLineThickness(Pri, 1)`,
287
+ //segment meshes
288
+ ...arrSegment.flatMap(([spacePointStart, spacePointEnd], i) => {
289
+ return [
290
+ `S_${i} = Segment(${spacePointStart.toMathString()}, ${spacePointEnd.toMathString()})`,
291
+ `SetColor(S_${i}, "${colorWithOpacity("#BBBBBB", 37)}")`, //opacity is ignored
292
+ `SetLineThickness(S_${i}, 1)`,
293
+ ];
294
+ }),
295
+ //vec
296
+ ...arrBaseVec.flatMap((vec, i) => [
297
+ `v${i} = Vector(Point({${vec.x.toMathString()},${vec.y.toMathString()},${vec.z.toMathString()}}))`,
298
+ `SetColor(v${i}, ${(() => {
299
+ switch (i) {
300
+ case 0:
301
+ return `"${red}"`;
302
+ case 1:
303
+ return `"${greenLight}"`;
304
+ case 2:
305
+ return `"${blueMain}"`;
306
+ default:
307
+ return "#000000";
308
+ }
309
+ })()})`,
310
+ // `SetFilling(v${i}, 0.2)`, //not working :(
311
+ `SetCaption(v${i}, ${(() => {
312
+ switch (i) {
313
+ case 0:
314
+ return `"$\\overrightarrow{i}$"`;
315
+ case 1:
316
+ return `"$\\overrightarrow{j}$"`;
317
+ case 2:
318
+ return `"$\\overrightarrow{k}$"`;
319
+ default:
320
+ return "";
321
+ }
322
+ })()})`,
323
+ `ShowLabel(v${i}, true)`,
324
+ ]),
325
+ ],
326
+ ];
327
+ const ggb = new GeogebraConstructor({
328
+ commands,
329
+ is3D: true,
330
+ hideAxes: true,
331
+ viewDirectionVector: [-0.7, -1, -0.5],
332
+ });
333
+ return ggb.getOptions({
334
+ coords: getArrCoordsFrame(prismSpacePoints),
335
+ });
336
+ };
337
+ const getPropositions = (n, { answer, ...identifiers }) => {
338
+ const propositions = [];
339
+ addValidProp(propositions, answer);
340
+ const { vecAB, vecCD, nodeSideLength } = getHydrated(identifiers);
341
+ const [arrVec1, arrVec2] = [
342
+ [vecAB.x, vecAB.y, vecAB.z],
343
+ [vecCD.x, vecCD.y, vecCD.z],
344
+ ];
345
+ //student: error wrt vector coords order
346
+ {
347
+ zip(permute(arrVec1), permute(arrVec2)).forEach(([arrNodeVec1Wrong, arrNodeVec2Wrong]) => {
348
+ const [vec1Wrong, vec2Wrong] = [arrNodeVec1Wrong, arrNodeVec2Wrong].map(([nodeX, nodeY, nodeZ]) => new SpaceVector("vecWrong", nodeX, nodeY, nodeZ));
349
+ const nodeAnswerWrong = vec1Wrong
350
+ .scalarProduct(vec2Wrong)
351
+ .simplify({ towardsDistribute: true });
352
+ tryToAddWrongProp(propositions, nodeAnswerWrong.toTex());
353
+ });
354
+ }
355
+ propWhile(propositions, n, () => {
356
+ const identifiersWrong = createRandomIdentifiers(coinFlip(), nodeSideLength);
357
+ tryToAddWrongProp(propositions, getAnswer(identifiersWrong));
358
+ });
359
+ return shuffleProps(propositions, n);
360
+ };
361
+ const getKeys = (identifiers) => {
362
+ const { nodeIdsSideLength } = identifiers;
363
+ const nodeSideLength = NodeConstructor.fromIdentifiers(nodeIdsSideLength);
364
+ if (isVariableNode(nodeSideLength)) {
365
+ return [nodeSideLength.name];
366
+ }
367
+ else {
368
+ return [];
369
+ }
370
+ };
371
+ const isAnswerValid = (ans, { answer, ...identifiers }) => {
372
+ const nodeAnswer = getAnswerNode(identifiers);
373
+ try {
374
+ const nodeAns = parseAlgebraic(ans);
375
+ return (NodeComparator.isEqualViaSub(nodeAns, nodeAnswer) ||
376
+ NodeComparator.isEqualViaFrac(nodeAns, nodeAnswer));
377
+ }
378
+ catch (err) {
379
+ return handleVEAError(err);
380
+ }
381
+ };
382
+ const createRandomIdentifiers = (isIncludeMidpoints, nodeSideLength) => {
383
+ const arrSpacePointCubeVertex = [
384
+ //floor
385
+ [0, 0, 0],
386
+ [0, 1, 0],
387
+ [1, 1, 0],
388
+ [1, 0, 0],
389
+ //ceiling
390
+ [0, 0, 1],
391
+ [0, 1, 1],
392
+ [1, 1, 1],
393
+ [1, 0, 1],
394
+ ].map(([x, y, z], i) => {
395
+ const [nodeX, nodeY, nodeZ] = [x, y, z].map((v) => v.toTree());
396
+ return new SpacePoint(`P${i}`, nodeX, nodeY, nodeZ);
397
+ });
398
+ const [A, B, C, D] = zip("ABCD".split(""), randomMany([
399
+ ...arrSpacePointCubeVertex,
400
+ ...(isIncludeMidpoints
401
+ ? (() => {
402
+ const nodeZero = (0).toTree();
403
+ const nodeHalf = frac(1, 2);
404
+ const nodeOne = (1).toTree();
405
+ const arrSpacePointCubeMidpoint = [
406
+ //floor
407
+ [nodeZero, nodeHalf, nodeZero],
408
+ [nodeHalf, nodeOne, nodeZero],
409
+ [nodeOne, nodeHalf, nodeZero],
410
+ [nodeHalf, nodeZero, nodeZero],
411
+ //ceiling
412
+ [nodeZero, nodeHalf, nodeOne],
413
+ [nodeHalf, nodeOne, nodeOne],
414
+ [nodeOne, nodeHalf, nodeOne],
415
+ [nodeHalf, nodeZero, nodeOne],
416
+ ].map(([nodeX, nodeY, nodeZ], i) => new SpacePoint(`P${i}`, nodeX, nodeY, nodeZ));
417
+ return arrSpacePointCubeMidpoint;
418
+ })()
419
+ : []),
420
+ ], 4)).map(([name, spacePointRaw]) => new SpacePoint(name, spacePointRaw.x, spacePointRaw.y, spacePointRaw.z));
421
+ const identifiers = {
422
+ spacePointIds: [A, B, C, D].map((spacePoint) => spacePoint.toIdentifiers()),
423
+ nodeIdsSideLength: nodeSideLength.toIdentifiers(),
424
+ };
425
+ return identifiers;
426
+ };
427
+ const getScalarProductFromCubeOuterPointsQuestion = (optsIn) => {
428
+ const opts = optsIn ?? optsDefault;
429
+ const isIncludeMidpoints = opts.isIncludeMidpoints;
430
+ const typeSideLength = opts.typeSideLength;
431
+ const nodeSideLength = (() => {
432
+ switch (typeSideLength) {
433
+ case "entier":
434
+ return (2 * randint(1, 6)).toTree();
435
+ case "variable": {
436
+ const letter = random(["a", "b", "c"]);
437
+ return new VariableNode(letter);
438
+ }
439
+ default:
440
+ throw new Error("Unsupported typeSideLength: " + typeSideLength);
441
+ }
442
+ })();
443
+ const identifiers = createRandomIdentifiers(isIncludeMidpoints, nodeSideLength);
444
+ return getQuestionFromIdentifiers(identifiers);
445
+ };
446
+ const getQuestionFromIdentifiers = (identifiers) => {
447
+ const question = {
448
+ answer: getAnswer(identifiers),
449
+ instruction: getInstruction(identifiers),
450
+ answerFormat: "tex",
451
+ keys: getKeys(identifiers),
452
+ identifiers,
453
+ hint: getHint(identifiers),
454
+ correction: getCorrection(identifiers),
455
+ ggbOptions: getGGBOptions(identifiers),
456
+ correctionGgbOptions: getCorrectionGGBOptions(identifiers),
457
+ };
458
+ return question;
459
+ };
460
+ const optsDefault = {
461
+ typeSideLength: "entier",
462
+ isIncludeMidpoints: true,
463
+ };
464
+ const options = [
465
+ {
466
+ id: "typeSideLength",
467
+ label: "Type de longueur pour le côté du cube",
468
+ target: GeneratorOptionTarget.generation,
469
+ type: GeneratorOptionType.select,
470
+ values: ["entier", "variable"],
471
+ defaultValue: optsDefault.typeSideLength,
472
+ },
473
+ {
474
+ id: "isIncludeMidpoints",
475
+ label: "inclure les milieux des arêtes",
476
+ target: GeneratorOptionTarget.generation,
477
+ type: GeneratorOptionType.checkbox,
478
+ defaultValue: optsDefault.isIncludeMidpoints,
479
+ },
480
+ ];
481
+ export const scalarProductFromCubeOuterPoints = {
482
+ id: "scalarProductFromCubeOuterPoints",
483
+ label: "Calculer un produit scalaire, à partir des points d'un cube de côté donné",
484
+ isSingleStep: true,
485
+ generator: (nb, opts) => getDistinctQuestions(() => getScalarProductFromCubeOuterPointsQuestion(opts), nb),
486
+ options,
487
+ qcmTimer: 60,
488
+ freeTimer: 60,
489
+ isAnswerValid,
490
+ getPropositions,
491
+ subject: "Mathématiques",
492
+ hasGeogebra: true,
493
+ getQuestionFromIdentifiers,
494
+ getHint,
495
+ getCorrection,
496
+ hasHintAndCorrection: true,
497
+ };
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { SpacePointIdentifiers } from "../../../../math/geometry/spacePoint.js";
3
+ type Identifiers = {
4
+ spacePointIds: SpacePointIdentifiers[];
5
+ };
6
+ export declare const scalarProductFromSpacePointCoords: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=scalarProductFromSpacePointCoords.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalarProductFromSpacePointCoords.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/spaceGeometry/scalarProduct/scalarProductFromSpacePointCoords.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAkC3C,KAAK,WAAW,GAAG;IACjB,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACxC,CAAC;AAkNF,eAAO,MAAM,iCAAiC,EAAE,QAAQ,CAAC,WAAW,CAmBnE,CAAC"}
@@ -0,0 +1,173 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, propWhile, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { SpacePoint, SpacePointConstructor, } from "../../../../math/geometry/spacePoint.js";
4
+ import { SpaceVector } from "../../../../math/geometry/spaceVector.js";
5
+ import { randint } from "../../../../math/utils/random/randint.js";
6
+ import { substract } from "../../../../tree/nodes/operators/substractNode.js";
7
+ import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
8
+ import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
9
+ import { NodeComparator } from "../../../../tree/utilities/nodeComparator.js";
10
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
11
+ import { zip } from "../../../../utils/arrays/arrayZip.js";
12
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
13
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
14
+ const spaceVectorFromPointsRaw = (spacePointStart, spacePointEnd) => {
15
+ return new SpaceVector(`${spacePointStart.name}${spacePointEnd.name}`, substract(spacePointEnd.x, spacePointStart.x), substract(spacePointEnd.y, spacePointStart.y), substract(spacePointEnd.z, spacePointStart.z));
16
+ };
17
+ const simplifySpaceVector = (vec, opts = {}) => {
18
+ return new SpaceVector(vec.name, vec.x.simplify(opts), vec.y.simplify(opts), vec.z.simplify(opts));
19
+ };
20
+ const getHydrated = (identifiers) => {
21
+ const { spacePointIds } = identifiers;
22
+ const [A, B, C] = spacePointIds.map((spacePointIds) => SpacePointConstructor.fromIdentifiers(spacePointIds));
23
+ const [vecAB, vecAC] = [
24
+ [A, B],
25
+ [A, C],
26
+ ].map(([spacePointStart, spacePointEnd]) => spaceVectorFromPointsRaw(spacePointStart, spacePointEnd));
27
+ const [vecABSimplified, vecACSimplified] = [vecAB, vecAC].map((vec) => simplifySpaceVector(vec, { towardsDistribute: true }));
28
+ return {
29
+ A,
30
+ B,
31
+ C,
32
+ vecAB,
33
+ vecABSimplified,
34
+ vecAC,
35
+ vecACSimplified,
36
+ };
37
+ };
38
+ const getInstruction = (identifiers) => {
39
+ const { spacePointIds } = identifiers;
40
+ const [A, B, C] = spacePointIds.map((spacePointIds) => SpacePointConstructor.fromIdentifiers(spacePointIds));
41
+ return `Soient trois points $A$,$B$ et $C$ de coordonnées :
42
+
43
+ ${alignTex([A, B, C].map((spacePoint) => [spacePoint.toTexWithCoords()]))}
44
+
45
+ Calculer $\\overrightarrow{AB} \\cdot \\overrightarrow{AC}$.`;
46
+ };
47
+ const getAnswerNode = (identifiers) => {
48
+ const { vecABSimplified, vecACSimplified } = getHydrated(identifiers);
49
+ return vecABSimplified.scalarProduct(vecACSimplified);
50
+ };
51
+ const getAnswer = (identifiers) => {
52
+ return getAnswerNode(identifiers)
53
+ .simplify({ towardsDistribute: true })
54
+ .toTex();
55
+ };
56
+ const getHint = () => {
57
+ const vecU = new SpaceVector("u", new VariableNode("u_{x}"), new VariableNode("u_{y}"), new VariableNode("u_{z}"));
58
+ const vecV = new SpaceVector("v", new VariableNode("v_{x}"), new VariableNode("v_{y}"), new VariableNode("v_{z}"));
59
+ return `Soit $${vecU.toTex()}$ et $${vecV.toTex()}$ deux vecteurs tels que :
60
+
61
+ ${alignTex([vecU, vecV].map((vec) => [vec.toTexWithCoords()]))}
62
+
63
+ alors
64
+
65
+ $$
66
+ \\overrightarrow{AB} \\cdot \\overrightarrow{AC} = ${vecU
67
+ .scalarProduct(vecV)
68
+ .toTex()}
69
+ $$
70
+
71
+ `;
72
+ };
73
+ const getCorrection = (identifiers) => {
74
+ const { vecAB, vecAC, vecABSimplified, vecACSimplified } = getHydrated(identifiers);
75
+ const nodeAnswer = getAnswerNode(identifiers);
76
+ return `On a :
77
+
78
+ ${alignTex([
79
+ [vecAB, vecABSimplified],
80
+ [vecAC, vecACSimplified],
81
+ ].flatMap(([vec, vecSimplified]) => [
82
+ [vec.toTex(), "=", vec.toCoordsTex()],
83
+ ["", "=", vecSimplified.toCoordsTex()],
84
+ ]))}
85
+
86
+ Par conséquent :
87
+
88
+ ${alignTex([
89
+ [
90
+ "\\overrightarrow{AB} \\cdot \\overrightarrow{AC}",
91
+ "=",
92
+ nodeAnswer.toTex({ forceNoSimplification: true, forceTimesSign: true }),
93
+ ],
94
+ ["", "=", nodeAnswer.simplify({ towardsDistribute: true }).toTex()],
95
+ ])}
96
+
97
+ `;
98
+ };
99
+ const getPropositions = (n, { answer }) => {
100
+ const propositions = [];
101
+ addValidProp(propositions, answer);
102
+ propWhile(propositions, n, () => {
103
+ const identifiersWrong = createRandomIdentifiers();
104
+ tryToAddWrongProp(propositions, getAnswer(identifiersWrong));
105
+ });
106
+ return shuffleProps(propositions, n);
107
+ };
108
+ const getKeys = () => {
109
+ return ["semicolon"]; //pas gentil
110
+ };
111
+ const isAnswerValid = (ans, { answer, ...identifiers }) => {
112
+ const nodeAnswer = getAnswerNode(identifiers);
113
+ try {
114
+ const nodeAns = parseAlgebraic(ans);
115
+ return (NodeComparator.isEqualViaSub(nodeAns, nodeAnswer) ||
116
+ NodeComparator.isEqualViaFrac(nodeAns, nodeAnswer));
117
+ }
118
+ catch (err) {
119
+ return handleVEAError(err);
120
+ }
121
+ };
122
+ const createRandomIdentifiers = () => {
123
+ const funcRand1 = () => randint(-3, 4, coinFlip() ? [0] : []).toTree();
124
+ const funcRand2 = () => randint(-6, 7, coinFlip() ? [0] : []).toTree();
125
+ const funcRand3 = () => randint(-9, 10, coinFlip() ? [0] : []).toTree();
126
+ const [vecU, vecV] = zip(["u", "v"], [
127
+ [funcRand1, funcRand2, funcRand3],
128
+ [funcRand3, funcRand2, funcRand1],
129
+ ]).map(([name, [funcRandX, funcRandY, funcRandZ]]) => new SpaceVector(name, funcRandX(), funcRandY(), funcRandZ()));
130
+ const A = new SpacePoint("A", randint(-5, 6).toTree(), randint(-5, 6).toTree(), randint(-5, 6).toTree());
131
+ const [B, C] = [
132
+ ["B", vecU],
133
+ ["C", vecV],
134
+ ].map(([name, vec]) => {
135
+ const spacePointRaw = vec.getEndPoint(A);
136
+ return new SpacePoint(name, spacePointRaw.x, spacePointRaw.y, spacePointRaw.z);
137
+ });
138
+ const identifiers = {
139
+ spacePointIds: [A, B, C].map((vec) => new SpacePoint(vec.name, vec.x, vec.y, vec.z).toIdentifiers()),
140
+ };
141
+ return identifiers;
142
+ };
143
+ const getScalarProductFromSpacePointCoordsQuestion = () => {
144
+ const identifiers = createRandomIdentifiers();
145
+ return getQuestionFromIdentifiers(identifiers);
146
+ };
147
+ const getQuestionFromIdentifiers = (identifiers, _opts) => {
148
+ const question = {
149
+ answer: getAnswer(identifiers),
150
+ instruction: getInstruction(identifiers),
151
+ keys: getKeys(identifiers),
152
+ answerFormat: "tex",
153
+ identifiers,
154
+ hint: getHint(identifiers),
155
+ correction: getCorrection(identifiers),
156
+ };
157
+ return question;
158
+ };
159
+ export const scalarProductFromSpacePointCoords = {
160
+ id: "scalarProductFromSpacePointCoords",
161
+ label: "Calculer un produit scalaire $\\overrightarrow{AB} \\cdot \\overrightarrow{AC}$, à partir des coordonnées de $A$, $B$ et $C$",
162
+ isSingleStep: true,
163
+ generator: (nb, opts) => getDistinctQuestions(() => getScalarProductFromSpacePointCoordsQuestion(opts), nb),
164
+ qcmTimer: 60,
165
+ freeTimer: 60,
166
+ getPropositions,
167
+ isAnswerValid,
168
+ subject: "Mathématiques",
169
+ getQuestionFromIdentifiers,
170
+ getHint,
171
+ getCorrection,
172
+ hasHintAndCorrection: true,
173
+ };