HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/noteLaCouleur-ZihiFghT.js.map
{"version":3,"file":"noteLaCouleur-ZihiFghT.js","sources":["../../src/modules/noteLaCouleur.js"],"sourcesContent":["/**\n * Classe NoteLaCouleur (objet Pion)\n * this.plateau est le tableau des couleurs de cases.\n * this.currentPos est {x,y} les coordonnées courantes du pion\n * this.currentOrientation est l'orientation courante du pion\n * this.codeScratch est le programme en code Latex du pion.\n * this.currentIndex est l'index qui parcourt le codeScratch...\n * this.nlc() retourne la couleur de la case sur laquelle est le pion\n * this.tesCoords(x,y) est une méthode qui dit si le point de coordonnées (x,y) est bien dans le plateau de jeu.\n * this.testInstruction(code) est une méthode qui dit si une instruction est valide (ne sort pas) et retourne un tableau\n * this.testSequence([...code]) est une méthode qui retourne true si la séquence d'instructions est valide.\n */\n\nimport { segment } from '../lib/2d/segmentsVecteurs.js'\nimport { texteParPositionEchelle } from '../lib/2d/textes.js'\nimport { ObjetMathalea2D } from './2dGeneralites.js'\nimport { avance, tournerD, tournerG } from './2dLutin.js'\nimport { randint } from './outils.js'\nimport { BoiteBuilder } from '../lib/2d/polygones.js'\n\nclass NoteLaCouleur {\n  constructor ({\n    x = 15, y = 15, orientation = 90, plateau = [], relatif = true, nx = 16, ny = 12, pas = 30\n  }) {\n    this.plateauNLC = plateau\n    this.currentPos = { x, y }\n    this.currentOrientation = orientation\n    this.codeScratch = ''\n    this.currentIndex = 0\n    this.relatif = relatif\n    this.pas = pas\n    this.nx = nx\n    this.ny = ny\n    this.nlc = function () {\n      return this.plateauNLC[Math.ceil(((this.relatif ? (this.ny - 1) * this.pas >> 1 : (this.ny - 1) * this.pas) - this.currentPos.y) / this.pas)][Math.ceil(((this.relatif ? (this.nx - 1) * this.pas >> 1 : -this.pas >> 1) + this.currentPos.x) / this.pas)]\n    }\n    this.testCoords = function (x, y) {\n      if (x < (this.relatif ? (1 - this.nx) * this.pas >> 1 : this.pas >> 1) || x > (this.relatif ? this.nx * this.pas >> 1 : (this.nx - 0.5) * this.pas) || y < (this.relatif ? (1 - this.ny) * this.pas >> 1 : this.pas >> 1) || y > (this.relatif ? this.ny * this.pas >> 1 : (this.ny - 0.5) * this.pas)) return false\n      return true\n    }\n    /**\n         * méthode pour tester une instruction : retourne un tableau dont le premier élément indique si l'instruction est valide.\n         * c'est à dire qu'elle n'entraine pas une sortie de plateau.\n         * true -> l'instruction maintient le lutin sur le plateau\n         * false -> l'instruction le fait sortir du plateau\n         * Les autres éléments du tableau sont dans cet ordre :\n         * - les positions x et y du pion après l'instruction\n         * - son orientation après l'instruction\n         * - le code Latex de l'instruction\n         */\n    this.testInstruction = function (code, lutin) {\n      const avancepion = function (d, x, y, s) {\n        switch (s) {\n          case 0:\n          case 360:\n            y += d\n            break\n          case 90:\n          case -270:\n            x += d\n            break\n          case 180:\n          case -180:\n            y -= d\n            break\n          case 270:\n          case -90:\n            x -= d\n            break\n        }\n        return [x, y]\n      }\n      let x = this.currentPos.x\n      let y = this.currentPos.y\n      let orientation = this.currentOrientation\n      let latex\n      switch (code) {\n        case 'AV20':\n          [x, y] = avancepion(20, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{20} pas}'\n          if (lutin !== undefined) {\n            avance(20, lutin)\n          }\n          break\n        case 'AV30':\n          [x, y] = avancepion(30, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{30} pas}'\n          if (lutin !== undefined) {\n            avance(30, lutin)\n          }\n          break\n        case 'AV40':\n          [x, y] = avancepion(40, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{40} pas}'\n          if (lutin !== undefined) {\n            avance(40, lutin)\n          }\n          break\n        case 'AV60':\n          [x, y] = avancepion(60, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{60} pas}'\n          if (lutin !== undefined) {\n            avance(60, lutin)\n          }\n          break\n        case 'AV80':\n          [x, y] = avancepion(80, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{80} pas}'\n          if (lutin !== undefined) {\n            avance(80, lutin)\n          }\n          break\n        case 'AV90':\n          [x, y] = avancepion(90, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{90} pas}'\n          if (lutin !== undefined) {\n            avance(90, lutin)\n          }\n          break\n        case 'AV100':\n          [x, y] = avancepion(100, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{100} pas}'\n          if (lutin !== undefined) {\n            avance(100, lutin)\n          }\n          break\n        case 'AV120':\n          [x, y] = avancepion(120, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{120} pas}'\n          if (lutin !== undefined) {\n            avance(120, lutin)\n          }\n          break\n        case 'AV150':\n          [x, y] = avancepion(150, x, y, orientation)\n          latex = '\\\\blockmove{avancer de \\\\ovalnum{150} pas}'\n          if (lutin !== undefined) {\n            avance(150, lutin)\n          }\n          break\n\n        case 'TD90':\n          if (orientation === 180) orientation = -90\n          else orientation += 90\n          latex = '\\\\blockmove{tourner \\\\turnright{} de \\\\ovalnum{90} degrés}'\n          if (lutin !== undefined) {\n            tournerD(90, lutin)\n          }\n          break\n        case 'TG90':\n          if (orientation === -90) orientation = 180\n          else orientation -= 90\n          latex = '\\\\blockmove{tourner \\\\turnleft{} de \\\\ovalnum{90} degrés}'\n          if (lutin !== undefined) {\n            tournerG(90, lutin)\n          }\n          break\n        case 'TD180':\n        case 'TG180':\n          if (orientation === 0) orientation = 180\n          else if (orientation === -90) orientation = 90\n          else if (orientation === 90) orientation = -90\n          else orientation = 0\n          latex = '\\\\blockmove{tourner \\\\turnright{} de \\\\ovalnum{180} degrés}'\n          if (lutin !== undefined) {\n            tournerD(180, lutin)\n          }\n          break\n        case 'NLC':\n          latex = '\\\\blocklist{Note la couleur}'\n          break\n      }\n      if (this.testCoords(x, y)) {\n        return [true, x, y, orientation, latex, lutin]\n      } else return [false, this.currentPos.x, this.currentPos.y, this.currentOrientation, latex, lutin]\n    }\n\n    /**\n         * méthode pour tester une séquence : retourne\n         *\n         * [true,x,y,orientation] si la séquence reste dans le jeu\n         * [false,x,y,orientation] en cas de sortie de plateau.\n         */\n    this.testSequence = function (codes) {\n      let sorti = false\n      let test\n      const pionfantome = noteLaCouleur({\n        x: 0,\n        y: 0,\n        orientation: 0,\n        plateau: this.plateauNLC,\n        relatif: this.relatif,\n        nx: this.nx,\n        ny: this.ny,\n        pas: this.pas\n      })\n      pionfantome.currentPos.x = this.currentPos.x\n      pionfantome.currentPos.y = this.currentPos.y\n      pionfantome.currentOrientation = this.currentOrientation\n      for (let i = 0; i < codes.length; i++) {\n        test = pionfantome.testInstruction(codes[i])\n        if (!test[0]) { // si le lutin est sorti du plateau pendant l'instruction\n          sorti = true\n          break\n        } else {\n          pionfantome.currentPos.x = test[1]\n          pionfantome.currentPos.y = test[2]\n          pionfantome.currentOrientation = test[3]\n        }\n      }\n      // si il est sorti, alors la séquence est false, sinon, elle est true.\n      return [!sorti, pionfantome.currentPos.x, pionfantome.currentPos.y, pionfantome.currentOrientation]\n    }\n    /**\n         *\n         * @param {number} repetitions\n         * @param {string[]} codes la séquence d'instructions à répéter\n         * @returns {boolean} true si la boucle n'a à aucun moment fait sortir le lutin du plateau, false sinon\n         */\n    this.testBoucle = function (repetitions, codes) {\n      let sortiboucle = false\n      let test\n      const pionfantome = noteLaCouleur({\n        x: 0,\n        y: 0,\n        orientation: 0,\n        plateau: this.plateauNLC,\n        relatif: this.relatif,\n        nx: this.nx,\n        ny: this.ny,\n        pas: this.pas\n      })\n      pionfantome.currentPos.x = this.currentPos.x\n      pionfantome.currentPos.y = this.currentPos.y\n      pionfantome.currentOrientation = this.currentOrientation\n      for (let i = 0; i < repetitions; i++) {\n        test = pionfantome.testSequence(codes)\n        if (!test[0]) { // si le lutin est sorti pendant la séquence alors la boucle n'est pas valide.\n          sortiboucle = true\n          break\n        } else { // il n'est pas sorti, on continue le test à partir de la nouvelle position\n          pionfantome.currentPos.x = test[1]\n          pionfantome.currentPos.y = test[2]\n          pionfantome.currentOrientation = test[3]\n        }\n      }\n      // Si il est sorti, alors on retourne false en premier argument, sinon, on retourne true.\n      return [!sortiboucle, pionfantome.currentPos.x, pionfantome.currentPos.y, pionfantome.currentOrientation]\n    }\n  }\n}\n\nexport function noteLaCouleur ({\n  x = 15,\n  y = 15,\n  orientation = 90,\n  plateau = [],\n  relatif = true,\n  nx = 16,\n  ny = 12,\n  pas = 30\n} = {}) {\n  return new NoteLaCouleur({ x, y, orientation, relatif, plateau, nx, ny, pas })\n}\n\nclass Plateau2dNLC {\n  constructor ({\n    type = 1, melange = false, scale = 0.5, relatif = true, pas = 30, nx = 16, ny = 12,\n    plateau = [\n      ['Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc'],\n      ['Blanc', 'Noir', 'Jaune', 'Bleu', 'Vert', 'Orange', 'Rouge', 'Orange', 'Noir', 'Jaune', 'Gris', 'Vert', 'Rose', 'Noir', 'Jaune', 'Blanc'],\n      ['Blanc', 'Rouge', 'Bleu', 'Orange', 'Jaune', 'Rose', 'Gris', 'Jaune', 'Rose', 'Gris', 'Jaune', 'Bleu', 'Rouge', 'Gris', 'Rouge', 'Blanc'],\n      ['Blanc', 'Rose', 'Vert', 'Gris', 'Rouge', 'Noir', 'Bleu', 'Vert', 'Noir', 'Vert', 'Bleu', 'Rose', 'Gris', 'Vert', 'Orange', 'Blanc'],\n      ['Blanc', 'Vert', 'Bleu', 'Rose', 'Vert', 'Bleu', 'Orange', 'Gris', 'Rouge', 'Orange', 'Jaune', 'Gris', 'Rouge', 'Rose', 'Bleu', 'Blanc'],\n      ['Blanc', 'Noir', 'Orange', 'Rouge', 'Orange', 'Jaune', 'Rouge', 'Blanc', 'Blanc', 'Noir', 'Gris', 'Orange', 'Noir', 'Jaune', 'Rose', 'Blanc'],\n      ['Blanc', 'Rose', 'Gris', 'Noir', 'Bleu', 'Vert', 'Bleu', 'Blanc', 'Blanc', 'Rouge', 'Bleu', 'Gris', 'Vert', 'Rouge', 'Noir', 'Blanc'],\n      ['Blanc', 'Noir', 'Rouge', 'Rose', 'Vert', 'Orange', 'Rose', 'Noir', 'Orange', 'Vert', 'Jaune', 'Rose', 'Noir', 'Rose', 'Vert', 'Blanc'],\n      ['Blanc', 'Orange', 'Gris', 'Rouge', 'Jaune', 'Noir', 'Vert', 'Rouge', 'Rose', 'Noir', 'Bleu', 'Vert', 'Jaune', 'Orange', 'Gris', 'Blanc'],\n      ['Blanc', 'Bleu', 'Jaune', 'Orange', 'Vert', 'Gris', 'Jaune', 'Gris', 'Orange', 'Gris', 'Rose', 'Bleu', 'Rouge', 'Bleu', 'Orange', 'Blanc'],\n      ['Blanc', 'Rose', 'Bleu', 'Jaune', 'Rose', 'Orange', 'Rouge', 'Bleu', 'Noir', 'Jaune', 'Gris', 'Vert', 'Jaune', 'Noir', 'Rouge', 'Blanc'],\n      ['Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc']\n    ]\n\n  } = {}) {\n    ObjetMathalea2D.call(this, {})\n    this.relatif = relatif\n    this.pas = pas\n    this.type = 1\n    this.scale = scale\n    this.nx = nx\n    this.ny = ny\n    this.plateauNLC = plateau\n    if (melange) {\n      for (let i = 0, x1, x2, y1, y2, kase; i < 20; i++) {\n        y1 = randint(1, this.ny - 2)\n        y2 = randint(1, this.ny - 2, y1)\n        x1 = randint(1, this.nx - 2)\n        x2 = randint(1, this.nx - 2)\n        kase = this.plateauNLC[y1][x1] // case est un mot réservé\n        this.plateauNLC[y1][x1] = this.plateauNLC[y2][x2]\n        this.plateauNLC[y2][x2] = kase\n      }\n    }\n    this.traducColor = function (couleur) {\n      switch (couleur) {\n        case 'Blanc':\n          return 'white'\n        case 'Bleu':\n          return 'DodgerBlue'\n        case 'Noir':\n          return 'black'\n        case 'Rouge':\n          return 'red'\n        case 'Jaune':\n          return 'yellow'\n        case 'Rose':\n          return 'HotPink'\n        case 'Vert':\n          return 'green'\n        case 'Orange':\n          return 'DarkOrange'\n        case 'Gris':\n          return 'gray'\n      }\n    }\n    this.traducNum = function (couleur) {\n      switch (couleur) {\n        case 'Blanc':\n          return '0'\n        case 'Bleu':\n          return '3'\n        case 'Noir':\n          return '1'\n        case 'Rouge':\n          return '2'\n        case 'Jaune':\n          return '6'\n        case 'Rose':\n          return '5'\n        case 'Vert':\n          return '7'\n        case 'Orange':\n          return '4'\n        case 'Gris':\n          return '8'\n      }\n    }\n\n    const plateau2d = []\n    let b\n    for (let X = 0; X < this.nx; X++) {\n      for (let Y = 0; Y < this.ny; Y++) {\n        switch (type) {\n          case 1:// plateau couleur classique\n            b = new BoiteBuilder({\n              xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n              xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n            }).addColor({\n              color: 'black',\n              opacity: 0.8,\n              backgroudOpacity: 0.7,\n              colorBackground: this.traducColor(this.plateauNLC[ny - 1 - Y][X])\n            }).render()\n            break\n          case 2: // plateau couleur avec numéros\n            b = new BoiteBuilder({\n              xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n              xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n            })\n              .addColor({\n                color: 'black',\n                opacity: 0.8,\n                backgroudOpacity: 0.7,\n                colorBackground: this.traducColor(this.plateauNLC[ny - 1 - Y][X])\n              })\n              .addTextIn({\n                size: 1.2,\n                textIn: this.traducNum(this.plateauNLC[ny - 1 - Y][X]),\n                color: 'black',\n                opacity: 0.8\n              }).render()\n            break\n          case 3: // plateau N&B avec nom des couleurs\n            b = new BoiteBuilder({\n              xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n              xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n            }).addColor({\n              color: 'black',\n              opacity: 0.8,\n              backgroudOpacity: 1,\n              colorBackground: 'white'\n            }).addTextIn({\n              color: 'black',\n              opacity: 0.9,\n              textIn: this.plateauNLC[ny - 1 - Y][X],\n              size: 0.9\n            }).render()\n            break\n          case 4: // Plateau N&B avec numéros des couleurs\n            b = new BoiteBuilder({\n              xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n              xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n              yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n            }).addColor({\n              color: 'black',\n              backgroudOpacity: 1,\n              colorBackground: 'white',\n              opacity: 0.8\n            }).addTextIn({\n              size: 1.2,\n              color: 'black',\n              opacity: 0.9,\n              textIn: this.traducNum(this.plateauNLC[ny - 1 - Y][X])\n            }).render()\n            break\n        }\n\n        plateau2d.push(b)\n      }\n    }\n    if (this.relatif) plateau2d.push(texteParPositionEchelle(`-${this.pas}`, -1.6, -0.4, 'milieu', 'black', 1.2, 'middle', true, scale))\n    plateau2d.push(texteParPositionEchelle(`${this.pas}`, 1.5, -0.4, 'milieu', 'black', 1.2, 'middle', true, scale))\n    plateau2d.push(texteParPositionEchelle('0', -0.3, -0.4, 'milieu', 'black', 1.2, 'middle', true, scale))\n    if (this.relatif) plateau2d.push(texteParPositionEchelle(`-${this.pas}`, -0.5, -1.5, 'milieu', 'black', 1.2, 'middle', true, scale))\n    plateau2d.push(texteParPositionEchelle(`${this.pas}`, -0.5, 1.5, 'milieu', 'black', 1.2, 'middle', true, scale))\n    plateau2d.push(texteParPositionEchelle('x', this.nx * (this.relatif ? 0.75 : 1.5) + 0.7, -(this.relatif ? 0.6 : 0.6), 'milieu', 'purple', 1.2, 'middle', true, scale))\n    plateau2d.push(texteParPositionEchelle('y', -0.4, this.ny * (this.relatif ? 0.75 : 1.5) + 0.7, 'milieu', 'purple', 1.2, 'middle', true, scale))\n    if (this.relatif) {\n      plateau2d.push(texteParPositionEchelle('+', (this.nx >> 1) * 1.5 + 0.8, 0, 'milieu', 'purple', 1.2, 'middle', true, scale))\n      plateau2d.push(texteParPositionEchelle('-', -(this.nx >> 1) * 1.5 - 0.5, 0.2, 'milieu', 'purple', 1.2, 'middle', true, scale))\n      plateau2d.push(texteParPositionEchelle('+', 0, (this.ny >> 1) * 1.5 + 0.8, 'milieu', 'purple', 1.2, 'middle', true, scale))\n      plateau2d.push(texteParPositionEchelle('-', 0, -(this.ny >> 1) * 1.5 - 0.5, 'milieu', 'purple', 1.2, 'middle', true, scale))\n    }\n    const flechey = segment(0, (this.ny >> 1) * (this.relatif ? -1.5 : 0), 0, (this.ny >> 1) * (this.relatif ? 1.5 : 3) + 0.5, 'purple')\n    flechey.styleExtremites = '->'\n    const flechex = segment((this.nx >> 1) * (this.relatif ? -1.5 : 0), 0, (this.nx >> 1) * (this.relatif ? 1.5 : 3) + 0.5, 0, 'purple')\n    flechex.styleExtremites = '->'\n    plateau2d.push(flechey)\n    plateau2d.push(flechex)\n    this.plateau2d = plateau2d\n  }\n}\n\nexport function plateau2dNLC (type = 1, melange = false, scale = 0.5, relatif = true) {\n  return new Plateau2dNLC(type, melange, scale, relatif)\n}\n"],"names":["NoteLaCouleur","x","y","orientation","plateau","relatif","nx","ny","pas","code","lutin","avancepion","s","latex","avance","tournerD","tournerG","codes","sorti","test","pionfantome","noteLaCouleur","i","repetitions","sortiboucle","Plateau2dNLC","type","melange","scale","ObjetMathalea2D","x1","x2","y1","y2","kase","randint","couleur","plateau2d","b","X","Y","BoiteBuilder","texteParPositionEchelle","flechey","segment","flechex","plateau2dNLC"],"mappings":"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"}