diff --git a/js/main.js b/js/main.js index 4a2132e..d75658f 100644 --- a/js/main.js +++ b/js/main.js @@ -9,25 +9,28 @@ const main = () => { }; let exemple = "a && b || c" - - console.log("with", def, "parsing logical expression of \"" + exemple + "\""); - console.log("result : " + parseLogicalExpression(def, exemple)); + console.error(exemple, "\n=", parseLogicalExpression(def, exemple)); + console.log("vrai rep d'apres JS:", def.a && def.b || def.c); console.log("\n\n-----\n\n "); - console.log(parseLogicalExpression(def, "!a && b || c && a || c && b && a")); - console.log("vrai rep d'apres JS:", !true && false || 5 && true || 5 && false && true); + exemple = "!a && b || c && a || c && b && a" + console.error(exemple, "\n=", parseLogicalExpression(def, exemple)); + console.log("vrai rep d'apres JS:", !def.a && def.b || def.c && def.a || def.c && def.b && def.a); console.log("\n\n-----\n\n "); - console.log(parseLogicalExpression(def, "a || b || a && b && c || c")); - console.log("vrai rep d'apres JS:", true || false || true && false && 5 || 5); + exemple = "a || b || a && b && c || c" + console.error(exemple, "\n=", parseLogicalExpression(def, exemple)); + console.log("vrai rep d'apres JS:", def.a || def.b || def.a && def.b && def.c || def.c); console.log("\n\n-----\n\n "); - console.log(parseLogicalExpression(def, "a || a && !a && !b || !a")); - console.log("vrai rep d'apres JS:", true || true && !true && !false || !true); + exemple = "a || a && !a && !b || !a" + console.error(exemple, "\n=", parseLogicalExpression(def, exemple)); + console.log("vrai rep d'apres JS:", def.a || def.a && !def.a && !def.b || !def.a); console.log("\n\n-----\n\n "); - console.log(parseLogicalExpression(def, "(a || b) || (a && b) && c")); - console.log("vrai rep d'apres JS:", true || false || true && false && 5 || 5); + exemple = "(a || b) || (a && b) && c" + console.error(exemple, "\n=", parseLogicalExpression(def, exemple)); + console.log("vrai rep d'apres JS:", def.a || def.b || def.a && def.b && def.c || def.c); }; @@ -61,17 +64,17 @@ const parseLogicalExpression = (subject = Object, expression = String) => { const gate = (gate = String, array = Array) => { let posGate = array.findIndex(element => typeof element == "string") if(array[posGate] == gate) { - // console.log("je vais travailler avec la porte", gate, "sur", array); - // console.log("je fais,", array[posGate - 1], gate, array[posGate + 1]) + console.log("je vais travailler avec la porte", gate, "sur", array); + console.log("je fais,", array[posGate - 1], gate, array[posGate + 1]) if(gate == "&&") array[posGate + 1] = array[posGate - 1] && array[posGate + 1]; else if(gate == "||") array[posGate + 1] = array[posGate - 1] || array[posGate + 1]; else return console.error("bad gate type"); - // console.log("res:", array[posGate + 1]); + console.log("res:", array[posGate + 1]); array.splice(posGate - 1, 2); - // console.log("finit:", array); - } // else console.warn("la porte", gate, "n'a pas la priorité de calcule", array); + console.log("finit:", array); + } else console.warn("la porte", gate, "n'a pas la priorité de calcule", array); - // console.log("\n "); + console.log("\n "); return array; }; @@ -79,35 +82,43 @@ const parseLogicalExpression = (subject = Object, expression = String) => { while(problem.length > 1) ["&&", "||"].forEach(element => problem = gate(element, problem)); }; + const bracketCalculator = (problem = Array) => { + // on calcule les parenthèses + let calculatedBrackets = [] // inialisation du tableau qui va recevoir les réponses des parenthese + problem.forEach(element => { + if(typeof element == "string") { // ajout de tous les éléments sauf les parentheses + if(element.startsWith("(") == 0 || element.endsWith(")") == 0) calculatedBrackets.push(element); + } else calculatedBrackets.push(element) + if(typeof element == "string") if(element.startsWith("(") && element.endsWith(")")) { + element = splitter(element.replace("(", "").replace(")", "")); + replaceWithRightValues(subject, element); + resolution(element); + calculatedBrackets.push(element[0]) // ajout des réponses aux parenthèses + }; + }); + + return calculatedBrackets; + } + // expression propre let arrayLogicalExpression = splitter(expression); + + // -> on retire les string vide + arrayLogicalExpression = arrayLogicalExpression.filter(element => element != ""); + console.log(arrayLogicalExpression); // on remplace par les valeurs de subject replaceWithRightValues(subject, arrayLogicalExpression); // on supprime les parenthèses - // -> on retire les string vide - arrayLogicalExpression = arrayLogicalExpression.filter(element => element != ""); - - // on calcule les parenthèses - let calculatedBrackets = [] // inialisation du tableau qui va recevoir les réponses des parenthese - arrayLogicalExpression.forEach(element => { - if(typeof element == "string") { // ajout de tous les éléments sauf les parentheses - if(element.startsWith("(") == 0 && element.endsWith(")") == 0) calculatedBrackets.push(element); - } else calculatedBrackets.push(element) - if(typeof element == "string") if(element.startsWith("(") && element.endsWith(")")) { - element = splitter(element.replace("(", "").replace(")", "")); - replaceWithRightValues(subject, element); - resolution(element); - calculatedBrackets.push(element[0]) // ajout des réponses aux parenthèses - }; - }); - arrayLogicalExpression = calculatedBrackets; + console.log("avant bracket calculator:", arrayLogicalExpression); + arrayLogicalExpression = bracketCalculator(arrayLogicalExpression); + console.log("apres bracket calculator:", arrayLogicalExpression); // on résoud les problemes resolution(arrayLogicalExpression); - console.log(arrayLogicalExpression); + console.log("resultat final:", arrayLogicalExpression); return arrayLogicalExpression[0]; };