Test
unknown
java
3 years ago
2.6 kB
4
Indexable
import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class DisjointSubsets { public Map<String, String> hashMap = new HashMap<>(); public String find(String element) throws IllegalArgumentException { if (Arrays.stream(AL07.Network.values()).anyMatch(val -> val.toString().equals(hashMap.get(element)))) { return hashMap.get(element); } // should throw IllegalArgumentException if any of elements is not present if (!hashMap.containsKey(element)) throw new IllegalArgumentException(); return find(hashMap.get(element)); } public void union(String element1, String element2) throws IllegalArgumentException { // should throw IllegalArgumentException if any of elements is not present var a = find(element1); if (a == null) throw new IllegalArgumentException(); if (Arrays.stream(AL07.Network.values()).anyMatch(val -> val.toString().equals(element2))) { // In case we are tagging as friendly/unfriendly hashMap.put(element1, element2); } else { var b = find(element2); if (b == null) throw new IllegalArgumentException(); if (b.equals(AL07.Network.UNKNOWN.name())) { hashMap.put(element2, element1); } else { hashMap.put(element1, element2); } } } public void addSubset(String element) throws IllegalArgumentException { // should throw IllegalArgumentException if any of elements is not present if (hashMap.containsKey(element)) throw new IllegalArgumentException(); hashMap.put(element, AL07.Network.UNKNOWN.name()); } } public class AL07 { public enum Network { FRIENDLY, UNFRIENDLY, UNKNOWN; } private DisjointSubsets disjointSubsets = new DisjointSubsets(); public AL07() { // don't remove } public DisjointSubsets getDisjointSubsets() { return disjointSubsets; } public void talkedToEachOther(String name1, String name2) { getDisjointSubsets().union(name1, name2); } public void addPerson(String name) { getDisjointSubsets().addSubset(name); } public void friendly(String name) { getDisjointSubsets().union(name, Network.FRIENDLY.name()); } public void unfriendly(String name) { getDisjointSubsets().union(name, Network.UNFRIENDLY.name()); } public Network memberOfNetwork(String name) { return Network.valueOf(getDisjointSubsets().find(name)); } }
Editor is loading...