exercices/CM/CM020.js

import Exercice from '../Exercice.js'
import { contraindreValeur, listeQuestionsToContenu } from '../../modules/outils.js'
import TrouverSolutionMathador from './_TrouverSolutionMathador.js'
export const titre = 'Générateur de compte est bon version semi-aléatoire'

/**
 * @author Jean-Claude Lhote
  * référence CM020
 * Dans cette version, il est possible de choisir 1,2,3,4 ou 5 nombres du tirage et de contraindre la cible entre deux valeurs
 */
export const uuid = 'fec06'
export const ref = 'CM020'
export default function LeCompteEstBonV4 () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.consigne =
    'Écrire un calcul égal au nombre cible en utilisant les 5 nombres, 4 opérations différentes et éventuellement des parenthèses.'
  this.nbQuestions = 1
  this.nbCols = 2
  this.nbColsCorr = 2
  this.sup = 1

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    let solutionMathador = []
    let tirage, min, max, texteCorr
    let minmax = []
    if (!this.sup2) {
      // Si rien n'est saisi
      min = 0
      max = 100
    } else {
      if (typeof this.sup2 === 'number') {
        // Si c'est un nombre c'est qu'il y a qu'une seule grandeur
        min = 0
        max = this.sup2
      } else {
        minmax = this.sup2.split('-') // Sinon on crée un tableau à partir des valeurs séparées par des -
        min = minmax[0]
        max = minmax[1]
      }
    }
    min = contraindreValeur(0, 100, parseInt(min), 50)
    max = contraindreValeur(min, 100, parseInt(max), 100)
    if (!this.sup) {
      // Si rien n'est saisi
      solutionMathador = TrouverSolutionMathador(min, max)
    } else {
      if (typeof this.sup === 'number') {
        // Si c'est un nombre c'est qu'il y a qu'une seule grandeur
        solutionMathador = TrouverSolutionMathador(min, max, this.sup)
      } else {
        tirage = this.sup.split('-') // Sinon on crée un tableau à partir des valeurs séparées par des -
        for (let i = 0; i < tirage.length; i++) tirage[i] = parseInt(tirage[i])
        solutionMathador = TrouverSolutionMathador(min, max, ...tirage)
      }
    }

    tirage = solutionMathador[0]
    const solution = solutionMathador[1]
    const expression = solutionMathador[3]

    const texte = `Le tirage est le suivant : $${tirage[0]}~;~${tirage[1]}~;~${tirage[2]}~;~${tirage[3]}~;~${tirage[4]}$ <br>La cible est : $${solution}$`
    texteCorr = `Pour le tirage $${tirage[0]}~;~${tirage[1]}~;~${tirage[2]}~;~${tirage[3]}~;~${tirage[4]}$ et pour la cible $${solution}$, la solution est : $${expression}=${solution}$ `
    texteCorr += `ou $${solutionMathador[4]}$.<br>`
    texteCorr += 'En effet : <br>'
    for (let i = 0; i < 4; i++) {
      texteCorr += `$${solutionMathador[2][i]}$<br>`
    }
    this.listeQuestions.push(texte)
    this.listeCorrections.push(texteCorr)

    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireTexte = [
    'Choix des nombres du tirage (de aucun à cinq)',
    'Nombres séparés par des tirets'
  ] // Texte, tooltip
  this.besoinFormulaire2Texte = [
    'Intervalle pour la cible (ou rien pour cible non contrainte)',
    'Minimum-Maximum (éviter de trop contraindre la cible, cela peut bloquer le programme)'
  ] // Texte, tooltip

  // this.besoinFormulaire2Numerique = ['Limite supérieure',100];
}