Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class HexagonCell {
- boolean state;
- Set<Integer> nbs;
- HexagonCell(boolean state, Set<Integer> nbs) {
- this.state = state;
- this.nbs = nbs;
- }
- }
- public int get_index(int x, int y) {
- int index = 0;
- for (Hexagon hex1 : hexagons) {
- if (hex1.coordX == x && hex1.coordY == y) {
- return index;
- }
- index++;
- }
- return -1;
- }
- public HexagonCell[] prepare_cells() {
- HexagonCell[] out = new HexagonCell[hexagons.size()];
- int[][] nbs1 = nbs;
- boolean isOdd = type.equals("odd");
- int index = 0;
- for (Hexagon hex1 : hexagons) {
- Set<Integer> eq = new HashSet<>();
- eq.add(index);
- int x = hex1.coordX;
- int y = hex1.coordY;
- if (isOdd) {
- nbs1 = y % 2 == 0 ? nbsOdd : nbsEven;
- }
- for (int[] nb : nbs1) {
- int idx = get_index(x + nb[0], y + nb[1]);
- if (idx != -1) {
- eq.add(idx);
- }
- }
- out[index++] = new HexagonCell(hex1.state, eq);
- }
- return out;
- }
- public Set<Integer> unique_set(Set<Integer> a, Set<Integer> b) {
- Set<Integer> out = new HashSet<>();
- for (int i : a) {
- if (!b.contains(i)) {
- out.add(i);
- }
- }
- for (int i : b) {
- if (!a.contains(i)) {
- out.add(i);
- }
- }
- return out;
- }
- public HexagonCell[] solve() {
- HexagonCell[] cells = prepare_cells();
- int len = cells.length;
- for (int i = 0; i < len; i++) {
- for (int j = i; j < len; j++) {
- if (cells[j].nbs.contains(i)) {
- HexagonCell t = cells[i];
- cells[i] = cells[j];
- cells[j] = t;
- break;
- }
- }
- for (int j = i + 1; j < len; j++) {
- if (cells[j].nbs.contains(i)) {
- cells[j].state ^= cells[i].state;
- cells[j].nbs = unique_set(cells[j].nbs, cells[i].nbs);
- }
- }
- }
- for (int i = len - 1; i >= 0; i--) {
- for (int j = 0; j < i; j++) {
- if (cells[j].nbs.contains(i)) {
- cells[j].state ^= cells[i].state;
- cells[j].nbs = unique_set(cells[j].nbs, cells[i].nbs);
- }
- }
- }
- return cells;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement