From 2dddc15512a3d69fc4bef2627f3e14b14f9ae326 Mon Sep 17 00:00:00 2001 From: MuravAna Date: Sat, 7 Feb 2026 10:36:31 +0300 Subject: [PATCH 1/3] Add logic for RubicksCube --- .../hse/java/practice/task1/RubiksCube.java | 248 +++++++++++++++++- 1 file changed, 235 insertions(+), 13 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 2091b657..9577bb87 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -2,23 +2,12 @@ import java.util.Arrays; -/** - * Необходимо реализовать интерфейс Cube - * При повороте передней грани, меняются верх низ право и лево - */ -public class RubiksCube { +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++) { @@ -26,10 +15,243 @@ public RubiksCube() { } } + public void rotateEdgeClockwise(int edge_num) { + CubeColor[][] parts_ = edges[edge_num].getParts(); + CubeColor temp1 = parts_[0][0]; + parts_[0][0] = parts_[2][0]; + parts_[2][0] = parts_[2][2]; + parts_[2][2] = parts_[0][2]; + parts_[0][2] = temp1; + CubeColor temp2 = parts_[0][1]; + parts_[0][1] = parts_[1][0]; + parts_[1][0] = parts_[2][1]; + parts_[2][1] = parts_[1][2]; + parts_[1][2] = temp2; + edges[edge_num].setParts(parts_); + } + + // Считаем, что 0 - верх, 1 - низ, 2 - лево, 3 - право, 4 - передняя, 5 - задняя + + @Override + public void up(RotateDirection direction) { + int k = 1; + if(direction == RotateDirection.COUNTERCLOCKWISE) { + k = 3; + } + for(int i = 0; i Date: Sat, 7 Feb 2026 10:50:16 +0300 Subject: [PATCH 2/3] Add fix for RubicksCube --- src/main/java/hse/java/practice/task1/RubiksCube.java | 2 +- 1 file changed, 1 insertion(+), 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 9577bb87..c816ccda 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -242,7 +242,7 @@ public void back(RotateDirection direction) { p1[2][2-j] = p2[2-j][0]; } for (int j = 0; j < 3; j++) { - p2[2-j][0] = temp[2-j]; + p2[2-j][0] = temp[j]; } edges[0].setParts(p0); From d400ae8c2b1e6d881e6269e0359d91b94a7df83f Mon Sep 17 00:00:00 2001 From: MuravAna Date: Sat, 7 Feb 2026 11:06:20 +0300 Subject: [PATCH 3/3] Add fix for RubicksCube --- .../hse/java/practice/task1/RubiksCube.java | 77 ++++++++++++------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index c816ccda..4c2d91c5 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -42,31 +42,36 @@ public void up(RotateDirection direction) { this.rotateEdgeClockwise(0); CubeColor[] temp = new CubeColor[3]; CubeColor[][] p2 = edges[2].getParts(); - CubeColor[][] p3= edges[3].getParts(); + CubeColor[][] p3 = edges[3].getParts(); CubeColor[][] p4 = edges[4].getParts(); CubeColor[][] p5 = edges[5].getParts(); + for (int j = 0; j < 3; j++) { - temp[j] = p2[0][j]; - } - for (int j = 0; j < 3; j++) { - p2[0][j] = p4[0][j]; + temp[j] = p4[0][j]; } + for (int j = 0; j < 3; j++) { p4[0][j] = p3[0][j]; } + for (int j = 0; j < 3; j++) { p3[0][j] = p5[0][j]; } + + for (int j = 0; j < 3; j++) { + p5[0][j] = p2[0][j]; + } + for (int j = 0; j < 3; j++) { - p5[0][j] = temp[j]; + p2[0][j] = temp[j]; } + edges[2].setParts(p2); edges[3].setParts(p3); edges[4].setParts(p4); edges[5].setParts(p5); } } - @Override public void down(RotateDirection direction) { int k = 1; @@ -82,19 +87,23 @@ public void down(RotateDirection direction) { CubeColor[][] p5 = edges[5].getParts(); for (int j = 0; j < 3; j++) { - temp[j] = p2[2][j]; + temp[j] = p4[2][j]; } + for (int j = 0; j < 3; j++) { - p2[2][j] = p4[2][j]; + p4[2][j] = p2[2][j]; } + for (int j = 0; j < 3; j++) { - p4[2][j] = p3[2][j]; + p2[2][j] = p5[2][j]; } + for (int j = 0; j < 3; j++) { - p3[2][j] = p5[2][j]; + p5[2][j] = p3[2][j]; } + for (int j = 0; j < 3; j++) { - p5[2][j] = temp[j]; + p3[2][j] = temp[j]; } edges[2].setParts(p2); @@ -121,17 +130,21 @@ public void left(RotateDirection direction) { for (int j = 0; j < 3; j++) { temp[j] = p0[j][0]; } + for (int j = 0; j < 3; j++) { - p0[j][0] = p4[j][0]; + p0[j][0] = p5[2-j][2]; } + for (int j = 0; j < 3; j++) { - p4[j][0] = p1[j][0]; + p5[j][2] = p1[2-j][0]; } + for (int j = 0; j < 3; j++) { - p1[j][0] = p5[2-j][2]; + p1[j][0] = p4[j][0]; } + for (int j = 0; j < 3; j++) { - p5[2-j][2] = temp[j]; + p4[j][0] = temp[j]; } edges[0].setParts(p0); @@ -158,17 +171,21 @@ public void right(RotateDirection direction) { for (int j = 0; j < 3; j++) { temp[j] = p0[j][2]; } + for (int j = 0; j < 3; j++) { - p0[j][2] = p5[2-j][0]; + p0[j][2] = p4[j][2]; } + for (int j = 0; j < 3; j++) { - p5[2-j][0] = p1[j][2]; + p4[j][2] = p1[j][2]; } + for (int j = 0; j < 3; j++) { - p1[j][2] = p4[j][2]; + p1[j][2] = p5[2-j][0]; } + for (int j = 0; j < 3; j++) { - p4[j][2] = temp[j]; + p5[j][0] = temp[2-j]; } edges[0].setParts(p0); @@ -195,17 +212,21 @@ public void front(RotateDirection direction) { for (int j = 0; j < 3; j++) { temp[j] = p0[2][j]; } + for (int j = 0; j < 3; j++) { - p0[2][j] = p2[2-j][2]; + p0[2][j] = p2[j][2]; } + for (int j = 0; j < 3; j++) { - p2[2-j][2] = p1[0][2-j]; + p2[j][2] = p1[0][2-j]; } + for (int j = 0; j < 3; j++) { - p1[0][2-j] = p3[j][0]; + p1[0][j] = p3[j][0]; } + for (int j = 0; j < 3; j++) { - p3[j][0] = temp[j]; + p3[j][0] = temp[2-j]; } edges[0].setParts(p0); @@ -232,17 +253,21 @@ public void back(RotateDirection direction) { for (int j = 0; j < 3; j++) { temp[j] = p0[0][j]; } + for (int j = 0; j < 3; j++) { p0[0][j] = p3[j][2]; } + for (int j = 0; j < 3; j++) { p3[j][2] = p1[2][2-j]; } + for (int j = 0; j < 3; j++) { - p1[2][2-j] = p2[2-j][0]; + p1[2][j] = p2[j][0]; } + for (int j = 0; j < 3; j++) { - p2[2-j][0] = temp[j]; + p2[j][0] = temp[2-j]; } edges[0].setParts(p0);