package ttftcuts.physis.puzzle.oddoneout;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import ttftcuts.physis.utils.TPair;
public class OddOneOutOption {
public List<TPair<Integer>> symbols;
public Map<OddOneOutProperty, Integer> properties;
public OddOneOutOption(Object... args) {
this.properties = new HashMap<OddOneOutProperty, Integer>();
this.symbols = new ArrayList<TPair<Integer>>();
}
public void addSymbol(TPair<Integer> symbol) {
this.symbols.add(symbol);
}
public void calculateProperties() {
this.setOrAddProperty(OddOneOutProperty.numSymbols, symbols.size());
Set<Integer> col = new HashSet<Integer>();
Set<Integer> shapes = new HashSet<Integer>();
for(TPair<Integer> s : symbols) {
if (!col.contains(s.val1)) { col.add(s.val1); }
if (!shapes.contains(s.val2)) { shapes.add(s.val2); }
if (s.val1 == 0) {
this.setOrAddProperty(OddOneOutProperty.red, 1);
if (s.val2 == 0) {
this.setOrAddProperty(OddOneOutProperty.squares, 1);
this.setOrAddProperty(OddOneOutProperty.redSquares, 1);
} else if (s.val2 == 1) {
this.setOrAddProperty(OddOneOutProperty.triangles, 1);
this.setOrAddProperty(OddOneOutProperty.redTriangles, 1);
} else if (s.val2 == 2) {
this.setOrAddProperty(OddOneOutProperty.circles, 1);
this.setOrAddProperty(OddOneOutProperty.redCircles, 1);
}
} else if (s.val1 == 1) {
this.setOrAddProperty(OddOneOutProperty.green, 1);
if (s.val2 == 0) {
this.setOrAddProperty(OddOneOutProperty.squares, 1);
this.setOrAddProperty(OddOneOutProperty.greenSquares, 1);
} else if (s.val2 == 1) {
this.setOrAddProperty(OddOneOutProperty.triangles, 1);
this.setOrAddProperty(OddOneOutProperty.greenTriangles, 1);
} else if (s.val2 == 2) {
this.setOrAddProperty(OddOneOutProperty.circles, 1);
this.setOrAddProperty(OddOneOutProperty.greenCircles, 1);
}
} else if (s.val1 == 2) {
this.setOrAddProperty(OddOneOutProperty.blue, 1);
if (s.val2 == 0) {
this.setOrAddProperty(OddOneOutProperty.squares, 1);
this.setOrAddProperty(OddOneOutProperty.blueSquares, 1);
} else if (s.val2 == 1) {
this.setOrAddProperty(OddOneOutProperty.triangles, 1);
this.setOrAddProperty(OddOneOutProperty.blueTriangles, 1);
} else if (s.val2 == 2) {
this.setOrAddProperty(OddOneOutProperty.circles, 1);
this.setOrAddProperty(OddOneOutProperty.blueCircles, 1);
}
}
}
this.setOrAddProperty(OddOneOutProperty.numColours, col.size());
this.setOrAddProperty(OddOneOutProperty.numShapes, shapes.size());
for (OddOneOutProperty p : OddOneOutProperty.propertyList) {
this.setOrAddProperty(p, 0);
}
}
private void setOrAddProperty(OddOneOutProperty property, int increment) {
if (this.properties.containsKey(property)) {
this.properties.put(property, this.properties.get(property) + increment);
} else {
this.properties.put(property, increment);
}
}
@Override
public String toString() {
String[] col = {"Red", "Green", "Blue"};
String[] shape = {"Square", "Triangle", "Circle"};
String s = "Option( ";
for(TPair<Integer> symbol : symbols) {
s += "[" + col[symbol.val1] + " " + shape[symbol.val2] + "] ";
}
s += ")";
return s;
}
}