exercices/4e/4C33-0.js

import Exercice from '../Exercice.js'
import { randint, combinaisonListes, listeQuestionsToContenu } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import { context } from '../../modules/context.js'
export const titre = 'Utiliser la notation puissance'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true // pour définir que l'exercice est exportable AMC
export const amcType = 'AMCOpen'

export const dateDePublication = '21/11/2021' // La date de publication initiale au format 'jj/mm/aaaa' pour affichage temporaire d'un tag

/**
 * Passer d'un produit à la notation puissance et inversement
 * @author Guillaume Valmont
 * Référence 4C33-0
*/
export const uuid = '1d078'
export const ref = '4C33-0'
export default function NotationPuissance () {
  Exercice.call(this)
  this.nbQuestions = 4

  this.besoinFormulaireNumerique = ['Type de calcul', 3, '1 : Écrire sous forme de produit\n2 : Écrire sous forme de puissance\n3 : Mélange'] // le paramètre sera numérique de valeur max 2 (le 2 en vert)
  this.sup = 1
  this.besoinFormulaire2Numerique = ['Exposant', 3, '1 : Positif\n2 : Négatif\n3 : Mélange']
  this.sup2 = 1

  this.nouvelleVersion = function () {
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []
    let listeTypeDeQuestions
    switch (this.sup) {
      case 1:
        this.consigne = 'Donner la signification des écritures suivantes.'
        listeTypeDeQuestions = ['produit']
        break
      case 2:
        this.consigne = 'Simplifier l\'écriture en utilisant la notation puissance.'
        listeTypeDeQuestions = ['puissance']
        break
      default:
        this.consigne = ''
        listeTypeDeQuestions = ['produit', 'puissance']
        break
    }
    listeTypeDeQuestions = combinaisonListes(listeTypeDeQuestions, this.nbQuestions)
    let listeSignesExposants
    switch (this.sup2) {
      case 1:
        listeSignesExposants = ['positif']
        break
      case 2:
        listeSignesExposants = ['négatif']
        break
      default:
        listeSignesExposants = ['positif', 'négatif']
        break
    }
    listeSignesExposants = combinaisonListes(listeSignesExposants, this.nbQuestions)
    const listeSignes = combinaisonListes(['', '-'], this.nbQuestions)
    const listeSignesMantisse = combinaisonListes(['', '-'], this.nbQuestions)
    for (let i = 0, texte, texteCorr, a, b, pl, pr, apl, apr, signeContraire, produit, produitAlt, puissance, puissances, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      this.autoCorrection[i] = {}
      a = randint(2, 10)
      if (listeSignesMantisse[i] === '-') a = -a
      if (listeTypeDeQuestions[i] === 'puissance') {
        b = randint(2, 8)
      } else {
        b = randint(0, 5)
      }
      if (a < 0) {
        pl = '('
        pr = ')'
        apl = ''
        apr = ''
      } else {
        pl = ''
        pr = ''
        apl = '('
        apr = ')'
      }
      listeSignes[i] === '-' ? signeContraire = '' : signeContraire = '-'
      if (listeSignesExposants[i] === 'négatif') {
        b = b * -1
      }
      puissance = `${listeSignes[i] + pl + a + pr}^{${b}}`
      puissances = []
      let exp
      b < 0 ? exp = `{${b}}` : exp = `${b}` // distinction importante pour comparer les chaînes de caractères en interactif
      puissances.push(`${listeSignes[i] + pl + a + pr}^${exp}`) // réponse de base
      b % 2 === 0 ? puissances.push(`${listeSignes[i] + apl + -a + apr}^${exp}`) : puissances.push(`${signeContraire + apl + -a + apr}^${exp}`) // si l'exposant est pair, on peut changer le signe de la mantisse sans changer le signe devant et s'il est impair, on peut changer les deux signes
      produit = `${pl + a + pr}`
      produitAlt = produit
      for (let j = 0; j < Math.abs(b) - 1; j++) {
        produit += `\\times${pl + a + pr}`
        produitAlt += `(${a})`
      }
      switch (listeTypeDeQuestions[i]) {
        case 'produit':
          if (this.sup === 3) {
            texte = `Donner la signification de $${puissance}$.`
          } else {
            texte = `$${puissance}$`
          }
          texteCorr = `$${puissance} = `
          if (b === 0) {
            texteCorr += listeSignes[i] + 1 + '$'
            setReponse(this, i, listeSignes[i] + 1, { formatInteractif: 'ignorerCasse' })
          } else if (b === 1) {
            if (listeSignes[i] === '') {
              pl = ''
              pr = ''
            }
            texteCorr += `${listeSignes[i] + pl + a + pr}$`
            setReponse(this, i, listeSignes[i] + pl + a + pr, { formatInteractif: 'ignorerCasse' })
          } else if (b > 1) {
            texteCorr += listeSignes[i] + produit + '$'
            setReponse(this, i, [listeSignes[i] + produit, listeSignes[i] + produitAlt], { formatInteractif: 'ignorerCasse' })
          } else if (b === -1) {
            texteCorr += `${listeSignes[i]}\\dfrac{1}{${a}}$`
            setReponse(this, i, `${listeSignes[i]}\\frac{1}{${a}}`, { formatInteractif: 'ignorerCasse' })
          } else if (b < -1) {
            texteCorr += `${listeSignes[i]}\\dfrac{1}{${produit}}$`
            setReponse(this, i, [`${listeSignes[i]}\\frac{1}{${produit}}`, `${listeSignes[i]}\\frac{1}{${produitAlt}}`], { formatInteractif: 'ignorerCasse' })
          }
          break
        case 'puissance':
          this.sup === 3 ? texte = 'Simplifier l\'écriture en utilisant la notation puissance : ' : texte = ''
          if (b < 0) {
            texte += `$${listeSignes[i]} \\dfrac{1}{${produit}}$`
            texteCorr = `$${listeSignes[i]} \\dfrac{1}{${produit}} = ${puissance}$`
          } else {
            texte += `$${listeSignes[i]} ${produit}$`
            texteCorr = `$${listeSignes[i]} ${produit} = ${puissance}$`
          }
          setReponse(this, i, puissances, { formatInteractif: 'ignorerCasse' })
          break
      }
      if (this.interactif) { // Si l'exercice est interactif
        if (listeTypeDeQuestions[i] === 'produit') texte += ajouteChampTexteMathLive(this, i, 'inline fixed-width-400')
        if (listeTypeDeQuestions[i] === 'puissance') texte += ajouteChampTexteMathLive(this, i, 'inline fixed-width-150')
      }
      if (context.isAmc) {
        this.autoCorrection[i].propositions = [{ statut: 1, sanscadre: true, texte: texteCorr }]
      }
      // Si la question n'a jamais été posée, on l'enregistre
      if (this.questionJamaisPosee(i, a, b, listeTypeDeQuestions[i], listeSignesExposants[i], listeSignes[i])) { // <- laisser le i et ajouter toutes les variables qui rendent les exercices différents (par exemple a, b, c et d)
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}