From 49446e178f1fede3cfb056b8ea3db7ad952e8fda Mon Sep 17 00:00:00 2001 From: Raretet11 Date: Fri, 6 Feb 2026 20:54:58 +0300 Subject: [PATCH 1/6] add soltuion --- .../java/hse/java/practice/task1/Edge.java | 59 ++++++ .../hse/java/practice/task1/RubiksCube.java | 178 +++++++++++++++++- 2 files changed, 236 insertions(+), 1 deletion(-) diff --git a/src/main/java/hse/java/practice/task1/Edge.java b/src/main/java/hse/java/practice/task1/Edge.java index d95ba56b..c7648f89 100644 --- a/src/main/java/hse/java/practice/task1/Edge.java +++ b/src/main/java/hse/java/practice/task1/Edge.java @@ -31,6 +31,65 @@ public void setParts(CubeColor[][] parts) { this.parts = parts; } + private void swap(int r1, int c1, int r2, int c2) { + CubeColor temp = parts[r2][c2]; + parts[r2][c2] = parts[r1][c1]; + parts[r1][c1] = temp; + } + + private void transpose() { + for (int i = 0; i < 3; i++) { + for (int j = i + 1; j < 3; j++) { + swap(i, j, j, i); + } + } + } + + private void swapHorizontally() { + for (int i = 0; i < 3; i++) { + swap(0, i, 2, i); + } + } + + private void swapVertically() { + for (int i = 0; i < 3; i++) { + swap(i, 0, i, 2); + } + } + + public void rotate(RotateDirection direction) { + transpose(); + if (direction == RotateDirection.CLOCKWISE) { + swapHorizontally(); + } else { + swapVertically(); + } + } + + public CubeColor[] getRow(int i) { + return parts[i].clone(); + } + + public CubeColor[] getColumn(int i) { + CubeColor[] result = new CubeColor[3]; + for (int j = 0; j < 3; j++) { + result[j] = parts[i][j]; + } + return result; + } + + public void setRow(int i, CubeColor[] newRow) { + for (int j = 0; j < 3; j++) { + parts[i][j] = newRow[j]; + } + } + + public void setColumn(int i, CubeColor[] newColumn) { + for (int j = 0; j < 3; j++) { + parts[j][i] = newColumn[j]; + } + } + @Override public String toString() { return Arrays.deepToString(parts); diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 2091b657..f9749630 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -26,10 +26,186 @@ public RubiksCube() { } } + private static void reverse(CubeColor[] arr) { + for (int i = 0; i < arr.length / 2; i++) { + CubeColor temp = arr[i]; + arr[i] = arr[arr.length - 1 - i]; + arr[arr.length - 1 - i] = temp; + } + } + public void front(RotateDirection direction) { + edges[EdgePosition.FRONT.ordinal()].rotate(direction); + + if (direction == RotateDirection.CLOCKWISE) { + CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(2); + CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(0); + CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(0); + CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(2); + + reverse(leftColumn); + edges[EdgePosition.UP.ordinal()].setRow(2, leftColumn); + edges[EdgePosition.RIGHT.ordinal()].setColumn(0, upRow); + reverse(rightColumn); + edges[EdgePosition.DOWN.ordinal()].setRow(0, rightColumn); + edges[EdgePosition.LEFT.ordinal()].setColumn(2, downRow); + } else { + CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(2); + CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(0); + CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(0); + CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(2); + + edges[EdgePosition.UP.ordinal()].setRow(2, rightColumn); + reverse(downRow); + edges[EdgePosition.RIGHT.ordinal()].setColumn(0, downRow); + edges[EdgePosition.DOWN.ordinal()].setRow(0, leftColumn); + reverse(upRow); + edges[EdgePosition.LEFT.ordinal()].setColumn(2, upRow); + } + } + + public void back(RotateDirection direction) { + edges[EdgePosition.BACK.ordinal()].rotate(direction); + + if (direction == RotateDirection.CLOCKWISE) { + CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(0); + CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(2); + CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(2); + CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(0); + reverse(rightColumn); + edges[EdgePosition.UP.ordinal()].setRow(0, rightColumn); + edges[EdgePosition.RIGHT.ordinal()].setColumn(2, downRow); + reverse(leftColumn); + edges[EdgePosition.DOWN.ordinal()].setRow(2, leftColumn); + edges[EdgePosition.LEFT.ordinal()].setColumn(0, upRow); + } else { + CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(0); + CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(2); + CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(2); + CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(0); + + edges[EdgePosition.UP.ordinal()].setRow(0, leftColumn); + reverse(upRow); + edges[EdgePosition.RIGHT.ordinal()].setColumn(2, upRow); + edges[EdgePosition.DOWN.ordinal()].setRow(2, rightColumn); + reverse(downRow); + edges[EdgePosition.LEFT.ordinal()].setColumn(0, downRow); + } + } + + public void up(RotateDirection direction) { + edges[EdgePosition.UP.ordinal()].rotate(direction); + + if (direction == RotateDirection.CLOCKWISE) { + CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(0); + CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(0); + CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(0); + CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(0); + + edges[EdgePosition.FRONT.ordinal()].setRow(0, rightRow); + edges[EdgePosition.RIGHT.ordinal()].setRow(0, backRow); + edges[EdgePosition.BACK.ordinal()].setRow(0, leftRow); + edges[EdgePosition.LEFT.ordinal()].setRow(0, frontRow); + } else { + CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(0); + CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(0); + CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(0); + CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(0); + + edges[EdgePosition.FRONT.ordinal()].setRow(0, leftRow); + edges[EdgePosition.RIGHT.ordinal()].setRow(0, frontRow); + edges[EdgePosition.BACK.ordinal()].setRow(0, rightRow); + edges[EdgePosition.LEFT.ordinal()].setRow(0, backRow); + } } - + + public void down(RotateDirection direction) { + edges[EdgePosition.DOWN.ordinal()].rotate(direction); + + if (direction == RotateDirection.CLOCKWISE) { + CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(2); + CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(2); + CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(2); + CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(2); + + edges[EdgePosition.FRONT.ordinal()].setRow(2, leftRow); + edges[EdgePosition.RIGHT.ordinal()].setRow(2, frontRow); + edges[EdgePosition.BACK.ordinal()].setRow(2, rightRow); + edges[EdgePosition.LEFT.ordinal()].setRow(2, backRow); + } else { + CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(2); + CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(2); + CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(2); + CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(2); + + edges[EdgePosition.FRONT.ordinal()].setRow(2, rightRow); + edges[EdgePosition.RIGHT.ordinal()].setRow(2, backRow); + edges[EdgePosition.BACK.ordinal()].setRow(2, leftRow); + edges[EdgePosition.LEFT.ordinal()].setRow(2, frontRow); + } + } + + public void left(RotateDirection direction) { + edges[EdgePosition.LEFT.ordinal()].rotate(direction); + + if (direction == RotateDirection.CLOCKWISE) { + CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(0); + CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(0); + CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(0); + CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(2); + + reverse(backColumn); + edges[EdgePosition.UP.ordinal()].setColumn(0, backColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(0, upColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(0, frontColumn); + reverse(downColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(2, downColumn); + } else { + CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(0); + CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(0); + CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(0); + CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(2); + + edges[EdgePosition.UP.ordinal()].setColumn(0, frontColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(0, downColumn); + reverse(backColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(0, backColumn); + reverse(upColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(2, upColumn); + } + } + + public void right(RotateDirection direction) { + edges[EdgePosition.RIGHT.ordinal()].rotate(direction); + + if (direction == RotateDirection.CLOCKWISE) { + CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(2); + CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(2); + CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); + CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); + + edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); + reverse(backColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(2, backColumn); + reverse(upColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(0, upColumn); + } else { + CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(2); + CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(2); + CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); + CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); + + reverse(backColumn); + edges[EdgePosition.UP.ordinal()].setColumn(2, backColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(2, upColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(2, frontColumn); + reverse(downColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(0, downColumn); + } + } + public Edge[] getEdges() { return edges; } From 7f22123fcc3f913f8ab06cb83b95ebd0611e4344 Mon Sep 17 00:00:00 2001 From: Raretet11 Date: Sat, 7 Feb 2026 20:31:02 +0300 Subject: [PATCH 2/6] fix bug --- .../java/hse/java/practice/task1/Edge.java | 2 +- .../hse/java/practice/task1/RubiksCube.java | 32 ++++++------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/Edge.java b/src/main/java/hse/java/practice/task1/Edge.java index c7648f89..fe54ca93 100644 --- a/src/main/java/hse/java/practice/task1/Edge.java +++ b/src/main/java/hse/java/practice/task1/Edge.java @@ -73,7 +73,7 @@ public CubeColor[] getRow(int i) { public CubeColor[] getColumn(int i) { CubeColor[] result = new CubeColor[3]; for (int j = 0; j < 3; j++) { - result[j] = parts[i][j]; + result[j] = parts[j][i]; } return result; } diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 199c8f4d..8805429a 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -2,23 +2,11 @@ import java.util.Arrays; -/** - * Необходимо реализовать интерфейс Cube - * При повороте передней грани, меняются верх низ право и лево - */ public class RubiksCube implements Cube { private static final int EDGES_COUNT = 6; - private final Edge[] edges = new Edge[EDGES_COUNT]; - /** - * Создать валидный собранный кубик - * грани разместить по ордеру в енуме цветов - * грань 0 -> цвет 0 - * грань 1 -> цвет 1 - * ... - */ public RubiksCube() { CubeColor[] colors = CubeColor.values(); for (int i = 0; i < 6; i++) { @@ -185,24 +173,24 @@ public void right(RotateDirection direction) { CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); - edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); - edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); reverse(backColumn); - edges[EdgePosition.DOWN.ordinal()].setColumn(2, backColumn); - reverse(upColumn); - edges[EdgePosition.BACK.ordinal()].setColumn(0, upColumn); + edges[EdgePosition.UP.ordinal()].setColumn(2, backColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(2, upColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(2, frontColumn); + reverse(downColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(0, downColumn); } else { CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(2); CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(2); CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); + edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); reverse(backColumn); - edges[EdgePosition.UP.ordinal()].setColumn(2, backColumn); - edges[EdgePosition.FRONT.ordinal()].setColumn(2, upColumn); - edges[EdgePosition.DOWN.ordinal()].setColumn(2, frontColumn); - reverse(downColumn); - edges[EdgePosition.BACK.ordinal()].setColumn(0, downColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(2, backColumn); + reverse(upColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(0, upColumn); } } From a3d58da91aa0266955c1b11ef7080da67c39a509 Mon Sep 17 00:00:00 2001 From: Raretet11 Date: Sat, 7 Feb 2026 20:39:49 +0300 Subject: [PATCH 3/6] cube: fix bug --- src/main/java/hse/java/practice/task1/RubiksCube.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 8805429a..a0154234 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -3,7 +3,6 @@ import java.util.Arrays; public class RubiksCube implements Cube { - private static final int EDGES_COUNT = 6; private final Edge[] edges = new Edge[EDGES_COUNT]; From 3624018fb0e8311a117a0902ff461c8a567fed07 Mon Sep 17 00:00:00 2001 From: Raretet11 Date: Sat, 7 Feb 2026 20:45:37 +0300 Subject: [PATCH 4/6] cube: fix bug x2 --- .../hse/java/practice/task1/RubiksCube.java | 97 +++++++------------ 1 file changed, 37 insertions(+), 60 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index a0154234..08904fc3 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -3,6 +3,7 @@ import java.util.Arrays; public class RubiksCube implements Cube { + private static final int EDGES_COUNT = 6; private final Edge[] edges = new Edge[EDGES_COUNT]; @@ -21,15 +22,16 @@ private static void reverse(CubeColor[] arr) { } } + @Override public void front(RotateDirection direction) { edges[EdgePosition.FRONT.ordinal()].rotate(direction); - if (direction == RotateDirection.CLOCKWISE) { - CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(2); - CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(0); - CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(0); - CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(2); + CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(2); + CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(0); + CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(0); + CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(2); + if (direction == RotateDirection.CLOCKWISE) { reverse(leftColumn); edges[EdgePosition.UP.ordinal()].setRow(2, leftColumn); edges[EdgePosition.RIGHT.ordinal()].setColumn(0, upRow); @@ -37,11 +39,6 @@ public void front(RotateDirection direction) { edges[EdgePosition.DOWN.ordinal()].setRow(0, rightColumn); edges[EdgePosition.LEFT.ordinal()].setColumn(2, downRow); } else { - CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(2); - CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(0); - CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(0); - CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(2); - edges[EdgePosition.UP.ordinal()].setRow(2, rightColumn); reverse(downRow); edges[EdgePosition.RIGHT.ordinal()].setColumn(0, downRow); @@ -51,15 +48,16 @@ public void front(RotateDirection direction) { } } + @Override public void back(RotateDirection direction) { edges[EdgePosition.BACK.ordinal()].rotate(direction); - if (direction == RotateDirection.CLOCKWISE) { - CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(0); - CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(2); - CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(2); - CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(0); + CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(0); + CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(2); + CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(2); + CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(0); + if (direction == RotateDirection.CLOCKWISE) { reverse(rightColumn); edges[EdgePosition.UP.ordinal()].setRow(0, rightColumn); edges[EdgePosition.RIGHT.ordinal()].setColumn(2, downRow); @@ -67,11 +65,6 @@ public void back(RotateDirection direction) { edges[EdgePosition.DOWN.ordinal()].setRow(2, leftColumn); edges[EdgePosition.LEFT.ordinal()].setColumn(0, upRow); } else { - CubeColor[] upRow = edges[EdgePosition.UP.ordinal()].getRow(0); - CubeColor[] rightColumn = edges[EdgePosition.RIGHT.ordinal()].getColumn(2); - CubeColor[] downRow = edges[EdgePosition.DOWN.ordinal()].getRow(2); - CubeColor[] leftColumn = edges[EdgePosition.LEFT.ordinal()].getColumn(0); - edges[EdgePosition.UP.ordinal()].setRow(0, leftColumn); reverse(upRow); edges[EdgePosition.RIGHT.ordinal()].setColumn(2, upRow); @@ -81,25 +74,21 @@ public void back(RotateDirection direction) { } } + @Override public void up(RotateDirection direction) { edges[EdgePosition.UP.ordinal()].rotate(direction); - if (direction == RotateDirection.CLOCKWISE) { - CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(0); - CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(0); - CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(0); - CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(0); + CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(0); + CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(0); + CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(0); + CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(0); + if (direction == RotateDirection.CLOCKWISE) { edges[EdgePosition.FRONT.ordinal()].setRow(0, rightRow); edges[EdgePosition.RIGHT.ordinal()].setRow(0, backRow); edges[EdgePosition.BACK.ordinal()].setRow(0, leftRow); edges[EdgePosition.LEFT.ordinal()].setRow(0, frontRow); } else { - CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(0); - CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(0); - CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(0); - CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(0); - edges[EdgePosition.FRONT.ordinal()].setRow(0, leftRow); edges[EdgePosition.RIGHT.ordinal()].setRow(0, frontRow); edges[EdgePosition.BACK.ordinal()].setRow(0, rightRow); @@ -107,25 +96,21 @@ public void up(RotateDirection direction) { } } + @Override public void down(RotateDirection direction) { edges[EdgePosition.DOWN.ordinal()].rotate(direction); - if (direction == RotateDirection.CLOCKWISE) { - CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(2); - CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(2); - CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(2); - CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(2); + CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(2); + CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(2); + CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(2); + CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(2); + if (direction == RotateDirection.CLOCKWISE) { edges[EdgePosition.FRONT.ordinal()].setRow(2, leftRow); edges[EdgePosition.RIGHT.ordinal()].setRow(2, frontRow); edges[EdgePosition.BACK.ordinal()].setRow(2, rightRow); edges[EdgePosition.LEFT.ordinal()].setRow(2, backRow); } else { - CubeColor[] frontRow = edges[EdgePosition.FRONT.ordinal()].getRow(2); - CubeColor[] rightRow = edges[EdgePosition.RIGHT.ordinal()].getRow(2); - CubeColor[] backRow = edges[EdgePosition.BACK.ordinal()].getRow(2); - CubeColor[] leftRow = edges[EdgePosition.LEFT.ordinal()].getRow(2); - edges[EdgePosition.FRONT.ordinal()].setRow(2, rightRow); edges[EdgePosition.RIGHT.ordinal()].setRow(2, backRow); edges[EdgePosition.BACK.ordinal()].setRow(2, leftRow); @@ -133,15 +118,16 @@ public void down(RotateDirection direction) { } } + @Override public void left(RotateDirection direction) { edges[EdgePosition.LEFT.ordinal()].rotate(direction); - if (direction == RotateDirection.CLOCKWISE) { - CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(0); - CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(0); - CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(0); - CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(2); + CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(0); + CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(0); + CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(0); + CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(2); + if (direction == RotateDirection.CLOCKWISE) { reverse(backColumn); edges[EdgePosition.UP.ordinal()].setColumn(0, backColumn); edges[EdgePosition.FRONT.ordinal()].setColumn(0, upColumn); @@ -149,11 +135,6 @@ public void left(RotateDirection direction) { reverse(downColumn); edges[EdgePosition.BACK.ordinal()].setColumn(2, downColumn); } else { - CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(0); - CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(0); - CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(0); - CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(2); - edges[EdgePosition.UP.ordinal()].setColumn(0, frontColumn); edges[EdgePosition.FRONT.ordinal()].setColumn(0, downColumn); reverse(backColumn); @@ -163,15 +144,16 @@ public void left(RotateDirection direction) { } } + @Override public void right(RotateDirection direction) { edges[EdgePosition.RIGHT.ordinal()].rotate(direction); - if (direction == RotateDirection.CLOCKWISE) { - CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(2); - CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(2); - CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); - CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); + CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(2); + CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(2); + CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); + CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); + if (direction == RotateDirection.CLOCKWISE) { reverse(backColumn); edges[EdgePosition.UP.ordinal()].setColumn(2, backColumn); edges[EdgePosition.FRONT.ordinal()].setColumn(2, upColumn); @@ -179,11 +161,6 @@ public void right(RotateDirection direction) { reverse(downColumn); edges[EdgePosition.BACK.ordinal()].setColumn(0, downColumn); } else { - CubeColor[] upColumn = edges[EdgePosition.UP.ordinal()].getColumn(2); - CubeColor[] frontColumn = edges[EdgePosition.FRONT.ordinal()].getColumn(2); - CubeColor[] downColumn = edges[EdgePosition.DOWN.ordinal()].getColumn(2); - CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); - edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); reverse(backColumn); From 4ded97c593f7b89c1c44756d663c2b7bbbeb9df5 Mon Sep 17 00:00:00 2001 From: Raretet11 Date: Sat, 7 Feb 2026 20:56:31 +0300 Subject: [PATCH 5/6] cube: fix bug x3 --- src/main/java/hse/java/practice/task1/RubiksCube.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 08904fc3..43e23a2d 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -154,12 +154,12 @@ public void right(RotateDirection direction) { CubeColor[] backColumn = edges[EdgePosition.BACK.ordinal()].getColumn(0); if (direction == RotateDirection.CLOCKWISE) { + edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); reverse(backColumn); - edges[EdgePosition.UP.ordinal()].setColumn(2, backColumn); - edges[EdgePosition.FRONT.ordinal()].setColumn(2, upColumn); - edges[EdgePosition.DOWN.ordinal()].setColumn(2, frontColumn); - reverse(downColumn); - edges[EdgePosition.BACK.ordinal()].setColumn(0, downColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(2, backColumn); + reverse(upColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(0, upColumn); } else { edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); From 8825777b7476e0346f23f977f95c0f49d33c7244 Mon Sep 17 00:00:00 2001 From: Raretet11 Date: Sat, 7 Feb 2026 21:00:50 +0300 Subject: [PATCH 6/6] cube: fix bug x4 --- src/main/java/hse/java/practice/task1/RubiksCube.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 43e23a2d..98f0e771 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -161,12 +161,12 @@ public void right(RotateDirection direction) { reverse(upColumn); edges[EdgePosition.BACK.ordinal()].setColumn(0, upColumn); } else { - edges[EdgePosition.UP.ordinal()].setColumn(2, frontColumn); - edges[EdgePosition.FRONT.ordinal()].setColumn(2, downColumn); reverse(backColumn); - edges[EdgePosition.DOWN.ordinal()].setColumn(2, backColumn); - reverse(upColumn); - edges[EdgePosition.BACK.ordinal()].setColumn(0, upColumn); + edges[EdgePosition.UP.ordinal()].setColumn(2, backColumn); + edges[EdgePosition.FRONT.ordinal()].setColumn(2, upColumn); + edges[EdgePosition.DOWN.ordinal()].setColumn(2, frontColumn); + reverse(downColumn); + edges[EdgePosition.BACK.ordinal()].setColumn(0, downColumn); } }