exercices/6e/6N11-4.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, shuffle, combinaisonListesSansChangerOrdre, texNombre, miseEnEvidence, texteEnCouleurEtGras } from '../../modules/outils.js'
export const titre = 'Ranger une liste de nombres entiers dans l\'ordre croissant ou décroissant'

/**
* * Ranger une liste de nombres dans l'odre croissant ou décroissant
* * 6N11-4
* @author Sébastien Lozano
*/

export const uuid = '3bba9'
export const ref = '6N11-4'
export default function RangerOrdreCroissantDecroissant () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.beta = false
  this.sup = 1
  if (this.beta) {
    this.nbQuestions = 2
  } else {
    this.nbQuestions = 2
  };

  // this.consigne = `Classer les nombres suivants dans l'ordre indiqué.`;

  this.nbCols = 1
  this.nbColsCorr = 1
  // this.nbQuestionsModifiable = false;
  context.isHtml ? this.spacing = 3 : this.spacing = 2
  context.isHtml ? this.spacingCorr = 2.5 : this.spacingCorr = 1.5

  let typesDeQuestionsDisponibles

  this.nouvelleVersion = function () {
    if (this.beta) {
      typesDeQuestionsDisponibles = [0, 1]
    } else {
      // typesDeQuestionsDisponibles = shuffle([choice([1,3]),choice([2,4]),0]);
      typesDeQuestionsDisponibles = [0, 1]
    };

    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []

    // let listeTypeDeQuestions  = combinaisonListes(typesDeQuestionsDisponibles,this.nbQuestions) // Tous les types de questions sont posées mais l'ordre diffère à chaque "cycle"
    const listeTypeDeQuestions = combinaisonListesSansChangerOrdre(typesDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posées --> à remettre comme ci dessus

    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // les chiffres
      const c1 = randint(1, 9)
      const c2 = randint(1, 9, [c1])
      const c3 = randint(1, 9, [c1, c2])
      const c4 = randint(1, 9, [c1, c2, c3])
      const c5 = randint(1, 9, [c1, c2, c3, c4])

      // pour les situations, autant de situations que de cas dans le switch !
      const situations = [
        { // case 0 -->
          ordre: 'croissant',
          symbole: `$${miseEnEvidence('<')}$`,
          n1: Number(c1.toString() + c2.toString() + c3.toString() + c4.toString() + c5.toString()),
          n2: Number(c1.toString() + c3.toString() + c2.toString() + c4.toString() + c5.toString()),
          n3: Number(c1.toString() + c2.toString() + c5.toString() + c4.toString() + c3.toString()),
          n4: Number(c1.toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString()),
          n5: Number('1'.toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString()),
          n6: Number(c1.toString() + c2.toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString())
        },
        { // case 1 -->
          ordre: 'décroissant',
          symbole: `$${miseEnEvidence('>')}$`,
          n1: Number(c1.toString() + c2.toString() + c3.toString() + c4.toString() + c5.toString()),
          n2: Number(c1.toString() + c3.toString() + c2.toString() + c4.toString() + c5.toString()),
          n3: Number(c1.toString() + c2.toString() + c5.toString() + c4.toString() + c3.toString()),
          n4: Number(c1.toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString()),
          n5: Number('1'.toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString()),
          n6: Number(c1.toString() + c2.toString() + randint(0, 9).toString() + randint(0, 9).toString() + randint(0, 9).toString())
        }
      ]

      // une fonction pour gérer l'ordre
      function myOrdre (ordre, tab) {
        tab.sort((a, b) => a - b)
        switch (ordre) {
          case 'croissant':
            return tab
          case 'décroissant':
            return tab.reverse()
        };
      };

      const enonces = []
      let nombres = []
      let nombresRanges = []
      for (let k = 0; k < situations.length; k++) {
        nombres = shuffle([situations[k].n1, situations[k].n2, situations[k].n3, situations[k].n4, situations[k].n5, situations[k].n6])
        nombresRanges = []
        nombres.forEach(element => {
          nombresRanges.push(element)
        })
        myOrdre(situations[k].ordre, nombresRanges)
        enonces.push({
          enonce: `Classer les nombres suivants dans l'ordre ${situations[k].ordre} :<br>
        $${texNombre(nombres[0])}$   ;   $${texNombre(nombres[1])}$   ;   $${texNombre(nombres[2])}$   ;   $${texNombre(nombres[3])}$   ;   $${texNombre(nombres[4])}$   ;   $${texNombre(nombres[5])}$          
        `,
          question: '',
          correction: `Les nombres rangés dans l'ordre ${texteEnCouleurEtGras(situations[k].ordre)} :<br>
        $${texNombre(nombresRanges[0])}$   ${situations[k].symbole}   $${texNombre(nombresRanges[1])}$   ${situations[k].symbole}   $${texNombre(nombresRanges[2])}$   ${situations[k].symbole}   $${texNombre(nombresRanges[3])}$   ${situations[k].symbole}   $${texNombre(nombresRanges[4])}$   ${situations[k].symbole}   $${texNombre(nombresRanges[5])}$
        `
        })
      };

      // autant de case que d'elements dans le tableau des situations
      switch (listeTypeDeQuestions[i]) {
        case 0:
          texte = `${enonces[0].enonce}`
          if (this.beta) {
            texte += '<br>'
            texte += `<br> =====CORRECTION======<br>${enonces[0].correction}`
            texte += '             '
            texteCorr = ''
          } else {
            texteCorr = `${enonces[0].correction}`
          };
          break
        case 1:
          texte = `${enonces[1].enonce}`
          if (this.beta) {
            texte += '<br>'
            texte += `<br> =====CORRECTION======<br>${enonces[1].correction}`
            texteCorr = ''
          } else {
            texteCorr = `${enonces[1].correction}`
          };
          break
      };

      if (this.listeQuestions.indexOf(texte) === -1) { // Si la question n'a jamais été posée, on en crée une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  // this.besoinFormulaireNumerique = ['Niveau de difficulté',2,"1 : Entiers naturels\n2 : Entiers relatifs"];
  // this.besoinFormulaire2CaseACocher = ["Avec des équations du second degré"];
};