From caad23ffbef6598e746ba4629992a43319bf4ce1 Mon Sep 17 00:00:00 2001 From: Raphael LACOTE Date: Thu, 23 Feb 2023 21:40:21 +0100 Subject: [PATCH] Fonction hyperset fonctionnant pour n'importe quel nombre de cartes et d'attributs --- src/Console/main.js | 58 +++++++++++++++--- src/Model/Const.js | 6 +- src/algo.js | 142 +++++++++++++++++++++++++++----------------- 3 files changed, 142 insertions(+), 64 deletions(-) diff --git a/src/Console/main.js b/src/Console/main.js index 91a908a..fc99f74 100644 --- a/src/Console/main.js +++ b/src/Console/main.js @@ -1,8 +1,8 @@ -// import { Card5 } from "../Model/Card5"; -// import('../Model/Card5'); +//import { Card5 } from "../Model/Card5"; +//import('../Model/Card5'); //import {Card} from '../Model/Card'; -console.log("~#Test#~"); +/*console.log("~#Test#~"); let card4 = new Card4WithoutOutline('red','2','losange','full'); console.group('Carte 4 attributes'); console.log(`carte de 4 elements : ${card4.color}`); @@ -110,14 +110,39 @@ for (let i=0; i<26;i++){ console.log(e.getAttributes()); }); } -deck.checkSet(customCard); +deck.checkSet(customCard);*/ // CREATE HYPERSET -let Hcard1 = new Card4WithoutOutline('red', '3', 'diamond', 'full'); -let Hcard2 = new Card4WithoutOutline('red', '2', 'diamond', 'full'); -let Hcard3 = new Card4WithoutOutline('blue', '2', 'diamond', 'stripped'); -let Hcard4 = new Card4WithoutOutline('green', '3', 'diamond', 'empty'); +function checkList(list) { + // Vérifier si tous les éléments sont identiques + if (list.every(element => element === list[0])) { + return 1; + } + + if ([...new Set(list)].length === list.length) { + return 0; + } + + // Si tous les éléments ne sont ni identiques ni différents + return 2; +} + +// Exemple d'utilisation +const list1 = [1, 2, 3, 4]; +console.log(checkList(list1)); // Retourne 0 + +const list2 = [1, 1, 1, 1]; +console.log(checkList(list2)); // Retourne 1 + +const list3 = [1, 2, 3, 1]; +console.log(checkList(list3)); // Retourne 2 + + +let Hcard1 = new Card4WithoutOutline('red', 3, 'wave', 'full'); +let Hcard2 = new Card4WithoutOutline('red', 3, 'oval', 'empty'); +let Hcard3 = new Card4WithoutOutline('blue', 2, 'oval', 'full'); +let Hcard4 = new Card4WithoutOutline('green', 1, 'wave', 'full'); deckA = []; deckB = []; @@ -127,4 +152,19 @@ deckA.push(Hcard2); deckB.push(Hcard3); deckB.push(Hcard4); -console.log(isHyperset(deckA, deckB)); \ No newline at end of file +console.log(isHyperset(deckA, deckB)); + +let Icard1 = new Card5('red', 4, 'oval', 'empty','fullO'); +let Icard2 = new Card5('red', 3, 'oval', 'full','fullO'); +let Icard3 = new Card5('red', 2, 'oval', 'squared','fullO'); +let Icard4 = new Card5('green', 2, 'oval', 'pointed','cloudy'); +let Icard5 = new Card5('blue', 3, 'oval', 'squared','sharpy'); +let Icard6 = new Card5('purple', 4, 'oval', 'full','hyphen'); + +deckAA = []; +deckBB = []; + +deckAA.push(Icard1, Icard2, Icard3); +deckBB.push(Icard4, Icard5, Icard6); + +console.log(isHyperset(deckAA, deckBB)); diff --git a/src/Model/Const.js b/src/Model/Const.js index 201e43e..3cab74b 100644 --- a/src/Model/Const.js +++ b/src/Model/Const.js @@ -2,5 +2,7 @@ const tabColor = ['red','purple','green','blue','orange']; const tabNumber = [1,2,3,4,5]; const tabShape = ['diamond','oval','wave','star','triangle']; const tabFilling = ['empty','stripped','full','pointed','squared']; -const tabOutline = ['full','dotted ','hyphen','cloudy','sharpy']; -const ATTRIBUTES=[tabColor,tabNumber,tabShape,tabFilling,tabOutline] \ No newline at end of file +const tabOutline = ['fullO','dotted ','hyphen','cloudy','sharpy']; +const ATTRIBUTES = [tabColor, tabNumber, tabShape, tabFilling, tabOutline] + +//Rename tabOutline \ No newline at end of file diff --git a/src/algo.js b/src/algo.js index 9ee8cf8..19b7650 100644 --- a/src/algo.js +++ b/src/algo.js @@ -1,4 +1,4 @@ -import('./Model/Card.js') +//import('./Model/Card.js') function isSet(cards) @@ -131,77 +131,113 @@ function setsCounter(deck, numberForSet){ console.error('The number of cards in a Set is not existing', numberForSet) } -function createElements(attributs1, attributs2) { - if (attributs1 in tabColor) { - tabColor.forEach(element => { - if (element != attributs1) { - if (element != attributs2) { - return element; - } - } - }); - } - if (attributs1 in tabNumber) { - tabNumber.forEach(element => { - if (element != attributs1) { - if (element != attributs2) { - return element; - } - } - }); - } - if (attributs1 in tabShape) { - tabShape.forEach(element => { - if (element != attributs1) { - if (element != attributs2) { - return element; - } - } - }); - } - if (attributs1 in tabFilling) { - tabFilling.forEach(element => { - if (element != attributs1) { - if (element != attributs2) { - return element; - } +function createElements(attributsCartes, listeAttributs) { + let l = [] + let verif; + listeAttributs.forEach(element => { + verif = false; + attributsCartes.forEach(attribCartes => { + if (element == attribCartes) { + verif = true; } - }); - } - if (attributs1 in tabOutline) { - tabOutline.forEach(element => { - if (element != attributs1) { - if (element != attributs2) { - return element; - } - } - }); - } + }) + if (verif == false) { + l.push(element); + } + }); + return l +} + +function trouveElements(attributsCartes) { + + let x; + + tabColor.forEach(element => { + if (element == attributsCartes[0]) { + x = createElements(attributsCartes, tabColor); + } + }); + + tabNumber.forEach(element => { + if (element == attributsCartes[0]) { + x = createElements(attributsCartes, tabNumber); + } + }); + + tabShape.forEach(element => { + if (element == attributsCartes[0]) { + x = createElements(attributsCartes, tabShape); + } + }); + + tabFilling.forEach(element => { + if (element == attributsCartes[0]) { + x = createElements(attributsCartes, tabFilling); + } + }); + + tabOutline.forEach(element => { + if (element == attributsCartes[0]) { + x = createElements(attributsCartes, tabOutline); + } + }); + + return x; } function createCard(cards) { let attributesMatrix = []; let carteFinale = []; + let listeInter = []; cards.forEach(element => { attributesMatrix.push(element.getAttributes()); }); for (let i = 0; i < attributesMatrix[0].length; i++) { - if (attributesMatrix[0][i] == attributesMatrix[1][i]) { - carteFinale.push(attributesMatrix[0][i]); + listeInter = []; + attributesMatrix.forEach(element => { + listeInter.push(element[i]); + }); + + //S'ils sont tous égaux + if (listeInter.every(element => element === listeInter[0])) { + carteFinale.push(listeInter[0]); } else { - carteFinale.push(createElements(attributesMatrix[0][i], attributesMatrix[1][i])) + //S'ils sont tous différents + if ([...new Set(listeInter)].length === listeInter.length) { + carteFinale.push(trouveElements(listeInter)); + } + //Sinon + else { + carteFinale.push([]); + } } } + console.log(carteFinale); return carteFinale; - } function isHyperset(cardsLeft, cardsRight) { - return createCard(cardsLeft).join() == createCard(cardsRight).join(); -} - + left = createCard(cardsLeft) + right = createCard(cardsRight) + let verif; + + for (let i = 0; i < left[0].length; i++) { + verif = false; + left.forEach(elementG => { + right.forEach(elementD => { + if (elementD == elementG) { + verif=true + } + }) + }) + if (verif == false) { + return false; + } + } + return true; +} \ No newline at end of file