From 64e83805e4cc856be0059c21db0b4d9d7ed2199e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BC=8A=E8=97=A4=20=E8=81=96=E5=A4=9C?= Date: Tue, 16 Jul 2024 10:19:36 +0900 Subject: [PATCH 1/3] =?UTF-8?q?paiza=E3=81=AEB145=E3=81=AE=E5=9B=9E?= =?UTF-8?q?=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B145_BINGO.java | 172 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 sitou/src/B145_BINGO.java diff --git a/sitou/src/B145_BINGO.java b/sitou/src/B145_BINGO.java new file mode 100644 index 0000000..5261418 --- /dev/null +++ b/sitou/src/B145_BINGO.java @@ -0,0 +1,172 @@ +package src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class B145_BINGO { + public static void main(String[] args) { + B145_BINGO b145 = new B145_BINGO(); + } + + private final InputData inData; + + public B145_BINGO() { + this(input()); + + int result = execute(); + + output(result); + } + + public B145_BINGO(final InputData data) { + this.inData = data; + } + + private int execute() { + + PunchCard p = new PunchCard(inData.cardSize); + final List> punched_card = p.Punch(inData); + int result = p.BINGO(inData.cardSize, punched_card); + + return result; + } + + private static InputData input() { + Scanner sc = new Scanner(System.in); + final int cardSize = sc.nextInt(); + final int lotteryCount = sc.nextInt(); + + final List> originCard = new ArrayList>(); + for (int i = 0; i < cardSize; i++) { + List list = new ArrayList<>(); + for (int j = 0; j < cardSize; j++) { + list.add(sc.nextInt()); + } + originCard.add(list); + } + + final List lotteryList = new ArrayList(); + for (int i = 0; i < lotteryCount; i++) { + lotteryList.add(sc.nextInt()); + } + + sc.close(); + return new InputData(cardSize, originCard, lotteryList); + } + + private void output(final int result) { + System.out.println(result); + } + + private static class InputData { + final int cardSize; + final List> originCard; + final List lotteryList; + + public InputData(final int cardSize, + final List> originCard, List lotteryList) { + this.cardSize = cardSize; + this.originCard = originCard; + this.lotteryList = lotteryList; + } + } + + private static class PunchCard { + final List> punchCard = new ArrayList>(); + + public PunchCard(final int cardSize) { + for (int i = 0; i < cardSize; i++) { + List list = new ArrayList<>(); + for (int j = 0; j < cardSize; j++) { + list.add(0); + } + punchCard.add(list); + } + + } + + public List> Punch(final InputData inData) { + List> punched_card = punchCard; + + int center = (inData.cardSize - 1) / 2; + punched_card.get(center).set(center, 1); + + for (int lottery = 0; lottery < inData.lotteryList.size(); lottery++) { + int lotteryNum = inData.lotteryList.get(lottery); + + for (int i = 0; i < inData.cardSize; i++) { + for (int j = 0; j < inData.cardSize; j++) { + if (lotteryNum == inData.originCard.get(i).get(j)) { + punched_card.get(i).set(j, 1); + } + } + } + + } + return punched_card; + } + + public int BINGO(final int cardSize, final List> punched_card) { + int result = 0; + result = horizontals(result, cardSize, punched_card); + result = verticals(result, cardSize, punched_card); + result = diagonals(result, cardSize, punched_card); + + return result; + } + + public int horizontals(final int result, final int cardSize, + final List> punched_card) { + int newResult = result; + for (int i = 0; i < cardSize; i++) { + int countPunched = 0; + for (int j = 0; j < cardSize; j++) { + if (punched_card.get(i).get(j) == 1) + countPunched++; + } + if (countPunched == cardSize) + newResult++; + } + return newResult; + } + + public int verticals(final int result, final int cardSize, + final List> punched_card) { + int newResult = result; + for (int i = 0; i < cardSize; i++) { + int countPunched = 0; + for (int j = 0; j < cardSize; j++) { + if (punched_card.get(j).get(i) == 1) + countPunched++; + } + if (countPunched == cardSize) + newResult++; + } + return newResult; + } + + public int diagonals(final int result, final int cardSize, + final List> punched_card) { + int newResult = result; + int countPunchedBackSlashLine = 0; + int countPunchedSlashLine = 0; + int x = cardSize - 1; + for (int i = 0; i < cardSize; i++) { + + if (punched_card.get(i).get(i) == 1) // 左上から右下にチェック + countPunchedBackSlashLine++; + if (punched_card.get(i).get(x - i) == 1) // 右上から左下にチェック + countPunchedSlashLine++; + + } + if (countPunchedBackSlashLine == cardSize) + newResult++; + if (countPunchedSlashLine == cardSize) + newResult++; + + return newResult; + } + } + +} -- GitLab From 687e33a948a12501b2f70fdc5f169ad4fbed4c4d Mon Sep 17 00:00:00 2001 From: sitou Date: Thu, 18 Jul 2024 06:40:37 +0000 Subject: [PATCH 2/3] =?UTF-8?q?B145=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B145_BINGO.java | 127 +++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/sitou/src/B145_BINGO.java b/sitou/src/B145_BINGO.java index 5261418..3ee1057 100644 --- a/sitou/src/B145_BINGO.java +++ b/sitou/src/B145_BINGO.java @@ -6,32 +6,32 @@ import java.util.Scanner; public class B145_BINGO { public static void main(String[] args) { - B145_BINGO b145 = new B145_BINGO(); + B145_BINGO bingo = new B145_BINGO(); + bingo.execute(); } - private final InputData inData; - public B145_BINGO() { - this(input()); - - int result = execute(); - - output(result); } - - public B145_BINGO(final InputData data) { - this.inData = data; + + void execute() { + final InputData inputData = input(); + final int result = solveBingo(inputData); //InputDataと同じようにResultクラスを作ったがうまくいかない + output(result); } + + private static class InputData { + final int cardSize; + final List> originCard; + final List lotteryList; - private int execute() { - - PunchCard p = new PunchCard(inData.cardSize); - final List> punched_card = p.Punch(inData); - int result = p.BINGO(inData.cardSize, punched_card); - - return result; + public InputData(final int cardSize, + final List> originCard, List lotteryList) { + this.cardSize = cardSize; + this.originCard = originCard; + this.lotteryList = lotteryList; + } } - + private static InputData input() { Scanner sc = new Scanner(System.in); final int cardSize = sc.nextInt(); @@ -54,24 +54,20 @@ public class B145_BINGO { sc.close(); return new InputData(cardSize, originCard, lotteryList); } + + static int solveBingo(InputData inputData) { + PunchCard p = new PunchCard(inputData.cardSize); + final List> punched_card = p.punch(inputData); + int result = p.countBingo(inputData.cardSize, punched_card); + + return result; + + } private void output(final int result) { System.out.println(result); } - private static class InputData { - final int cardSize; - final List> originCard; - final List lotteryList; - - public InputData(final int cardSize, - final List> originCard, List lotteryList) { - this.cardSize = cardSize; - this.originCard = originCard; - this.lotteryList = lotteryList; - } - } - private static class PunchCard { final List> punchCard = new ArrayList>(); @@ -86,19 +82,18 @@ public class B145_BINGO { } - public List> Punch(final InputData inData) { - List> punched_card = punchCard; + public List> punch(final InputData inputData) { + List> punched_card = new ArrayList>(punchCard); - int center = (inData.cardSize - 1) / 2; - punched_card.get(center).set(center, 1); + int center = (inputData.cardSize - 1) / 2; + punched_card.get(center).set(center, IS_OPENED); - for (int lottery = 0; lottery < inData.lotteryList.size(); lottery++) { - int lotteryNum = inData.lotteryList.get(lottery); + for (int lotteryNum : inputData.lotteryList) { - for (int i = 0; i < inData.cardSize; i++) { - for (int j = 0; j < inData.cardSize; j++) { - if (lotteryNum == inData.originCard.get(i).get(j)) { - punched_card.get(i).set(j, 1); + for (int i = 0; i < inputData.cardSize; i++) { + for (int j = 0; j < inputData.cardSize; j++) { + if (lotteryNum == inputData.originCard.get(i).get(j)) { + punched_card.get(i).set(j, IS_OPENED); } } } @@ -107,65 +102,69 @@ public class B145_BINGO { return punched_card; } - public int BINGO(final int cardSize, final List> punched_card) { + public int countBingo(final int cardSize, final List> punched_card) { int result = 0; - result = horizontals(result, cardSize, punched_card); - result = verticals(result, cardSize, punched_card); - result = diagonals(result, cardSize, punched_card); + result += countHorizontals(cardSize, punched_card); + result += countVerticals( cardSize, punched_card); + result += countDiagonals(cardSize, punched_card); return result; } - public int horizontals(final int result, final int cardSize, + private static final int IS_OPENED = 1; + + public int countHorizontals(final int cardSize, final List> punched_card) { - int newResult = result; + int result = 0; for (int i = 0; i < cardSize; i++) { int countPunched = 0; for (int j = 0; j < cardSize; j++) { - if (punched_card.get(i).get(j) == 1) + if (punched_card.get(i).get(j) == IS_OPENED) countPunched++; } if (countPunched == cardSize) - newResult++; + result++; } - return newResult; + return result; } - public int verticals(final int result, final int cardSize, + public int countVerticals(final int cardSize, final List> punched_card) { - int newResult = result; + int result = 0; for (int i = 0; i < cardSize; i++) { int countPunched = 0; for (int j = 0; j < cardSize; j++) { - if (punched_card.get(j).get(i) == 1) + if (punched_card.get(j).get(i) == IS_OPENED) { countPunched++; + } + } + if (countPunched == cardSize) { + result++; } - if (countPunched == cardSize) - newResult++; } - return newResult; + return result; } - public int diagonals(final int result, final int cardSize, + public int countDiagonals(final int cardSize, final List> punched_card) { - int newResult = result; + int result = 0; int countPunchedBackSlashLine = 0; int countPunchedSlashLine = 0; int x = cardSize - 1; for (int i = 0; i < cardSize; i++) { - if (punched_card.get(i).get(i) == 1) // 左上から右下にチェック + if (punched_card.get(i).get(i) == IS_OPENED) // 左上から右下にチェック countPunchedBackSlashLine++; - if (punched_card.get(i).get(x - i) == 1) // 右上から左下にチェック + if (punched_card.get(i).get(x - i) == IS_OPENED) // 右上から左下にチェック countPunchedSlashLine++; } if (countPunchedBackSlashLine == cardSize) - newResult++; + result++; if (countPunchedSlashLine == cardSize) - newResult++; + result++; - return newResult; + return result; } } -- GitLab From 67a404723fa118fcf166d184f9f6266776563675 Mon Sep 17 00:00:00 2001 From: sitou Date: Fri, 19 Jul 2024 00:49:53 +0000 Subject: [PATCH 3/3] =?UTF-8?q?B145=E3=81=AE=E4=BF=AE=E6=AD=A3=E2=91=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B145_BINGO.java | 68 ++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/sitou/src/B145_BINGO.java b/sitou/src/B145_BINGO.java index 3ee1057..240b091 100644 --- a/sitou/src/B145_BINGO.java +++ b/sitou/src/B145_BINGO.java @@ -10,15 +10,14 @@ public class B145_BINGO { bingo.execute(); } - public B145_BINGO() { - } - + public B145_BINGO() {} + void execute() { final InputData inputData = input(); - final int result = solveBingo(inputData); //InputDataと同じようにResultクラスを作ったがうまくいかない + final Result result = solveBingo(inputData); output(result); } - + private static class InputData { final int cardSize; final List> originCard; @@ -31,7 +30,7 @@ public class B145_BINGO { this.lotteryList = lotteryList; } } - + private static InputData input() { Scanner sc = new Scanner(System.in); final int cardSize = sc.nextInt(); @@ -54,18 +53,30 @@ public class B145_BINGO { sc.close(); return new InputData(cardSize, originCard, lotteryList); } - - static int solveBingo(InputData inputData) { + + static Result solveBingo(InputData inputData) { PunchCard p = new PunchCard(inputData.cardSize); final List> punched_card = p.punch(inputData); int result = p.countBingo(inputData.cardSize, punched_card); - return result; - - } + return new Result(result); + + } + + private static class Result { + final int numOfBingos; + + public Result(final int numOfBingos) { + this.numOfBingos = numOfBingos; + } - private void output(final int result) { - System.out.println(result); + int getNumOfBingos() { + return numOfBingos; + } + } + + private void output(final Result result) { + System.out.println(result.getNumOfBingos()); } private static class PunchCard { @@ -83,7 +94,12 @@ public class B145_BINGO { } public List> punch(final InputData inputData) { - List> punched_card = new ArrayList>(punchCard); + List> punched_card = new ArrayList>(); + + for (int i = 0; i < inputData.cardSize; i++) { + List list = (List) ((ArrayList) punchCard.get(i)).clone(); + punched_card.add(list); + } int center = (inputData.cardSize - 1) / 2; punched_card.get(center).set(center, IS_OPENED); @@ -105,25 +121,27 @@ public class B145_BINGO { public int countBingo(final int cardSize, final List> punched_card) { int result = 0; result += countHorizontals(cardSize, punched_card); - result += countVerticals( cardSize, punched_card); + result += countVerticals(cardSize, punched_card); result += countDiagonals(cardSize, punched_card); return result; } - private static final int IS_OPENED = 1; - + static final int IS_OPENED = 1; + public int countHorizontals(final int cardSize, final List> punched_card) { int result = 0; for (int i = 0; i < cardSize; i++) { int countPunched = 0; for (int j = 0; j < cardSize; j++) { - if (punched_card.get(i).get(j) == IS_OPENED) + if (punched_card.get(i).get(j) == IS_OPENED) { countPunched++; + } } - if (countPunched == cardSize) + if (countPunched == cardSize) { result++; + } } return result; } @@ -153,16 +171,20 @@ public class B145_BINGO { int x = cardSize - 1; for (int i = 0; i < cardSize; i++) { - if (punched_card.get(i).get(i) == IS_OPENED) // 左上から右下にチェック + if (punched_card.get(i).get(i) == IS_OPENED) { // 左上から右下にチェック countPunchedBackSlashLine++; - if (punched_card.get(i).get(x - i) == IS_OPENED) // 右上から左下にチェック + } + if (punched_card.get(i).get(x - i) == IS_OPENED) {// 右上から左下にチェック countPunchedSlashLine++; + } } - if (countPunchedBackSlashLine == cardSize) + if (countPunchedBackSlashLine == cardSize) { result++; - if (countPunchedSlashLine == cardSize) + } + if (countPunchedSlashLine == cardSize) { result++; + } return result; } -- GitLab