public class KCage { Cell[] cells; int targetnumber; Operator operator; public KCage() { } public KCage(int tn,Operator op,Cell[] c) { cells = c; targetnumber = tn; operator = op; } public int getNumCells() { return cells.length; } public int getTargNumber() { return targetnumber; } public Operator getOperator() { return operator; } public Cell getCell(int i) { return cells[i]; } public boolean[] getPossibilitiesForOthers(int num) { boolean[] output = new boolean[num]; if(operator == Operator.MINUS) { for(int i = 1; i < num; i++) { for(int j = 1; j < num; j++) { if(i-j == targetnumber || j-i == targetnumber) { output[i] = true; output[j] = true; } } } } if(operator == Operator.DIVIDE) { for(int i = 1; i < num; i++) { for(int j = 1; j < num; j++) { if(i/(j*1.0) == targetnumber || j/(i*1.0) == targetnumber) { output[i] = true; output[j] = true; } } } } if(operator == Operator.PLUS) { for(int i = 0; i < num*cells.length; i++) { } int sum = 0; for(Cell c : cells) { } } return output; } public boolean test(int xn, int yn, int num) { for(Cell c : cells) { if(c.getX() == xn && c.getY() == yn) { if(operator == Operator.PLUS) { int sum = 0; for(Cell c2 : cells) { sum += c2.getNum(); } sum += num; if(sum == targetnumber) { return true; } else { return false; } } else if(operator == Operator.MINUS) { Cell thiscell; Cell thatcell; if(c == cells[0]) { thiscell = cells[0]; thatcell = cells[1]; } else { thatcell = cells[0]; thiscell = cells[1]; } if(thiscell.getNum() == 0 || thatcell.getNum() == 0) { return true; } if(thatcell.getNum() - num == targetnumber || num - thatcell.getNum() == targetnumber) { return true; } else { return false; } } else if(operator == Operator.MULTIPLY) { int product = 1; for(Cell c2 : cells) { if(c2.getNum() != 0) product *= c2.getNum(); } product *= num; if(product <= targetnumber) { return true; } else { return false; } } else if(operator == Operator.DIVIDE) { Cell thiscell; Cell thatcell; if(c == cells[0]) { thiscell = cells[0]; thatcell = cells[1]; } else { thatcell = cells[0]; thiscell = cells[1]; } if(thiscell.getNum() == 0 || thatcell.getNum() == 0) { return true; } if((thatcell.getNum()*1.0)/num == targetnumber || (num*1.0)/thatcell.getNum() == targetnumber) { return true; } else { return false; } } else if(operator == Operator.NONE) { if(num == targetnumber) { return true; } else { return false; } } } } return false; } public String toString() { String output = "Cage(" + targetnumber + "," + operator + "){\n\t\t"; if(cells.length == 0) return output+"}"; output += cells[0]; for(int i = 1; i < cells.length; i++) { output += ",\n\t\t"+cells[i]; } return output + "\n\t}"; } }