From e579874042bd159ef510dc56bad54d946f9fe471 Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 12:10:43 +0300 Subject: [PATCH 1/7] done task --- .../java/hse/java/practice/task1/Edge.java | 32 ++++ .../hse/java/practice/task1/RubiksCube.java | 148 +++++++++++++++++- 2 files changed, 179 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..1b725c73 100644 --- a/src/main/java/hse/java/practice/task1/Edge.java +++ b/src/main/java/hse/java/practice/task1/Edge.java @@ -35,4 +35,36 @@ public void setParts(CubeColor[][] parts) { public String toString() { return Arrays.deepToString(parts); } + + public void rotateClockwise() { + CubeColor[][] result_parts = new CubeColor[3][3]; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + result_parts[j][2-i] = parts[i][j]; + } + } + parts = result_parts; + } + + public void setRow(int num, CubeColor[] row) { + parts[num] = row; + } + + public void setCol(int num, CubeColor[] col) { + for (int i = 0; i < 3; i++) { + parts[i][num] = col[i]; + } + } + + public CubeColor[] getRow(int num) { + return parts[num].clone(); + } + + public CubeColor[] getCol(int num) { + CubeColor[] col = new CubeColor[3]; + for (int i = 0; i < 3; i++) { + col[i] = parts[i][num]; + } + return col.clone(); + } } diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 2091b657..c136a939 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -6,7 +6,7 @@ * Необходимо реализовать интерфейс Cube * При повороте передней грани, меняются верх низ право и лево */ -public class RubiksCube { +public class RubiksCube implements Cube { private static final int EDGES_COUNT = 6; @@ -19,6 +19,15 @@ public class RubiksCube { * грань 1 -> цвет 1 * ... */ + + private CubeColor[] rev(CubeColor[] s) { + var sc = s.clone(); + var tmp = sc[0]; + sc[0] = sc[2]; + sc[2] = tmp; + return sc; + } + public RubiksCube() { CubeColor[] colors = CubeColor.values(); for (int i = 0; i < 6; i++) { @@ -26,8 +35,145 @@ public RubiksCube() { } } + @Override public void front(RotateDirection direction) { + var left_col = edges[2].getCol(2); + var up_row = edges[0].getRow(2); + var right_col = edges[3].getCol(0); + var down_row = edges[1].getRow(0); + if (direction == RotateDirection.CLOCKWISE) { + edges[4].rotateClockwise(); + edges[0].setRow(2 ,rev(left_col)); + edges[3].setCol(0 ,up_row); + edges[1].setRow(0 ,rev(right_col)); + edges[2].setCol(2 ,down_row); + } else { + edges[4].rotateClockwise(); + edges[4].rotateClockwise(); + edges[4].rotateClockwise(); + edges[0].setRow(2 ,right_col); + edges[2].setCol(2 ,rev(up_row)); + edges[1].setRow(0 ,left_col); + edges[3].setCol(0 ,rev(down_row)); + } + } + + @Override + public void right(RotateDirection direction) { + var e4 = edges[4].getCol(2); + var e0 = edges[0].getCol(2); + var e5 = edges[5].getCol(2); + var e1 = edges[1].getCol(2); + if (direction == RotateDirection.CLOCKWISE) { + edges[3].rotateClockwise(); + edges[1].setCol(2 , e5); + edges[4].setCol(2 , e1); + edges[0].setCol(2 , e4); + edges[5].setCol(2 , e0); + } else { + edges[3].rotateClockwise(); + edges[3].rotateClockwise(); + edges[3].rotateClockwise(); + edges[1].setCol(2 , e4); + edges[4].setCol(2 , e0); + edges[0].setCol(2 , e5); + edges[5].setCol(2 , e1); + } + } + @Override + public void left(RotateDirection direction) { + var e4 = edges[4].getCol(0); + var e0 = edges[0].getCol(0); + var e5 = edges[5].getCol(0); + var e1 = edges[1].getCol(0); + if (direction == RotateDirection.CLOCKWISE) { + edges[2].rotateClockwise(); + edges[1].setCol(0 , e4); + edges[4].setCol(0 , e0); + edges[0].setCol(0 , e5); + edges[5].setCol(0 , e1); + } else { + edges[2].rotateClockwise(); + edges[2].rotateClockwise(); + edges[2].rotateClockwise(); + + edges[1].setCol(0 , e5); + edges[4].setCol(0 , e1); + edges[0].setCol(0 , e4); + edges[5].setCol(0 , e0); + } + } + + @Override + public void up(RotateDirection direction) { + var e2 = edges[2].getRow(0); + var e4 = edges[4].getRow(0); + var e3 = edges[3].getRow(0); + var e5 = edges[5].getRow(2); + if (direction == RotateDirection.CLOCKWISE) { + edges[0].rotateClockwise(); + edges[3].setRow(0 , rev(e5)); + edges[4].setRow(0 , e3); + edges[2].setRow(0 , e4); + edges[5].setRow(2 , rev(e2)); + } else { + edges[0].rotateClockwise(); + edges[0].rotateClockwise(); + edges[0].rotateClockwise(); + + edges[3].setRow(0 , e4); + edges[4].setRow(0 , e2); + edges[2].setRow(0 , rev(e5)); + edges[5].setRow(2 , rev(e3)); + } + } + + @Override + public void down(RotateDirection direction) { + var e2 = edges[2].getRow(2); + var e4 = edges[4].getRow(2); + var e3 = edges[3].getRow(2); + var e5 = edges[5].getRow(0); + if (direction == RotateDirection.CLOCKWISE) { + edges[1].rotateClockwise(); + edges[4].setRow(2 , e2); + edges[3].setRow(2 , e4); + edges[5].setRow(0 , rev(e3)); + edges[2].setRow(2 , rev(e5)); + } else { + edges[1].rotateClockwise(); + edges[1].rotateClockwise(); + edges[1].rotateClockwise(); + + edges[4].setRow(2 , e3); + edges[3].setRow(2 , rev(e5)); + edges[5].setRow(0 , rev(e2)); + edges[2].setRow(2 , e4); + } + } + + @Override + public void back(RotateDirection direction) { + var e0 = edges[0].getRow(0); + var e1 = edges[1].getRow(2); + var e2 = edges[2].getCol(0); + var e3 = edges[3].getCol(2); + if (direction == RotateDirection.CLOCKWISE) { + edges[5].rotateClockwise(); + edges[0].setRow(0 , e3); + edges[1].setRow(2 , e2); + edges[2].setCol(0 ,rev(e0)); + edges[3].setCol(2 ,rev(e1)); + } else { + edges[5].rotateClockwise(); + edges[5].rotateClockwise(); + edges[5].rotateClockwise(); + edges[0].setRow(0 , rev(e2)); + edges[1].setRow(2 , rev(e3)); + edges[2].setCol(0 , e1); + edges[3].setCol(2 , e0); + } } public Edge[] getEdges() { From f16d9573dec16ceacf6cefb221e2cce69c916da5 Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 12:28:53 +0300 Subject: [PATCH 2/7] done task --- .../hse/java/practice/task1/RubiksCube.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index c136a939..7425d714 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -37,24 +37,24 @@ public RubiksCube() { @Override public void front(RotateDirection direction) { - var left_col = edges[2].getCol(2); - var up_row = edges[0].getRow(2); - var right_col = edges[3].getCol(0); - var down_row = edges[1].getRow(0); + var e0 = edges[0].getRow(2); + var e1 = edges[1].getRow(0); + var e2 = edges[2].getCol(2); + var e3 = edges[3].getCol(0); if (direction == RotateDirection.CLOCKWISE) { edges[4].rotateClockwise(); - edges[0].setRow(2 ,rev(left_col)); - edges[3].setCol(0 ,up_row); - edges[1].setRow(0 ,rev(right_col)); - edges[2].setCol(2 ,down_row); + edges[0].setRow(2 , rev(e2)); + edges[1].setRow(0 , rev(e3)); + edges[2].setCol(2 , e1); + edges[3].setCol(0 , e0); } else { edges[4].rotateClockwise(); edges[4].rotateClockwise(); edges[4].rotateClockwise(); - edges[0].setRow(2 ,right_col); - edges[2].setCol(2 ,rev(up_row)); - edges[1].setRow(0 ,left_col); - edges[3].setCol(0 ,rev(down_row)); + edges[0].setRow(2 , e3); + edges[1].setRow(0 , e2); + edges[2].setCol(2 , rev(e0)); + edges[3].setCol(0 , rev(e1)); } } From 9ec111bf7ca9a6efd078df8da71342923f49de9c Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 12:44:36 +0300 Subject: [PATCH 3/7] done task --- src/main/java/hse/java/practice/task1/Edge.java | 2 +- 1 file changed, 1 insertion(+), 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 1b725c73..b1de58f8 100644 --- a/src/main/java/hse/java/practice/task1/Edge.java +++ b/src/main/java/hse/java/practice/task1/Edge.java @@ -47,7 +47,7 @@ public void rotateClockwise() { } public void setRow(int num, CubeColor[] row) { - parts[num] = row; + parts[num] = row.clone(); } public void setCol(int num, CubeColor[] col) { From 282ffe446b5633bdf665488b906d0fdb74c2b7c9 Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 13:16:44 +0300 Subject: [PATCH 4/7] done task --- .../java/hse/java/practice/task1/Edge.java | 2 +- .../hse/java/practice/task1/RubiksCube.java | 38 ++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/Edge.java b/src/main/java/hse/java/practice/task1/Edge.java index b1de58f8..de0b51a2 100644 --- a/src/main/java/hse/java/practice/task1/Edge.java +++ b/src/main/java/hse/java/practice/task1/Edge.java @@ -65,6 +65,6 @@ public CubeColor[] getCol(int num) { for (int i = 0; i < 3; i++) { col[i] = parts[i][num]; } - return col.clone(); + return col; } } diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index 7425d714..acb94197 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -66,18 +66,18 @@ public void right(RotateDirection direction) { var e1 = edges[1].getCol(2); if (direction == RotateDirection.CLOCKWISE) { edges[3].rotateClockwise(); - edges[1].setCol(2 , e5); + edges[1].setCol(2 , rev(e5)); edges[4].setCol(2 , e1); edges[0].setCol(2 , e4); - edges[5].setCol(2 , e0); + edges[5].setCol(2 , rev(e0)); } else { edges[3].rotateClockwise(); edges[3].rotateClockwise(); edges[3].rotateClockwise(); edges[1].setCol(2 , e4); edges[4].setCol(2 , e0); - edges[0].setCol(2 , e5); - edges[5].setCol(2 , e1); + edges[0].setCol(2 , rev(e5)); + edges[5].setCol(2 , rev(e1)); } } @@ -91,17 +91,17 @@ public void left(RotateDirection direction) { edges[2].rotateClockwise(); edges[1].setCol(0 , e4); edges[4].setCol(0 , e0); - edges[0].setCol(0 , e5); - edges[5].setCol(0 , e1); + edges[0].setCol(0 , rev(e5)); + edges[5].setCol(0 , rev(e1)); } else { edges[2].rotateClockwise(); edges[2].rotateClockwise(); edges[2].rotateClockwise(); - edges[1].setCol(0 , e5); + edges[1].setCol(0 , rev(e5)); edges[4].setCol(0 , e1); edges[0].setCol(0 , e4); - edges[5].setCol(0 , e0); + edges[5].setCol(0 , rev(e0)); } } @@ -110,13 +110,13 @@ public void up(RotateDirection direction) { var e2 = edges[2].getRow(0); var e4 = edges[4].getRow(0); var e3 = edges[3].getRow(0); - var e5 = edges[5].getRow(2); + var e5 = edges[5].getRow(0); if (direction == RotateDirection.CLOCKWISE) { edges[0].rotateClockwise(); edges[3].setRow(0 , rev(e5)); edges[4].setRow(0 , e3); edges[2].setRow(0 , e4); - edges[5].setRow(2 , rev(e2)); + edges[5].setRow(0 , rev(e2)); } else { edges[0].rotateClockwise(); edges[0].rotateClockwise(); @@ -125,7 +125,7 @@ public void up(RotateDirection direction) { edges[3].setRow(0 , e4); edges[4].setRow(0 , e2); edges[2].setRow(0 , rev(e5)); - edges[5].setRow(2 , rev(e3)); + edges[5].setRow(0 , rev(e3)); } } @@ -134,12 +134,12 @@ public void down(RotateDirection direction) { var e2 = edges[2].getRow(2); var e4 = edges[4].getRow(2); var e3 = edges[3].getRow(2); - var e5 = edges[5].getRow(0); + var e5 = edges[5].getRow(2); if (direction == RotateDirection.CLOCKWISE) { edges[1].rotateClockwise(); edges[4].setRow(2 , e2); edges[3].setRow(2 , e4); - edges[5].setRow(0 , rev(e3)); + edges[5].setRow(2 , rev(e3)); edges[2].setRow(2 , rev(e5)); } else { edges[1].rotateClockwise(); @@ -148,7 +148,7 @@ public void down(RotateDirection direction) { edges[4].setRow(2 , e3); edges[3].setRow(2 , rev(e5)); - edges[5].setRow(0 , rev(e2)); + edges[5].setRow(2 , rev(e2)); edges[2].setRow(2 , e4); } } @@ -184,4 +184,14 @@ public Edge[] getEdges() { public String toString() { return Arrays.toString(edges); } + + + public void debug() { + for (int i = 0; i < edges.length; i++) { + System.out.println(i); + for (int j = 0; j < edges[i].getParts().length; j++) { + System.out.println(Arrays.toString(edges[i].getParts()[j])); + } + } + } } From ce81ad4d1db16a9da0e9186bcca7f9e696c3aa07 Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 13:20:54 +0300 Subject: [PATCH 5/7] done task --- src/main/java/hse/java/practice/task1/RubiksCube.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index acb94197..c722419c 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -66,18 +66,18 @@ public void right(RotateDirection direction) { var e1 = edges[1].getCol(2); if (direction == RotateDirection.CLOCKWISE) { edges[3].rotateClockwise(); - edges[1].setCol(2 , rev(e5)); + edges[1].setCol(2 , e5); edges[4].setCol(2 , e1); edges[0].setCol(2 , e4); - edges[5].setCol(2 , rev(e0)); + edges[5].setCol(2 , e0); } else { edges[3].rotateClockwise(); edges[3].rotateClockwise(); edges[3].rotateClockwise(); edges[1].setCol(2 , e4); edges[4].setCol(2 , e0); - edges[0].setCol(2 , rev(e5)); - edges[5].setCol(2 , rev(e1)); + edges[0].setCol(2 , e5); + edges[5].setCol(2 , e1); } } From b0ee38b5d416a57612149b4761d3264ef6ea62fe Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 13:23:04 +0300 Subject: [PATCH 6/7] done task --- 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 c722419c..dd25b474 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -62,22 +62,22 @@ public void front(RotateDirection direction) { public void right(RotateDirection direction) { var e4 = edges[4].getCol(2); var e0 = edges[0].getCol(2); - var e5 = edges[5].getCol(2); + var e5 = edges[5].getCol(0); var e1 = edges[1].getCol(2); if (direction == RotateDirection.CLOCKWISE) { edges[3].rotateClockwise(); - edges[1].setCol(2 , e5); + edges[1].setCol(2 , rev(e5)); edges[4].setCol(2 , e1); edges[0].setCol(2 , e4); - edges[5].setCol(2 , e0); + edges[5].setCol(0 , rev(e0)); } else { edges[3].rotateClockwise(); edges[3].rotateClockwise(); edges[3].rotateClockwise(); edges[1].setCol(2 , e4); edges[4].setCol(2 , e0); - edges[0].setCol(2 , e5); - edges[5].setCol(2 , e1); + edges[0].setCol(2 , rev(e5)); + edges[5].setCol(0 , rev(e1)); } } From 38e1a274590af5f7d7c86e0588ebd168e864a442 Mon Sep 17 00:00:00 2001 From: toximu Date: Tue, 3 Feb 2026 13:24:11 +0300 Subject: [PATCH 7/7] done task --- src/main/java/hse/java/practice/task1/RubiksCube.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/hse/java/practice/task1/RubiksCube.java b/src/main/java/hse/java/practice/task1/RubiksCube.java index dd25b474..9d6932bd 100644 --- a/src/main/java/hse/java/practice/task1/RubiksCube.java +++ b/src/main/java/hse/java/practice/task1/RubiksCube.java @@ -85,14 +85,14 @@ public void right(RotateDirection direction) { public void left(RotateDirection direction) { var e4 = edges[4].getCol(0); var e0 = edges[0].getCol(0); - var e5 = edges[5].getCol(0); + var e5 = edges[5].getCol(2); var e1 = edges[1].getCol(0); if (direction == RotateDirection.CLOCKWISE) { edges[2].rotateClockwise(); edges[1].setCol(0 , e4); edges[4].setCol(0 , e0); edges[0].setCol(0 , rev(e5)); - edges[5].setCol(0 , rev(e1)); + edges[5].setCol(2 , rev(e1)); } else { edges[2].rotateClockwise(); edges[2].rotateClockwise(); @@ -101,7 +101,7 @@ public void left(RotateDirection direction) { edges[1].setCol(0 , rev(e5)); edges[4].setCol(0 , e1); edges[0].setCol(0 , e4); - edges[5].setCol(0 , rev(e0)); + edges[5].setCol(2 , rev(e0)); } }