From 0f2a74be9aaedef7aedc60c47d6b5864746d1cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Wed, 16 Oct 2024 15:36:01 +0900 Subject: [PATCH 1/5] =?UTF-8?q?paizaB=E3=81=AE=E5=95=8F=E9=A1=8C138?= =?UTF-8?q?=E3=81=AE=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/src/FindDounutShape.java | 78 +++++++++++++++++++++ ksugawara/src/FindDounutShapeB138.java | 17 +++++ ksugawara/test/FindDounutShapeB138Test.java | 68 ++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 ksugawara/src/FindDounutShape.java create mode 100644 ksugawara/src/FindDounutShapeB138.java create mode 100644 ksugawara/test/FindDounutShapeB138Test.java diff --git a/ksugawara/src/FindDounutShape.java b/ksugawara/src/FindDounutShape.java new file mode 100644 index 0000000..e331586 --- /dev/null +++ b/ksugawara/src/FindDounutShape.java @@ -0,0 +1,78 @@ +package ksugawara; + +import java.util.Scanner; + +/** + * コメント. + */ +class FindDounutShape { + private int dounutShapeCount = 0; // 最大値を格納する変数 + private int height; // マス目の縦の大きさ + private int width; // マス目の横の大きさ + private char[][] matrix; // マス目に書かれた記号を格納する二次元配列 + + /** + * 標準入力された値を変数や配列に格納する関数. + */ + public void storeInputValues() { + final Scanner sc = new Scanner(System.in); + this.height = sc.nextInt(); + this.width = sc.nextInt(); + final String[] stringArray = new String[height]; + this.matrix = new char[height][width]; + + // 標準入力された二次元配列を一度文字列として一次元配列に格納する + for (int j = 0; j < height; j++) { + stringArray[j] = sc.next(); + } + + sc.close(); + + // 先ほどの文字列型の一次元配列を文字型で二次元配列に格納する + for (int row = 0; row < height; row++) { + for (int col = 0; col < width; col++) { + matrix[row][col] = stringArray[row].charAt(col); + } + } + } + + // ドーナッツの形を求める + int getDounutShapeCount() { + dounutShapeCount = horizontaldounutShapeCount(); + return dounutShapeCount; + } + + // ドーナッツ型の形の数を数える関数。 + int horizontaldounutShapeCount() { + int dounutShapeSum = 0; + for (int row = 1; row < height - 1; row++) { + for (int col = 1; col < width - 1; col++) { + + if (matrix[row][col] == '.' && check(row, col)) { + dounutShapeSum += 1; + } + } + } + return dounutShapeSum; + } + + // matrix[row][col]の周りの記号がすべて#である場合tureを返す。 + boolean check(final int row, final int col) { + + for (int rowCheck = -1; rowCheck <= 1; rowCheck++) { + for (int colCheck = -1; colCheck <= 1; colCheck++) { + final int newRow = row + rowCheck; + final int newCol = col + colCheck; + if (rowCheck == 0 && colCheck == 0) { + if (matrix[newRow][newCol] != '.') { + return false; + } + } else if (matrix[newRow][newCol] != '#') { + return false; + } + } + } + return true; + } + +} diff --git a/ksugawara/src/FindDounutShapeB138.java b/ksugawara/src/FindDounutShapeB138.java new file mode 100644 index 0000000..b3ecb7e --- /dev/null +++ b/ksugawara/src/FindDounutShapeB138.java @@ -0,0 +1,17 @@ +package ksugawara; + +/** + * コメント. + */ +public class FindDounutShapeB138 { + /** + * コメント. + */ + public static void main(final String[] args) { + final FindDounutShape findDounutShape = new FindDounutShape(); + findDounutShape.storeInputValues(); + final int dounutShapeCount = findDounutShape.getDounutShapeCount(); + System.out.println(dounutShapeCount); + } + +} diff --git a/ksugawara/test/FindDounutShapeB138Test.java b/ksugawara/test/FindDounutShapeB138Test.java new file mode 100644 index 0000000..0f132c4 --- /dev/null +++ b/ksugawara/test/FindDounutShapeB138Test.java @@ -0,0 +1,68 @@ +package ksugawara; + +import static org.junit.Assert.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import org.junit.Before; +import org.junit.Test; + +/** + * B138のテストケース. + */ +public class FindDounutShapeB138Test { + private FindDounutShape findDounutShape; + + @Before // 各テストの実行前に呼ばれる + public void setUp() { + findDounutShape = new FindDounutShape(); + } + + @Test + public void test34() { + final String input = "3 4\n####\n#.#.#\n####\n#...#\n####\n"; // 入力文字列の作成 + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); // 入力ストリム作成文字列をバイト配列 + System.setIn(inputStream); // 標準入力として設定 + + findDounutShape.storeInputValues(); // 標準入力された値を基に変数や配列に値を格納する + final int actual = findDounutShape.getDounutShapeCount(); // ドーナッツ型の形を数える関数を動かし実際の挙動の値を格納する + final int expected = 1; // 正しく実行された場合の値を格納する + assertEquals(expected, actual); // 実際の値と予測した値が同じ場合、アサーションは成功してテストをパスする。 + } + + @Test + public void test44() { + final String input = "4 3\n###\n#.#\n###\n#.#"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + findDounutShape.storeInputValues(); + final int actual = findDounutShape.getDounutShapeCount(); + final int expected = 1; + assertEquals(expected, actual); + } + + @Test + public void test55() { + final String input = "5 5\n#####\n#...#\n#.#.#\n#...#\n#####\n"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + findDounutShape.storeInputValues(); + final int actual = findDounutShape.getDounutShapeCount(); + final int expected = 0; + assertEquals(expected, actual); + } + + @Test + public void test77() { + final String input = "7 7\n#######\n#.#.#.#\n#######\n#.#.#.#\n#######\n#.#.#.#\n#######"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + findDounutShape.storeInputValues(); + final int actual = findDounutShape.getDounutShapeCount(); + final int expected = 9; + assertEquals(expected, actual); + } +} -- GitLab From 8941260696793710a9bf75290f3d610fe2f5edad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Wed, 16 Oct 2024 16:52:25 +0900 Subject: [PATCH 2/5] =?UTF-8?q?paizaB=E3=81=AE=E5=95=8F=E9=A1=8C138?= =?UTF-8?q?=E3=81=AE=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/src/FindDounutShape.java | 4 ++-- ksugawara/src/FindDounutShapeB138.java | 4 ++-- ksugawara/test/FindDounutShapeB138Test.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ksugawara/src/FindDounutShape.java b/ksugawara/src/FindDounutShape.java index e331586..62f4fcb 100644 --- a/ksugawara/src/FindDounutShape.java +++ b/ksugawara/src/FindDounutShape.java @@ -3,7 +3,7 @@ package ksugawara; import java.util.Scanner; /** - * コメント. + * ドーナッツの形をカウントするクラス. */ class FindDounutShape { private int dounutShapeCount = 0; // 最大値を格納する変数 @@ -42,7 +42,7 @@ class FindDounutShape { return dounutShapeCount; } - // ドーナッツ型の形の数を数える関数。 + // 二次元配列の中に、「.」の周りが「#」だけの数をカウントするクラス int horizontaldounutShapeCount() { int dounutShapeSum = 0; for (int row = 1; row < height - 1; row++) { diff --git a/ksugawara/src/FindDounutShapeB138.java b/ksugawara/src/FindDounutShapeB138.java index b3ecb7e..d404e09 100644 --- a/ksugawara/src/FindDounutShapeB138.java +++ b/ksugawara/src/FindDounutShapeB138.java @@ -1,11 +1,11 @@ package ksugawara; /** - * コメント. + * ksugawara 「B138:ドーナツ」の回答プログラムのクラス. */ public class FindDounutShapeB138 { /** - * コメント. + * 与えられた条件を基に、ドーナッツ型の数をカウントするプログラム. */ public static void main(final String[] args) { final FindDounutShape findDounutShape = new FindDounutShape(); diff --git a/ksugawara/test/FindDounutShapeB138Test.java b/ksugawara/test/FindDounutShapeB138Test.java index 0f132c4..2193d9f 100644 --- a/ksugawara/test/FindDounutShapeB138Test.java +++ b/ksugawara/test/FindDounutShapeB138Test.java @@ -27,7 +27,7 @@ public class FindDounutShapeB138Test { findDounutShape.storeInputValues(); // 標準入力された値を基に変数や配列に値を格納する final int actual = findDounutShape.getDounutShapeCount(); // ドーナッツ型の形を数える関数を動かし実際の挙動の値を格納する final int expected = 1; // 正しく実行された場合の値を格納する - assertEquals(expected, actual); // 実際の値と予測した値が同じ場合、アサーションは成功してテストをパスする。 + assertEquals(expected, actual); // 実際の値と予測した値が同じ場合、テスト合格 } @Test -- GitLab From 16cd1fe6a18f39673587e7d9a152fb78e86fdbf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Thu, 17 Oct 2024 09:26:00 +0900 Subject: [PATCH 3/5] =?UTF-8?q?paizaB=E3=81=AE=E5=95=8F=E9=A1=8C138?= =?UTF-8?q?=E3=81=AE=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/src/FindDounutShape.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ksugawara/src/FindDounutShape.java b/ksugawara/src/FindDounutShape.java index 62f4fcb..0799b5a 100644 --- a/ksugawara/src/FindDounutShape.java +++ b/ksugawara/src/FindDounutShape.java @@ -42,7 +42,7 @@ class FindDounutShape { return dounutShapeCount; } - // 二次元配列の中に、「.」の周りが「#」だけの数をカウントするクラス + // 二次元配列の中に、「.」の周りが「#」だけの数をカウントする int horizontaldounutShapeCount() { int dounutShapeSum = 0; for (int row = 1; row < height - 1; row++) { -- GitLab From 0a884a9ec5a6d6c72a154c9b7b53e3d553c9a968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Thu, 17 Oct 2024 13:09:05 +0900 Subject: [PATCH 4/5] =?UTF-8?q?paizaB=E3=81=AE=E5=95=8F=E9=A1=8C138?= =?UTF-8?q?=E3=81=AE=E3=83=89=E3=83=BC=E3=83=8A=E3=83=84=E3=81=AE=E8=AA=B2?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/src/FindDounutShape.java | 25 +++++++++---------------- ksugawara/src/FindDounutShapeB138.java | 8 ++++---- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/ksugawara/src/FindDounutShape.java b/ksugawara/src/FindDounutShape.java index 0799b5a..909018e 100644 --- a/ksugawara/src/FindDounutShape.java +++ b/ksugawara/src/FindDounutShape.java @@ -3,10 +3,9 @@ package ksugawara; import java.util.Scanner; /** - * ドーナッツの形をカウントするクラス. + * ドーナッツの形を見つけるクラス. */ -class FindDounutShape { - private int dounutShapeCount = 0; // 最大値を格納する変数 +class DonutShapeFinder { private int height; // マス目の縦の大きさ private int width; // マス目の横の大きさ private char[][] matrix; // マス目に書かれた記号を格納する二次元配列 @@ -36,28 +35,22 @@ class FindDounutShape { } } - // ドーナッツの形を求める - int getDounutShapeCount() { - dounutShapeCount = horizontaldounutShapeCount(); - return dounutShapeCount; - } - // 二次元配列の中に、「.」の周りが「#」だけの数をカウントする - int horizontaldounutShapeCount() { - int dounutShapeSum = 0; + int countDonutShape() { + int donutShapeSum = 0; for (int row = 1; row < height - 1; row++) { for (int col = 1; col < width - 1; col++) { - if (matrix[row][col] == '.' && check(row, col)) { - dounutShapeSum += 1; + if (isDonutShape(row, col)) { + donutShapeSum += 1; } } } - return dounutShapeSum; + return donutShapeSum; } - // matrix[row][col]の周りの記号がすべて#である場合tureを返す。 - boolean check(final int row, final int col) { + // matrix[row][col]の周りの記号がすべて「#」であり、中心が「.」の場合tureを返す。 + boolean isDonutShape(final int row, final int col) { for (int rowCheck = -1; rowCheck <= 1; rowCheck++) { for (int colCheck = -1; colCheck <= 1; colCheck++) { diff --git a/ksugawara/src/FindDounutShapeB138.java b/ksugawara/src/FindDounutShapeB138.java index d404e09..f3ed468 100644 --- a/ksugawara/src/FindDounutShapeB138.java +++ b/ksugawara/src/FindDounutShapeB138.java @@ -8,10 +8,10 @@ public class FindDounutShapeB138 { * 与えられた条件を基に、ドーナッツ型の数をカウントするプログラム. */ public static void main(final String[] args) { - final FindDounutShape findDounutShape = new FindDounutShape(); - findDounutShape.storeInputValues(); - final int dounutShapeCount = findDounutShape.getDounutShapeCount(); - System.out.println(dounutShapeCount); + final DonutShapeFinder findDonutShape = new DonutShapeFinder(); + findDonutShape.storeInputValues(); + final int donutShapeNum = findDonutShape.countDonutShape(); + System.out.println(donutShapeNum); } } -- GitLab From 347b91ed885a357b1c1721872c35a165adb7d9e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Thu, 17 Oct 2024 15:51:23 +0900 Subject: [PATCH 5/5] =?UTF-8?q?paizaB=E3=81=AE=E5=95=8F=E9=A1=8C138?= =?UTF-8?q?=E3=81=AE=E8=AA=B2=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=EF=BC=88?= =?UTF-8?q?=EF=BC=92=E5=9B=9E=E7=9B=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/src/DonutB138.java | 17 +++++++ ksugawara/src/DonutShapeFinder.java | 71 +++++++++++++++++++++++++++++ ksugawara/test/DonutB138Test.java | 67 +++++++++++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 ksugawara/src/DonutB138.java create mode 100644 ksugawara/src/DonutShapeFinder.java create mode 100644 ksugawara/test/DonutB138Test.java diff --git a/ksugawara/src/DonutB138.java b/ksugawara/src/DonutB138.java new file mode 100644 index 0000000..b3659fe --- /dev/null +++ b/ksugawara/src/DonutB138.java @@ -0,0 +1,17 @@ +package ksugawara; + +/** + * ksugawara 「B138:ドーナツ」の回答プログラムのクラス. + */ +public class DonutB138 { + /** + * 与えられた条件を基に、ドーナッツ型の数をカウントするプログラム. + */ + public static void main(final String[] args) { + final DonutShapeFinder findDonutShape = new DonutShapeFinder(); + findDonutShape.storeInputValues(); + final int donutShapeNum = findDonutShape.countDonutShape(); + System.out.println(donutShapeNum); + } + +} diff --git a/ksugawara/src/DonutShapeFinder.java b/ksugawara/src/DonutShapeFinder.java new file mode 100644 index 0000000..909018e --- /dev/null +++ b/ksugawara/src/DonutShapeFinder.java @@ -0,0 +1,71 @@ +package ksugawara; + +import java.util.Scanner; + +/** + * ドーナッツの形を見つけるクラス. + */ +class DonutShapeFinder { + private int height; // マス目の縦の大きさ + private int width; // マス目の横の大きさ + private char[][] matrix; // マス目に書かれた記号を格納する二次元配列 + + /** + * 標準入力された値を変数や配列に格納する関数. + */ + public void storeInputValues() { + final Scanner sc = new Scanner(System.in); + this.height = sc.nextInt(); + this.width = sc.nextInt(); + final String[] stringArray = new String[height]; + this.matrix = new char[height][width]; + + // 標準入力された二次元配列を一度文字列として一次元配列に格納する + for (int j = 0; j < height; j++) { + stringArray[j] = sc.next(); + } + + sc.close(); + + // 先ほどの文字列型の一次元配列を文字型で二次元配列に格納する + for (int row = 0; row < height; row++) { + for (int col = 0; col < width; col++) { + matrix[row][col] = stringArray[row].charAt(col); + } + } + } + + // 二次元配列の中に、「.」の周りが「#」だけの数をカウントする + int countDonutShape() { + int donutShapeSum = 0; + for (int row = 1; row < height - 1; row++) { + for (int col = 1; col < width - 1; col++) { + + if (isDonutShape(row, col)) { + donutShapeSum += 1; + } + } + } + return donutShapeSum; + } + + // matrix[row][col]の周りの記号がすべて「#」であり、中心が「.」の場合tureを返す。 + boolean isDonutShape(final int row, final int col) { + + for (int rowCheck = -1; rowCheck <= 1; rowCheck++) { + for (int colCheck = -1; colCheck <= 1; colCheck++) { + final int newRow = row + rowCheck; + final int newCol = col + colCheck; + if (rowCheck == 0 && colCheck == 0) { + if (matrix[newRow][newCol] != '.') { + return false; + } + } else if (matrix[newRow][newCol] != '#') { + return false; + } + } + } + return true; + } + +} diff --git a/ksugawara/test/DonutB138Test.java b/ksugawara/test/DonutB138Test.java new file mode 100644 index 0000000..f86049e --- /dev/null +++ b/ksugawara/test/DonutB138Test.java @@ -0,0 +1,67 @@ +package ksugawara; + +import static org.junit.Assert.*; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import org.junit.Before; +import org.junit.Test; + +/** + * B138のテストケース. + */ +public class DonutB138Test { + private DonutShapeFinder findDonutShape; + + @Before // 各テストの実行前に呼ばれる + public void setUp() { + findDonutShape = new DonutShapeFinder(); + } + + @Test + public void test34() { + final String input = "3 4\n####\n#.#.#\n####\n#...#\n####\n"; // 入力文字列の作成 + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); // 入力ストリム作成文字列をバイト配列 + System.setIn(inputStream); // 標準入力として設定 + + findDonutShape.storeInputValues(); // 標準入力された値を基に変数や配列に値を格納する + final int actual = findDonutShape.countDonutShape(); // ドーナッツ型の形を数える関数を動かし実際の挙動の値を格納する + final int expected = 1; // 正しく実行された場合の値を格納する + assertEquals(expected, actual); // 実際の値と予測した値が同じ場合、テスト合格 + } + + @Test + public void test44() { + final String input = "4 3\n###\n#.#\n###\n#.#"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + findDonutShape.storeInputValues(); + final int actual = findDonutShape.countDonutShape(); + final int expected = 1; + assertEquals(expected, actual); + } + + @Test + public void test55() { + final String input = "5 5\n#####\n#...#\n#.#.#\n#...#\n#####\n"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + findDonutShape.storeInputValues(); + final int actual = findDonutShape.countDonutShape(); + final int expected = 0; + assertEquals(expected, actual); + } + + @Test + public void test77() { + final String input = "7 7\n#######\n#.#.#.#\n#######\n#.#.#.#\n#######\n#.#.#.#\n#######"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + findDonutShape.storeInputValues(); + final int actual = findDonutShape.countDonutShape(); + final int expected = 9; + assertEquals(expected, actual); + } +} -- GitLab