exercices/3e/3A12-1.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, combinaisonListesSansChangerOrdre, randint, texteEnCouleurEtGras, listeDesDiviseurs, sp, numAlpha, contraindreValeur } 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 = 'Résoudre des problèmes avec recherche de diviseurs communs'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCHybride'

/**
 * Description didactique de l'exercice
 * 3 problèmes : Trouver le nombre maximal de groupes, de bouquets ou de corbeilles
 * en cherchant le plus grand diviseur commun de deux nombres.
 * Donner ensuite la composition de chaque groupe, bouquet ou corbeille.
 * @author Laurence Candille et Jean-Claude Lhote (pour l'export AMC)
 * Référence 3A12-1
 * Date août 2021
*/
export const uuid = '8c05e'
export const ref = '3A12-1'
export default function NomQuelconqueDeLaFonctionQuiCreeExercice () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.consigne = ''
  this.nbQuestionsModifiable = true
  this.nbQuestions = 3
  this.nbCols = 2 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 2 // Uniquement pour la sortie LaTeX
  this.tailleDiaporama = 3 // Pour les exercices chronométrés. 50 par défaut pour les exercices avec du texte
  this.video = '' // Id YouTube ou url
  this.interactifType = 'mathLive'

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []

    let QuestionsDisponibles = [] // 3 problèmes différents
    let listeQuestions = []

    if (!this.sup) { // Si aucune liste n'est saisie
      QuestionsDisponibles = [1, 2, 3]
    } else {
      if (!isNaN(this.sup)) { // Si c'est un nombre c'est qu'il y a qu'un problème
        QuestionsDisponibles[0] = contraindreValeur(1, 3, parseInt(this.sup), 1)
      } else {
        QuestionsDisponibles = this.sup.split('-')// Sinon on créé un tableau à partir des valeurs séparées par des -
        // this.nbQuestions = QuestionsDisponibles.length
        for (let i = 0; i < QuestionsDisponibles.length; i++) { // on a un tableau avec des strings : ['1', '1', '2']
          QuestionsDisponibles[i] = contraindreValeur(1, 3, parseInt(QuestionsDisponibles[i]), 1) // parseInt en fait un tableau d'entiers
        }
      }
    }

    listeQuestions = combinaisonListesSansChangerOrdre(QuestionsDisponibles, this.nbQuestions)
    const nombrePremier = [2, 3, 5, 7, 11]

    for (let i = 0, texte, texteSansQuestions, texteA, texteB, texteC, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      const objet = randint(30, 39) // objet représente : le nombre max de bouquets, de corbeilles ou de groupes
      const a = randint(0, 4)
      const var1 = nombrePremier[a] // var 1 est le nbre d iris, de croissants ou de garçons
      const b = randint(0, 4, [a])
      const var2 = nombrePremier[b] // var 2 est le nbre de roses, de brioches ou de filles
      switch (listeQuestions[i]) {
        case 1:
          if (this.interactif && !context.isAmc) {
            texte = `Un fleuriste dispose de ${var1 * objet} iris et de ${var2 * objet} roses. <br>`
            texte += 'Il veut, en utilisant toutes ses fleurs, réaliser un maximum de bouquets '
            texte += 'contenant tous le même nombre diris et le même nombre de roses. <br>'
            texte += 'Donner le nombre maximal de bouquets que le fleuriste peut réaliser '
            texte += 'et la composition du bouquet.<br><br>'
            texteA = numAlpha(0) + `Nombre maximal de bouquets :${sp(20)}`
            texte += texteA
            texte += ajouteChampTexteMathLive(this, 3 * i, 'inline largeur25') + '<br><br>'
            texteCorr = numAlpha(0)
            texteCorr += `- Les diviseurs de ${var1 * objet} sont : ${listeDesDiviseurs(var1 * objet).join(', ')}.<br>`
            texteCorr += `${sp(2)}- Les diviseurs de ${var2 * objet} sont : ${listeDesDiviseurs(var2 * objet).join(', ')}.<br>`
            texteCorr += `${objet} est le plus grand nombre qui divise à la fois ${var1 * objet} et ${var2 * objet}.<br>`
            texteCorr += ' Le nombre maximal de bouquets est donc : ' + texteEnCouleurEtGras(`${objet}`) + '.<br><br>'
            setReponse(this, 3 * i, objet)

            texteB = numAlpha(1) + `Nombre d'iris dans chaque bouquet :${sp(8)}`
            texte += texteB
            texte += ajouteChampTexteMathLive(this, 3 * i + 1, 'inline largeur25') + '<br><br>'
            texteCorr += numAlpha(1) + ` $${var1 * objet} \\div ${objet} = ${var1}$<br>`
            texteCorr += 'Le nombre d\'iris dans chaque bouquet est :' + texteEnCouleurEtGras(` ${var1}`) + '.<br><br>'
            setReponse(this, 3 * i + 1, var1)

            texteC = numAlpha(2) + ' Nombre de roses dans chaque bouquet :'
            texte += texteC
            texte += ajouteChampTexteMathLive(this, 3 * i + 2, 'inline largeur25') + '<br>'
            texteCorr += numAlpha(2) + ` $${var2 * objet} \\div ${objet} = ${var2}$<br>`
            texteCorr += 'Le nombre de roses dans chaque bouquet est :' + texteEnCouleurEtGras(` ${var2}`) + '.<br><br>'
            setReponse(this, 3 * i + 2, var2)
          } else {
            texte = `Un fleuriste dispose de ${var1 * objet} iris et de ${var2 * objet} roses. <br>`
            texte += 'Il veut, en utilisant toutes ses fleurs, réaliser un maximum de bouquets '
            texte += 'contenant tous le même nombre d\'iris et le même nombre de roses. <br><br>'
            texteSansQuestions = texte
            texteA = numAlpha(0) + 'Quel est le nombre maximal de bouquets ?<br><br>'
            texte += texteA
            texteCorr = numAlpha(0)
            texteCorr += `- Les diviseurs de ${var1 * objet} sont : ${listeDesDiviseurs(var1 * objet).join(', ')}.<br>`
            texteCorr += `${sp(2)}- Les diviseurs de ${var2 * objet} sont : ${listeDesDiviseurs(var2 * objet).join(', ')}.<br>`
            texteCorr += `${objet} est le plus grand nombre qui divise à la fois ${var1 * objet} et ${var2 * objet}.<br>`
            texteCorr += ' Le nombre maximal de bouquets est donc : ' + texteEnCouleurEtGras(`${objet}`) + '.<br><br>'

            texteB = numAlpha(1) + 'Quel est le nombre d\'iris dans chaque bouquet ?<br><br>'
            texte += texteB
            texteCorr += numAlpha(1) + ` $${var1 * objet} \\div ${objet} = ${var1}$<br>`
            texteCorr += 'Le nombre d\'iris dans chaque bouquet est :' + texteEnCouleurEtGras(` ${var1}`) + '.<br><br>'

            texteC = numAlpha(2) + 'Quel est le nombre de roses dans chaque bouquet ?<br><br>'
            texte += texteC
            texteCorr += numAlpha(2) + ` $${var2 * objet} \\div ${objet} = ${var2}$<br>`
            texteCorr += 'Le nombre de roses dans chaque bouquet est :' + texteEnCouleurEtGras(` ${var2}`) + '.<br><br>'
          }
          break
        case 2:
          if (this.interactif && !context.isAmc) {
            texte = `Un professeur organise une sortie pédagogique au Futuroscope pour ses élèves de 3ème. Il est accompagné de ${var1 * objet} garçons et de ${var2 * objet} filles. <br>`
            texte += 'Il souhaite répartir tous les élèves en réalisant un maximum de groupes '
            texte += 'contenant tous le même nombre de garçons et le même nombre de filles. <br>'
            texte += 'Donner le nombre maximal de groupes que le professeurs peut réaliser '
            texte += 'et la composition de chaque groupe.<br><br>'
            texteA = numAlpha(0) + `Nombre maximal de groupes :${sp(26)}`
            texte += texteA
            texte += ajouteChampTexteMathLive(this, 3 * i, 'inline largeur25') + '<br><br>'
            texteCorr = numAlpha(0)
            texteCorr += `- Les diviseurs de ${var1 * objet} sont : ${listeDesDiviseurs(var1 * objet).join(', ')}.<br>`
            texteCorr += `${sp(2)}- Les diviseurs de ${var2 * objet} sont : ${listeDesDiviseurs(var2 * objet).join(', ')}.<br>`
            texteCorr += `${objet} est le plus grand nombre qui divise à la fois ${var1 * objet} et ${var2 * objet}.<br>`
            texteCorr += ' Le nombre maximal de groupes est donc : ' + texteEnCouleurEtGras(`${objet}`) + '.<br><br>'
            setReponse(this, 3 * i, objet)

            texteB = numAlpha(1) + 'Nombre de garçons dans chaque groupe :'
            texte += texteB
            texte += ajouteChampTexteMathLive(this, 3 * i + 1, 'inline largeur25') + '<br><br>'
            texteCorr += numAlpha(1) + ` $${var1 * objet} \\div ${objet} = ${var1}$<br>`
            texteCorr += 'Le nombre de garçons dans chaque groupe est :' + texteEnCouleurEtGras(` ${var1}`) + '.<br><br>'
            setReponse(this, 3 * i + 1, var1)

            texteC = numAlpha(2) + ` Nombre de filles dans chaque groupe :${sp(6)}`
            texte += texteC
            texte += ajouteChampTexteMathLive(this, 3 * i + 2, 'inline largeur25') + '<br>'
            texteCorr += numAlpha(2) + ` $${var2 * objet} \\div ${objet} = ${var2}$<br>`
            texteCorr += 'Le nombre de filles dans chaque groupe est :' + texteEnCouleurEtGras(` ${var2}`) + '.<br><br>'
            setReponse(this, 3 * i + 2, var2)
          } else {
            texte = `Un professeur organise une sortie pédagogique au Futuroscope pour ses élèves de 3ème. Il est accompagné de ${var1 * objet} garçons et de ${var2 * objet} filles. <br>`
            texte += 'Il souhaite répartir tous les élèves en réalisant un maximum de groupes '
            texte += 'contenant tous le même nombre de garçons et le même nombre de filles. <br><br>'
            texteSansQuestions = texte
            texteA = numAlpha(0) + 'Quel est le nombre maximal de groupes ?<br><br>'
            texte += texteA
            texteCorr = numAlpha(0)
            texteCorr += `- Les diviseurs de ${var1 * objet} sont : ${listeDesDiviseurs(var1 * objet).join(', ')}.<br>`
            texteCorr += `${sp(2)}- Les diviseurs de ${var2 * objet} sont : ${listeDesDiviseurs(var2 * objet).join(', ')}.<br>`
            texteCorr += `${objet} est le plus grand nombre qui divise à la fois ${var1 * objet} et ${var2 * objet}.<br>`
            texteCorr += ' Le nombre maximal de groupes est donc : ' + texteEnCouleurEtGras(`${objet}`) + '.<br><br>'

            texteB = numAlpha(1) + 'Quel est le nombre de garçons dans chaque groupe ?<br><br>'
            texte += texteB
            texteCorr += numAlpha(1) + ` $${var1 * objet} \\div ${objet} = ${var1}$<br>`
            texteCorr += 'Le nombre de garçons dans chaque groupe est :' + texteEnCouleurEtGras(` ${var1}`) + '.<br><br>'

            texteC = numAlpha(2) + 'Quel est le nombre de filles dans chaque groupe ?<br><br>'
            texte += texteC
            texteCorr += numAlpha(2) + ` $${var2 * objet} \\div ${objet} = ${var2}$<br>`
            texteCorr += 'Le nombre de filles dans chaque groupe est :' + texteEnCouleurEtGras(` ${var2}`) + '.<br><br>'
          }
          break
        default: // si un utilisateur saisit 4 ou une valeur erronée renvoie par défaut vers le prbme 3
          if (this.interactif && !context.isAmc) {
            texte = `Un boulanger dispose de ${var1 * objet} croissants et de ${var2 * objet} brioches. <br>`
            texte += 'Il veut, en utilisant toutes ses viennoiseries, réaliser un maximum de corbeilles '
            texte += 'contenant toutes le même nombre de croissants et le même nombre de brioches. <br>'
            texte += 'Donner le nombre maximal de corbeilles que le boulanger peut réaliser '
            texte += 'et la composition de chaque corbeille.<br><br>'
            texteA = numAlpha(0) + 'Nombre maximal de corbeilles :' + `${sp(30)}`
            texte += texteA
            texte += ajouteChampTexteMathLive(this, 3 * i, 'inline largeur25') + '<br><br>'
            texteCorr = numAlpha(0)
            texteCorr += `- Les diviseurs de ${var1 * objet} sont : ${listeDesDiviseurs(var1 * objet).join(', ')}.<br>`
            texteCorr += `${sp(2)};- Les diviseurs de ${var2 * objet} sont : ${listeDesDiviseurs(var2 * objet).join(', ')}.<br>`
            texteCorr += `${objet} est le plus grand nombre qui divise à la fois ${var1 * objet} et ${var2 * objet}.<br>`
            texteCorr += ' Le nombre maximal de corbeilles est donc : ' + texteEnCouleurEtGras(`${objet}`) + '.<br><br>'
            setReponse(this, 3 * i, objet)

            texteB = numAlpha(1) + 'Nombre de croissants dans chaque corbeille :'
            texte += texteB
            texte += ajouteChampTexteMathLive(this, 3 * i + 1, 'inline largeur25') + '<br><br>'
            texteCorr += numAlpha(1) + ` $${var1 * objet} \\div ${objet} = ${var1}$<br>`
            texteCorr += 'Le nombre de croissants dans chaque corbeille est :' + texteEnCouleurEtGras(` ${var1}`) + '.<br><br>'
            setReponse(this, 3 * i + 1, var1)

            texteC = numAlpha(2) + ` Nombre de brioches dans chaque corbeille :${sp(2)}`
            texte += texteC
            texte += ajouteChampTexteMathLive(this, 3 * i + 2, 'inline largeur25') + '<br>'
            texteCorr += numAlpha(2) + ` $${var2 * objet} \\div ${objet} = ${var2}$<br>`
            texteCorr += 'Le nombre de brioches dans chaque corbeille est :' + texteEnCouleurEtGras(` ${var2}`) + '.<br><br>'
            setReponse(this, 3 * i + 2, var2)
          } else {
            texte = `Un boulanger dispose de ${var1 * objet} croissants et de ${var2 * objet} brioches. <br>`
            texte += 'Il veut, en utilisant toutes ses viennoiseries, réaliser un maximum de corbeilles '
            texte += 'contenant toutes le même nombre de croissants et le même nombre de brioches. <br><br>'
            texteSansQuestions = texte
            texteA = numAlpha(0) + 'Quel est le nombre maximal de corbeilles ?<br><br>'
            texte += texteA
            texteCorr = numAlpha(0)
            texteCorr += `- Les diviseurs de ${var1 * objet} sont : ${listeDesDiviseurs(var1 * objet).join(', ')}.<br>`
            texteCorr += `${sp(2)}- Les diviseurs de ${var2 * objet} sont : ${listeDesDiviseurs(var2 * objet).join(', ')}.<br>`
            texteCorr += `${objet} est le plus grand nombre qui divise à la fois ${var1 * objet} et ${var2 * objet}.<br>`
            texteCorr += ' Le nombre maximal de corbeilles est donc : ' + texteEnCouleurEtGras(`${objet}`) + '.<br><br>'

            texteB = numAlpha(1) + 'Quel est le nombre de croissants dans chaque corbeille ?<br><br>'
            texte += texteB
            texteCorr += numAlpha(1) + ` $${var1 * objet} \\div ${objet} = ${var1}$<br>`
            texteCorr += 'Le nombre de croissants dans chaque corbeille est :' + texteEnCouleurEtGras(` ${var1}`) + '.<br><br>'

            texteC = numAlpha(2) + 'Quel est le nombre de brioches dans chaque corbeille ?<br><br>'
            texte += texteC
            texteCorr += numAlpha(2) + ` $${var2 * objet} \\div ${objet} = ${var2}$<br>`
            texteCorr += 'Le nombre de brioches dans chaque corbeille est :' + texteEnCouleurEtGras(` ${var2}`) + '.<br><br>'
          }
          break
      } // fin du switch
      if (this.questionJamaisPosee(i, var1, var2, objet)) {
        console.log(texteA, texteB, texteC)
        if (context.isAmc) {
          this.autoCorrection[i] = {
            enonce: '',
            enonceAvant: false,
            propositions: [
              {
                type: 'AMCNum',
                propositions: [{
                  texte: texteCorr,
                  statut: '',
                  reponse: {
                    texte: texteSansQuestions + '<br>' + texteA,
                    valeur: objet,
                    param: {
                      digits: 2,
                      decimals: 0,
                      signe: false,
                      approx: 0
                    }
                  }
                }]
              },
              {
                type: 'AMCNum',
                propositions: [{
                  texte: '',
                  statut: '',
                  reponse: {
                    texte: texteB,
                    valeur: var1,
                    param: {
                      digits: 2,
                      decimals: 0,
                      signe: false,
                      approx: 0
                    }
                  }
                }]
              },
              {
                type: 'AMCNum',
                propositions: [{
                  texte: '',
                  statut: '',
                  reponse: {
                    texte: texteC,
                    valeur: var2,
                    param: {
                      digits: 2,
                      decimals: 0,
                      signe: false,
                      approx: 0
                    }
                  }
                }]
              }
            ]
          }
        }
        // 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++
    } // fin du for

    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireTexte = ['Choix des problèmes', 'Nombres séparés par des tirets\n1 : Fleuriste\n2 : Professeur\n3 : Boulanger\n']
}