exercices/6e/6N41-1.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { listeQuestionsToContenu, randint, combinaisonListes, pgcd, texFractionReduite, calcul, texteEnCouleurEtGras } from '../../modules/outils.js'
import { labyrinthe } from '../../modules/2d.js'
import { fraction } from '../../modules/fractions.js'
export const dateDeModifImportante = '05/10/2022' // Le nb de lignes et celui de colonnes du labyrinthe sont paramétrables.

export const titre = 'Parcourir un labyrinthe de fractions égales'

/**
 * @author Jean-Claude Lhote (remaniée par EE pour la prise en compte du nb de lignes et de colonnes du labyrinthe)
 * Publié le 11/12/2020
 * Ref : 6N41-1
 * Parcourir un labyrinthe de fractions en passant par des fractions égales.
 */
export const uuid = 'f8a4d'
export const ref = '6N41-1'
export default function ExerciceLabyrintheFractionsEgales () {
  Exercice.call(this)
  this.consigne = ''
  this.niveau = '6e'
  this.nbQuestions = 1
  this.nbQuestionsModifiable = false
  this.nbCols = 1
  this.nbColsCorr = 1
  this.pasDeVersionLatex = false
  this.pas_de_version_HMTL = false
  this.sup2 = 3
  this.sup = 10
  this.sup3 = 1
  this.sup4 = 1

  if (this.niveau === 'CM') {
    this.sup = 10
    this.sup2 = 3
  } else {
    this.sup = 13
    this.sup2 = 4
  }
  const tailleChiffre = 0.7
  this.nouvelleVersion = function () {
    this.listeCorrections = []
    this.listeQuestions = []
    this.autoCorrection = []
    const mesfractions = []
    let texte, texteCorr
    const nbL = this.sup3 === 1 ? randint(2, 8) : Math.max(2, this.sup3)
    const nbC = this.sup4 === 1 ? randint(3, 11 - nbL) : Math.max(3, this.sup4)
    const laby = labyrinthe({ taille: tailleChiffre, nbLignes: nbL, nbColonnes: nbC })
    laby.niveau = parseInt(this.sup2) // Le niveau (de 1 à 6=mélange) définit le nombre d'étapes
    const monchemin = laby.choisitChemin(laby.niveau) // On choisi un chemin
    laby.murs2d = laby.construitMurs(monchemin) // On construit le labyrinthe
    laby.chemin2d = laby.traceChemin(monchemin) // On trace le chemin solution
    const table = randint(1, 7) + 1
    let num = randint(1, 2 * table - 1)
    while (pgcd(num, table) !== 1) {
      num = randint(2, 2 * table - 1)
    }
    const maximum = parseInt(this.sup)
    //   this.consigne=`Trouver la sortie en ne passant que par les cases contenant un multiple de $${table}$.`
    texte = `${texteEnCouleurEtGras('Trouver la sortie en ne passant que par les cases contenant des fractions égales à ', 'black')}$${texFractionReduite(num, table)}$.<br>`
    // texteCorr = `${texteEnCouleurEtGras(`Voici le chemin en couleur et la sortie était le numéro $${2 - monchemin[monchemin.length - 1][1] + 1}$.`, 'black')}<br>`
    texteCorr = `${texteEnCouleurEtGras(`Voici le chemin en couleur et la sortie était le numéro $${nbL - monchemin[monchemin.length - 1][1]}$.`, 'black')}<br>`
    // Zone de construction du tableau de nombres : Si ils sont sur monchemin et seulement si, ils doivent vérifier la consigne
    let listeMultiples = []

    for (let i = 2; i <= maximum; i++) {
      listeMultiples.push(table * i)
    }
    listeMultiples = combinaisonListes(listeMultiples, nbC * nbL)
    for (let i = 0; i < nbC * nbL; i++) {
      mesfractions.push(fraction(calcul(num * listeMultiples[i] / table), listeMultiples[i]))
    }
    for (let i = 0; i < nbC * nbL; i++) {
      switch (randint(1, 3)) {
        case 1: mesfractions.push(fraction(listeMultiples[i], num * listeMultiples[i] / table))
          break
        case 2: mesfractions.push(fraction(calcul(num * listeMultiples[i] / table), listeMultiples[i] - table))
          break
        case 3: mesfractions.push(fraction(calcul(num * listeMultiples[i] / table), listeMultiples[i] - table))
          break
      }
    }

    // Le tableau de nombre étant fait, on place les objets nombres.
    laby.nombres2d = laby.placeNombres(monchemin, mesfractions.slice(0, nbC * nbL - 1), mesfractions.slice(nbC * nbL), tailleChiffre)
    const params = { xmin: -4, ymin: 0, xmax: 5 + 3 * nbC, ymax: 2 + 3 * nbL, pixelsParCm: 20, scale: 0.7 }
    texte += mathalea2d(params, laby.murs2d, laby.nombres2d)
    texteCorr += mathalea2d(params, laby.murs2d, laby.nombres2d, laby.chemin2d)
    this.listeQuestions.push(texte)
    this.listeCorrections.push(texteCorr)
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireNumerique = ['Facteur maximum']
  this.besoinFormulaire2Numerique = ['Niveau de rapidité', 6, '1 : Escargot\n2 : Tortue\n3 : Lièvre\n4 : Antilope\n5 : Guépard\n6 : Au hasard']
  this.besoinFormulaire3Numerique = ['Nombre de lignes du labyrinthe', 8, 'Entre 2 et 8\n1 si vous laissez le hasard décider']
  this.besoinFormulaire4Numerique = ['Nombre de colonnes du labyrinthe', 8, 'Entre 3 et 8\n1 si vous laissez le hasard décider']
}