Fonction hyperset fonctionnant pour n'importe quel nombre de cartes et d'attributs
continuous-integration/drone/push Build is passing Details

pull/47/head
Raphael LACOTE 2 years ago
parent 1f6aa89b69
commit caad23ffbe

@ -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));
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));

@ -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]
const tabOutline = ['fullO','dotted ','hyphen','cloudy','sharpy'];
const ATTRIBUTES = [tabColor, tabNumber, tabShape, tabFilling, tabOutline]
//Rename tabOutline

@ -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;
}
Loading…
Cancel
Save