pass all tests, resee empty 7

This commit is contained in:
Minh VU
2024-10-24 13:14:51 +02:00
parent 1168b5377f
commit 23ea8746b1
6 changed files with 76 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
package src.fr.impl;
import java.util.HashMap;
//import java.util.HashMap;
import java.util.Set;
import src.fr.api.PartType;

View File

@@ -42,6 +42,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
incompa.add(x);
System.out.println("Add "+reference.getName() +" incompatible with "+x.getName());
this.incompatibilities.put(reference, incompa);
// Symétrie
//Ajoute x à ref
//this.getIncompatibilities(x).add(reference);
@@ -64,7 +65,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}else{
if(incompa.contains(target)){
incompa.remove(target);
this.incompatibilities.replace(reference, incompa);
// SyMéTrIe
//Remove target -> ref
//this.getIncompatibilities(target).remove(reference);
@@ -96,6 +97,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
require.add(x);
System.out.println("Add "+reference.getName() +" compatible with "+x.getName());
this.requirements.put(reference, require);
//Symétrie
//Ajoute x à ref
//this.getRequirements(x).add(reference);
@@ -119,7 +121,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}else{
if(require.contains(target)){
require.remove(target);
this.requirements.replace(reference, require);
// SyMéTrIe
//Remove target -> ref
//this.getRequirements(target).remove(reference);
@@ -130,8 +132,8 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}
// A -> B -> C -> A, D -> B
//bool verify requirement (1) or incompatible (0)
private void Femeture_Transivite(PartType reference, Set<PartType> result, Set<PartType> visited, boolean bool){
//erquirement only
private void Femeture_Transivite(PartType reference, Set<PartType> result, Set<PartType> visited, PartType start){
//Condition de quitter la boucle
if(visited.contains(reference)){
return;
@@ -140,42 +142,63 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}
Set<PartType> list = null;
if(bool==true){ // requirement
//Get all requirement of A (in example is B)
list = this.requirements.get(reference);
}else{ //incompatible
list = this.incompatibilities.get(reference);
}
//Get all requirement of A (in example is B)
list = this.requirements.get(reference);
if(list != null){ // list = {B}
for(PartType pt: list){
if(!result.contains(pt)){
if(!result.contains(pt)&& pt !=start){
result.add(pt);
}
Femeture_Transivite(pt,result,visited,bool);
Femeture_Transivite(pt,result,visited,reference);
}
}
}
private void check_All_Catalog(PartType reference, Set<PartType> result, boolean bool){
if(bool){ //
}
}
@Override
public Set<PartType> getIncompatibilities(PartType reference) {
Set<PartType> result = new HashSet<>();
Femeture_Transivite(reference, result,new HashSet<>(),false);
// Remove the case of result become null
Set<PartType> directIncompa = this.incompatibilities.get(reference);
if(directIncompa!=null){
result.addAll(directIncompa);
}
// Collect the requirements list
Set<PartType> requirements = new HashSet<>();
Femeture_Transivite(reference, requirements,new HashSet<>(),reference);
for(Map.Entry<PartType, Set<PartType>> entry : this.incompatibilities.entrySet()){
// check start
if(entry.getValue().contains(reference)){
result.add(entry.getKey());
}
// check incompatible of A's requirements
for(PartType pt: requirements){
// In Catalog of pt
if(entry.getValue().contains(pt)){
result.add(entry.getKey());
}
// Direct of pt
Set<PartType> direct_pt = this.incompatibilities.get(pt);
if(direct_pt!=null){
result.addAll(direct_pt);
}
}
}
return result;
}
}
@Override
public Set<PartType> getRequirements(PartType reference) {
Set<PartType> result = new HashSet<>();
Femeture_Transivite(reference, result,new HashSet<>(),true);
Femeture_Transivite(reference, result,new HashSet<>(),reference);
return result;
}