From bed6d2f4f0db3217f14186d12b85032e337e3649 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: Fri, 2 Aug 2024 17:28:38 +0900 Subject: [PATCH 1/5] =?UTF-8?q?paiza=E3=81=AEA083=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/A083_SecretMessage.java | 154 ++++++++++++++++++++++++++++++ sitou/src/Adventurer.java | 15 +++ sitou/src/InputData.java | 16 ++++ sitou/src/Parallel.java | 21 ++++ sitou/src/Result.java | 13 +++ sitou/src/TreasureMap.java | 26 +++++ sitou/test/A083_Test.java | 37 +++++++ sitou/test/TreasureMapTest.java | 73 ++++++++++++++ 8 files changed, 355 insertions(+) create mode 100644 sitou/src/A083_SecretMessage.java create mode 100644 sitou/src/Adventurer.java create mode 100644 sitou/src/InputData.java create mode 100644 sitou/src/Parallel.java create mode 100644 sitou/src/Result.java create mode 100644 sitou/src/TreasureMap.java create mode 100644 sitou/test/A083_Test.java create mode 100644 sitou/test/TreasureMapTest.java diff --git a/sitou/src/A083_SecretMessage.java b/sitou/src/A083_SecretMessage.java new file mode 100644 index 0000000..5eb1009 --- /dev/null +++ b/sitou/src/A083_SecretMessage.java @@ -0,0 +1,154 @@ +package src; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Queue; +import java.util.Scanner; + +public class A083_SecretMessage { + + public static void main(String[] args) { + execute(); + } + + static void execute() { + final InputData inputData = input(); + final TreasureMap treasureMap = new TreasureMap(inputData); + final Result result = solve(treasureMap); + output(result); + } + + private static InputData input() { + final Scanner scan = new Scanner(System.in); + final int height = scan.nextInt(); + final int width = scan.nextInt(); + final List mapStatus = new ArrayList(); + + for (int i = 0; i < height; i++) { + mapStatus.add(scan.next()); + } + + scan.close(); + return new InputData(height, width, mapStatus); + + } + + public static Result solve(TreasureMap treasureMap) { + + String result = treasureMap.world.get(0).get(0); + final List resultList = new ArrayList(); + + // 初期値格納 + final Parallel first_time = new Parallel(0, 0, treasureMap.world, result); + final Queue queue = new ArrayDeque<>(); + queue.add(first_time); + + while (true) { + // キューからデータを受け取る + final Parallel parallel = queue.poll(); + + final int nowX = parallel.point.x; + final int nowY = parallel.point.y; + result = parallel.p_result; + + // 世界はディープコピーする + List> now_world = new ArrayList>(); + for (int i = 0; i < treasureMap.height; i++) { + List list = (List) ((ArrayList) parallel.world.get(i)).clone(); + now_world.add(list); + } + + // 今いる場所を次に来れないようにする + now_world.get(nowY).set(nowX, "zzz"); + Adventurer ad = new Adventurer(nowX, nowY); + + // 4方向の文字を確認していく + String sinmoji = "zz"; + int nextX = nowX; + int nextY = nowY; + if ((ad.point.x) + 1 < treasureMap.width && sinmoji + .compareTo(now_world.get(ad.point.y).get((ad.point.x) + 1)) >= 0) { + if (sinmoji.compareTo(now_world.get(ad.point.y).get((ad.point.x) + 1)) == 0) { + final String p_result = result + sinmoji; + final Parallel newParallel = new Parallel((ad.point.x) + 1, ad.point.y, now_world, + p_result); + + queue.add(newParallel); + + } else { + sinmoji = now_world.get(ad.point.y).get(ad.point.x + 1); + nextX = (ad.point.x) + 1; + nextY = ad.point.y; + } + } + if ((ad.point.y) + 1 < treasureMap.height && sinmoji + .compareTo(now_world.get((ad.point.y) + 1).get(ad.point.x)) >= 0) { + if (sinmoji.compareTo(now_world.get((ad.point.y) + 1).get(ad.point.x)) == 0) { + final String p_result = result + sinmoji; + final Parallel newParallel = new Parallel(ad.point.x, (ad.point.y) + 1, now_world, + p_result); + queue.add(newParallel); + + } else { + sinmoji = now_world.get((ad.point.y) + 1).get(ad.point.x); + nextX = ad.point.x; + nextY = (ad.point.y) + 1; + } + } + if (ad.point.x > 0 && sinmoji + .compareTo(now_world.get(ad.point.y).get((ad.point.x) - 1)) >= 0) { + if (sinmoji.compareTo(now_world.get(ad.point.y).get((ad.point.x) - 1)) == 0) { + final String p_result = result + sinmoji; + final Parallel newParallel = new Parallel((ad.point.x) - 1, ad.point.y, now_world, + p_result); + + queue.add(newParallel); + + } else { + sinmoji = now_world.get(ad.point.y).get((ad.point.x) - 1); + nextX = (ad.point.x) - 1; + nextY = ad.point.y; + } + } + if (ad.point.y > 0 && sinmoji + .compareTo(now_world.get((ad.point.y) - 1).get(ad.point.x)) >= 0) { + if (sinmoji.compareTo(now_world.get((ad.point.y) - 1).get(ad.point.x)) == 0) { + final String p_result = result + sinmoji; + final Parallel newParallel = new Parallel(ad.point.x, (ad.point.y) - 1, now_world, + p_result); + + queue.add(newParallel); + + } else { + sinmoji = now_world.get((ad.point.y) - 1).get(ad.point.x); + nextX = ad.point.x; + nextY = (ad.point.y) - 1; + } + } + + final String p_result = result + sinmoji; + + if (nextX == (treasureMap.width) - 1 && nextY == (treasureMap.height) - 1) { + resultList.add(p_result); + } else { + final Parallel newParallel = new Parallel(nextX, nextY, now_world, p_result); + queue.add(newParallel); + } + + if (queue.isEmpty()) { + break; + } + } + + Collections.sort(resultList); + final String resultMassage = resultList.get(0); + return new Result(resultMassage); + } + + private static void output(final Result result) { + System.out.println(result.getMessage()); + } + +} diff --git a/sitou/src/Adventurer.java b/sitou/src/Adventurer.java new file mode 100644 index 0000000..633cb80 --- /dev/null +++ b/sitou/src/Adventurer.java @@ -0,0 +1,15 @@ +package src; + +import java.awt.Point; + +public class Adventurer { + + //冒険家の座標クラス + + final Point point = new Point(); + + public Adventurer(final int x, final int y) { + point.setLocation(x, y); + } + +} diff --git a/sitou/src/InputData.java b/sitou/src/InputData.java new file mode 100644 index 0000000..6aa64f6 --- /dev/null +++ b/sitou/src/InputData.java @@ -0,0 +1,16 @@ +package src; + +import java.util.List; + +public class InputData { + final int height; + final int width; + final List mapStatus; + + public InputData(final int height, final int width, final List mapStatus) { + this.height = height; + this.width = width; + this.mapStatus = mapStatus; + } + +} diff --git a/sitou/src/Parallel.java b/sitou/src/Parallel.java new file mode 100644 index 0000000..099210c --- /dev/null +++ b/sitou/src/Parallel.java @@ -0,0 +1,21 @@ +package src; + +import java.awt.Point; +import java.util.ArrayList; +import java.util.List; + +public class Parallel { + + //queue用にデータをまとめるクラス + + final Point point = new Point(); + List> world = new ArrayList>(); + final String p_result; + + public Parallel(int x, int y, List> world, String p_result) { + point.x = x; + point.y = y; + this.world = world; + this.p_result = p_result; + } +} diff --git a/sitou/src/Result.java b/sitou/src/Result.java new file mode 100644 index 0000000..dc4d4d3 --- /dev/null +++ b/sitou/src/Result.java @@ -0,0 +1,13 @@ +package src; + +public class Result { + final String message; + + public Result(final String message) { + this.message = message; + } + + public final String getMessage() { + return message; + } +} diff --git a/sitou/src/TreasureMap.java b/sitou/src/TreasureMap.java new file mode 100644 index 0000000..9d39c13 --- /dev/null +++ b/sitou/src/TreasureMap.java @@ -0,0 +1,26 @@ +package src; + +import java.util.ArrayList; +import java.util.List; + +public class TreasureMap { + final int height; + final int width; + final List> world = new ArrayList>(); + + public TreasureMap(InputData inputData) { + height = inputData.height; + width = inputData.width; + + //scanした文字列を分解して1文字1マスで扱えるようにする + for (int i = 0; i < height; i++) { + final List list = new ArrayList<>(); + final String mapChar = inputData.mapStatus.get(i); + for (int j = 0; j < width; j++) { + list.add(mapChar.substring(j, j + 1)); + } + world.add(list); + } + } + +} diff --git a/sitou/test/A083_Test.java b/sitou/test/A083_Test.java new file mode 100644 index 0000000..5fc6371 --- /dev/null +++ b/sitou/test/A083_Test.java @@ -0,0 +1,37 @@ +package test; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import java.util.Arrays; +import org.junit.Test; +import src.A083_SecretMessage; +import src.InputData; +import src.Result; +import src.TreasureMap; + +public class A083_Test { + @Test + public void 正しく探索できるかテスト1() { + + final InputData inputData = new InputData(3,5,Arrays.asList("hello","paiza","world")); + TreasureMap treasureMap = new TreasureMap(inputData); + final Result result = A083_SecretMessage.solve(treasureMap); + String actual = result.getMessage(); + + final String expected = "heailload"; + + assertThat(actual, is(expected)); + } + + public void 最も辞書順で小さいメッセージを探索できるかテスト() { + + final InputData inputData = new InputData(3,3,Arrays.asList("abc","bcx","cyz")); + TreasureMap treasureMap = new TreasureMap(inputData); + final Result result = A083_SecretMessage.solve(treasureMap); + String actual = result.getMessage(); + + final String expected = "abcbcxz"; + + assertThat(actual, is(expected)); + } +} diff --git a/sitou/test/TreasureMapTest.java b/sitou/test/TreasureMapTest.java new file mode 100644 index 0000000..6c52480 --- /dev/null +++ b/sitou/test/TreasureMapTest.java @@ -0,0 +1,73 @@ +package test; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; + +public class TreasureMapTest { + @Test + public void マスごとに正しく分割できるかテスト() { + + final List> actual = new ArrayList>(); + final List mapStatus = Arrays.asList("hello", "paiza", "world"); + for (int i = 0; i < 3; i++) { + final List list = new ArrayList<>(); + final String mapChar = mapStatus.get(i); + for (int j = 0; j < 5; j++) { + list.add(mapChar.substring(j, j + 1)); + } + actual.add(list); + } + + final List> expected = new ArrayList>(Arrays + .asList(Arrays.asList("h", "e", "l", "l", "o"), Arrays.asList("p", "a", "i", "z", "a"), + Arrays.asList("w", "o", "r", "l", "d"))); + + assertThat(actual, is(expected)); + + } + + @Test + public void 秘境の大きさが最小の時に正しく分割できるかテスト() { + final List> actual = new ArrayList>(); + final List mapStatus = Arrays.asList("a"); + for (int i = 0; i < 1; i++) { + final List list = new ArrayList<>(); + final String mapChar = mapStatus.get(i); + for (int j = 0; j < 1; j++) { + list.add(mapChar.substring(j, j + 1)); + } + actual.add(list); + } + + final List> expected = new ArrayList>(Arrays + .asList(Arrays.asList("a"))); + + assertThat(actual, is(expected)); + } + + @Test + public void 秘境の大きさが最大の時に正しく分割できるかテスト() { + final List> actual = new ArrayList>(); + final List mapStatus = Arrays + .asList("abcde", "fghij", "klmno", "pqrst", "uvwxy", "zzzzz"); + for (int i = 0; i < 6; i++) { + final List list = new ArrayList<>(); + final String mapChar = mapStatus.get(i); + for (int j = 0; j < 5; j++) { + list.add(mapChar.substring(j, j + 1)); + } + actual.add(list); + } + + final List> expected = new ArrayList>(Arrays + .asList(Arrays.asList("a", "b", "c", "d", "e"), Arrays.asList("f", "g", "h", "i", "j"), + Arrays.asList("k", "l", "m", "n", "o"), Arrays.asList("p", "q", "r", "s", "t"), Arrays + .asList("u", "v", "w", "x", "y"), Arrays.asList("z", "z", "z", "z", "z"))); + + assertThat(actual, is(expected)); + } +} -- GitLab From 1a576258890f693c27d6d909662e237c00d9a74c 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, 6 Aug 2024 11:43:45 +0900 Subject: [PATCH 2/5] =?UTF-8?q?paiza=E3=81=AEB148=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/B148_Rank.java | 49 +++++++++++++++++++ sitou/src/InputData.java | 12 ++--- sitou/src/Result.java | 14 +++--- sitou/src/Score_and_Rank.java | 25 ++++++++++ sitou/test/B148_Test.java | 62 +++++++++++++++++++++++ sitou/test/Score_and_Rank_Test.java | 76 +++++++++++++++++++++++++++++ 6 files changed, 225 insertions(+), 13 deletions(-) create mode 100644 sitou/src/B148_Rank.java create mode 100644 sitou/src/Score_and_Rank.java create mode 100644 sitou/test/B148_Test.java create mode 100644 sitou/test/Score_and_Rank_Test.java diff --git a/sitou/src/B148_Rank.java b/sitou/src/B148_Rank.java new file mode 100644 index 0000000..2131d6c --- /dev/null +++ b/sitou/src/B148_Rank.java @@ -0,0 +1,49 @@ +package src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class B148_Rank { + public static void main(String args[]) { + execute(); + } + + static void execute() { + final InputData inputData = input(); + final Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); + final Result result = solve(inputData, Score_and_Rank); + output(result); + } + + private static InputData input() { + final Scanner scan = new Scanner(System.in); + final int numOfParticipants = scan.nextInt(); + + final List scoreList = new ArrayList<>(); + for (int i = 0; i < numOfParticipants; i++) { + scoreList.add(scan.nextInt()); + } + + scan.close(); + return new InputData(numOfParticipants, scoreList); + + } + + public static Result solve(InputData inputData, Score_and_Rank score_and_rank) { + final List participantsRankList = new ArrayList<>(); + + for(int i :inputData.scoreList) { + participantsRankList.add(score_and_rank.ScoreRankingTable.get(i)); + } + + return new Result(participantsRankList); + } + + private static void output(final Result result) { + for(int i:result.getParticipantsRankList()) { + System.out.println(i); + } + + } +} diff --git a/sitou/src/InputData.java b/sitou/src/InputData.java index 6aa64f6..818cd5d 100644 --- a/sitou/src/InputData.java +++ b/sitou/src/InputData.java @@ -3,14 +3,12 @@ package src; import java.util.List; public class InputData { - final int height; - final int width; - final List mapStatus; + final int numOfParticipants; + final List scoreList; - public InputData(final int height, final int width, final List mapStatus) { - this.height = height; - this.width = width; - this.mapStatus = mapStatus; + public InputData(final int numOfParticipants, final List scoreList) { + this.numOfParticipants = numOfParticipants; + this.scoreList = scoreList; } } diff --git a/sitou/src/Result.java b/sitou/src/Result.java index dc4d4d3..c2dea31 100644 --- a/sitou/src/Result.java +++ b/sitou/src/Result.java @@ -1,13 +1,15 @@ package src; +import java.util.List; + public class Result { - final String message; + private final List participantsRankList; - public Result(final String message) { - this.message = message; + public Result(final List participantsRankList) { + this.participantsRankList= participantsRankList; } - public final String getMessage() { - return message; + public List getParticipantsRankList() { + return participantsRankList; } -} +} \ No newline at end of file diff --git a/sitou/src/Score_and_Rank.java b/sitou/src/Score_and_Rank.java new file mode 100644 index 0000000..8c4b151 --- /dev/null +++ b/sitou/src/Score_and_Rank.java @@ -0,0 +1,25 @@ +package src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Score_and_Rank { + //得点と順位の対応表 + public final Map ScoreRankingTable = new HashMap<>(); + + public Score_and_Rank(InputData inputData) { + final List scoreList_desc = new ArrayList(inputData.scoreList); + Collections.sort(scoreList_desc, Collections.reverseOrder()); + + for(int i = 0; i < inputData.numOfParticipants; i++) { + //前の数字と同じでないとき対応表に登録する + if(i == 0 || (i > 0 && scoreList_desc.get(i) != scoreList_desc.get(i-1))) { + ScoreRankingTable.put(scoreList_desc.get(i), i+1); + } + + } + } +} diff --git a/sitou/test/B148_Test.java b/sitou/test/B148_Test.java new file mode 100644 index 0000000..8a50e24 --- /dev/null +++ b/sitou/test/B148_Test.java @@ -0,0 +1,62 @@ +package test; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; +import src.B148_Rank; +import src.InputData; +import src.Result; +import src.Score_and_Rank; + +public class B148_Test { + @Test + public void 正しく表示() { + final InputData inputData = new InputData(4,Arrays.asList(12,5,36,10)); + Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); + final Result result = B148_Rank.solve(inputData, Score_and_Rank); + List actual = result.getParticipantsRankList(); + + final List expected = Arrays.asList(2,4,1,3); + + assertThat(actual, is(expected)); + } + + @Test + public void 同じ順位が2人いるとき() { + final InputData inputData = new InputData(5,Arrays.asList(35,14,4,23,14)); + Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); + final Result result = B148_Rank.solve(inputData, Score_and_Rank); + List actual = result.getParticipantsRankList(); + + final List expected = Arrays.asList(1,3,5,2,3); + + assertThat(actual, is(expected)); + } + + @Test + public void 全員同じ順位のとき() { + final InputData inputData = new InputData(3,Arrays.asList(10,10,10)); + Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); + final Result result = B148_Rank.solve(inputData, Score_and_Rank); + List actual = result.getParticipantsRankList(); + + final List expected = Arrays.asList(1,1,1); + + assertThat(actual, is(expected)); + } + + @Test + public void 参加者が1人のとき() { + final InputData inputData = new InputData(1,Arrays.asList(2)); + Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); + final Result result = B148_Rank.solve(inputData, Score_and_Rank); + List actual = result.getParticipantsRankList(); + + final List expected = Arrays.asList(1); + + assertThat(actual, is(expected)); + } + +} diff --git a/sitou/test/Score_and_Rank_Test.java b/sitou/test/Score_and_Rank_Test.java new file mode 100644 index 0000000..8583bcd --- /dev/null +++ b/sitou/test/Score_and_Rank_Test.java @@ -0,0 +1,76 @@ +package test; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Test; +import src.InputData; +import src.Score_and_Rank; + +public class Score_and_Rank_Test { + @Test + public void 正しく対応表を作成できる(){ + List test = Arrays.asList(24,5,12,18); + InputData inputData = new InputData(4,test ); + Score_and_Rank score_and_rank = new Score_and_Rank(inputData); + Map actual = score_and_rank.ScoreRankingTable; + + final Map expected = new HashMap<>() ; + expected.put(24,1); + expected.put(5, 4); + expected.put(12, 3); + expected.put(18, 2); + + assertThat(actual, is(expected)); + } + + @Test + public void 同じ得点が2人いるとき() { + List test = Arrays.asList(4,15,21,15,33); + InputData inputData = new InputData(5,test ); + Score_and_Rank score_and_rank = new Score_and_Rank(inputData); + Map actual = score_and_rank.ScoreRankingTable; + + final Map expected = new HashMap<>() ; + expected.put(4, 5); + expected.put(15, 3); + expected.put(21, 2); + expected.put(33, 1); + + assertThat(actual, is(expected)); + } + + @Test + public void 同じ得点が3人いるとき() { + List test = Arrays.asList(77,60,24,3,77,77,53); + InputData inputData = new InputData(7,test ); + Score_and_Rank score_and_rank = new Score_and_Rank(inputData); + Map actual = score_and_rank.ScoreRankingTable; + + final Map expected = new HashMap<>() ; + expected.put(77, 1); + expected.put(60, 4); + expected.put(53, 5); + expected.put(24, 6); + expected.put(3, 7); + + assertThat(actual, is(expected)); + } + + @Test + public void 全員同じ得点のとき() { + List test = Arrays.asList(10,10,10,10); + InputData inputData = new InputData(4,test ); + Score_and_Rank score_and_rank = new Score_and_Rank(inputData); + Map actual = score_and_rank.ScoreRankingTable; + + final Map expected = new HashMap<>() ; + expected.put(10,1); + + assertThat(actual, is(expected)); + } + +} -- GitLab From 28d070211d61ec6319dedcb9bc99c28d0bafde00 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, 6 Aug 2024 15:17:46 +0900 Subject: [PATCH 3/5] =?UTF-8?q?paiza=E3=81=AEB148=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/A083_SecretMessage.java | 154 ---------------------------- sitou/src/Adventurer.java | 15 --- sitou/src/B148_Rank.java | 10 +- sitou/src/Parallel.java | 21 ---- sitou/src/Score_and_Rank.java | 25 ----- sitou/src/TreasureMap.java | 26 ----- sitou/test/A083_Test.java | 37 ------- sitou/test/B148_Test.java | 13 +-- sitou/test/Score_and_Rank_Test.java | 76 -------------- sitou/test/TreasureMapTest.java | 73 ------------- 10 files changed, 10 insertions(+), 440 deletions(-) delete mode 100644 sitou/src/A083_SecretMessage.java delete mode 100644 sitou/src/Adventurer.java delete mode 100644 sitou/src/Parallel.java delete mode 100644 sitou/src/Score_and_Rank.java delete mode 100644 sitou/src/TreasureMap.java delete mode 100644 sitou/test/A083_Test.java delete mode 100644 sitou/test/Score_and_Rank_Test.java delete mode 100644 sitou/test/TreasureMapTest.java diff --git a/sitou/src/A083_SecretMessage.java b/sitou/src/A083_SecretMessage.java deleted file mode 100644 index 5eb1009..0000000 --- a/sitou/src/A083_SecretMessage.java +++ /dev/null @@ -1,154 +0,0 @@ -package src; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Queue; -import java.util.Scanner; - -public class A083_SecretMessage { - - public static void main(String[] args) { - execute(); - } - - static void execute() { - final InputData inputData = input(); - final TreasureMap treasureMap = new TreasureMap(inputData); - final Result result = solve(treasureMap); - output(result); - } - - private static InputData input() { - final Scanner scan = new Scanner(System.in); - final int height = scan.nextInt(); - final int width = scan.nextInt(); - final List mapStatus = new ArrayList(); - - for (int i = 0; i < height; i++) { - mapStatus.add(scan.next()); - } - - scan.close(); - return new InputData(height, width, mapStatus); - - } - - public static Result solve(TreasureMap treasureMap) { - - String result = treasureMap.world.get(0).get(0); - final List resultList = new ArrayList(); - - // 初期値格納 - final Parallel first_time = new Parallel(0, 0, treasureMap.world, result); - final Queue queue = new ArrayDeque<>(); - queue.add(first_time); - - while (true) { - // キューからデータを受け取る - final Parallel parallel = queue.poll(); - - final int nowX = parallel.point.x; - final int nowY = parallel.point.y; - result = parallel.p_result; - - // 世界はディープコピーする - List> now_world = new ArrayList>(); - for (int i = 0; i < treasureMap.height; i++) { - List list = (List) ((ArrayList) parallel.world.get(i)).clone(); - now_world.add(list); - } - - // 今いる場所を次に来れないようにする - now_world.get(nowY).set(nowX, "zzz"); - Adventurer ad = new Adventurer(nowX, nowY); - - // 4方向の文字を確認していく - String sinmoji = "zz"; - int nextX = nowX; - int nextY = nowY; - if ((ad.point.x) + 1 < treasureMap.width && sinmoji - .compareTo(now_world.get(ad.point.y).get((ad.point.x) + 1)) >= 0) { - if (sinmoji.compareTo(now_world.get(ad.point.y).get((ad.point.x) + 1)) == 0) { - final String p_result = result + sinmoji; - final Parallel newParallel = new Parallel((ad.point.x) + 1, ad.point.y, now_world, - p_result); - - queue.add(newParallel); - - } else { - sinmoji = now_world.get(ad.point.y).get(ad.point.x + 1); - nextX = (ad.point.x) + 1; - nextY = ad.point.y; - } - } - if ((ad.point.y) + 1 < treasureMap.height && sinmoji - .compareTo(now_world.get((ad.point.y) + 1).get(ad.point.x)) >= 0) { - if (sinmoji.compareTo(now_world.get((ad.point.y) + 1).get(ad.point.x)) == 0) { - final String p_result = result + sinmoji; - final Parallel newParallel = new Parallel(ad.point.x, (ad.point.y) + 1, now_world, - p_result); - queue.add(newParallel); - - } else { - sinmoji = now_world.get((ad.point.y) + 1).get(ad.point.x); - nextX = ad.point.x; - nextY = (ad.point.y) + 1; - } - } - if (ad.point.x > 0 && sinmoji - .compareTo(now_world.get(ad.point.y).get((ad.point.x) - 1)) >= 0) { - if (sinmoji.compareTo(now_world.get(ad.point.y).get((ad.point.x) - 1)) == 0) { - final String p_result = result + sinmoji; - final Parallel newParallel = new Parallel((ad.point.x) - 1, ad.point.y, now_world, - p_result); - - queue.add(newParallel); - - } else { - sinmoji = now_world.get(ad.point.y).get((ad.point.x) - 1); - nextX = (ad.point.x) - 1; - nextY = ad.point.y; - } - } - if (ad.point.y > 0 && sinmoji - .compareTo(now_world.get((ad.point.y) - 1).get(ad.point.x)) >= 0) { - if (sinmoji.compareTo(now_world.get((ad.point.y) - 1).get(ad.point.x)) == 0) { - final String p_result = result + sinmoji; - final Parallel newParallel = new Parallel(ad.point.x, (ad.point.y) - 1, now_world, - p_result); - - queue.add(newParallel); - - } else { - sinmoji = now_world.get((ad.point.y) - 1).get(ad.point.x); - nextX = ad.point.x; - nextY = (ad.point.y) - 1; - } - } - - final String p_result = result + sinmoji; - - if (nextX == (treasureMap.width) - 1 && nextY == (treasureMap.height) - 1) { - resultList.add(p_result); - } else { - final Parallel newParallel = new Parallel(nextX, nextY, now_world, p_result); - queue.add(newParallel); - } - - if (queue.isEmpty()) { - break; - } - } - - Collections.sort(resultList); - final String resultMassage = resultList.get(0); - return new Result(resultMassage); - } - - private static void output(final Result result) { - System.out.println(result.getMessage()); - } - -} diff --git a/sitou/src/Adventurer.java b/sitou/src/Adventurer.java deleted file mode 100644 index 633cb80..0000000 --- a/sitou/src/Adventurer.java +++ /dev/null @@ -1,15 +0,0 @@ -package src; - -import java.awt.Point; - -public class Adventurer { - - //冒険家の座標クラス - - final Point point = new Point(); - - public Adventurer(final int x, final int y) { - point.setLocation(x, y); - } - -} diff --git a/sitou/src/B148_Rank.java b/sitou/src/B148_Rank.java index 2131d6c..b7e6bcd 100644 --- a/sitou/src/B148_Rank.java +++ b/sitou/src/B148_Rank.java @@ -1,6 +1,7 @@ package src; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Scanner; @@ -11,8 +12,7 @@ public class B148_Rank { static void execute() { final InputData inputData = input(); - final Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); - final Result result = solve(inputData, Score_and_Rank); + final Result result = solve(inputData); output(result); } @@ -30,11 +30,13 @@ public class B148_Rank { } - public static Result solve(InputData inputData, Score_and_Rank score_and_rank) { + public static Result solve(InputData inputData) { final List participantsRankList = new ArrayList<>(); + final List ranking = new ArrayList<>(inputData.scoreList); + Collections.sort(ranking, Collections.reverseOrder()); for(int i :inputData.scoreList) { - participantsRankList.add(score_and_rank.ScoreRankingTable.get(i)); + participantsRankList.add(ranking.indexOf(i)+1); } return new Result(participantsRankList); diff --git a/sitou/src/Parallel.java b/sitou/src/Parallel.java deleted file mode 100644 index 099210c..0000000 --- a/sitou/src/Parallel.java +++ /dev/null @@ -1,21 +0,0 @@ -package src; - -import java.awt.Point; -import java.util.ArrayList; -import java.util.List; - -public class Parallel { - - //queue用にデータをまとめるクラス - - final Point point = new Point(); - List> world = new ArrayList>(); - final String p_result; - - public Parallel(int x, int y, List> world, String p_result) { - point.x = x; - point.y = y; - this.world = world; - this.p_result = p_result; - } -} diff --git a/sitou/src/Score_and_Rank.java b/sitou/src/Score_and_Rank.java deleted file mode 100644 index 8c4b151..0000000 --- a/sitou/src/Score_and_Rank.java +++ /dev/null @@ -1,25 +0,0 @@ -package src; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Score_and_Rank { - //得点と順位の対応表 - public final Map ScoreRankingTable = new HashMap<>(); - - public Score_and_Rank(InputData inputData) { - final List scoreList_desc = new ArrayList(inputData.scoreList); - Collections.sort(scoreList_desc, Collections.reverseOrder()); - - for(int i = 0; i < inputData.numOfParticipants; i++) { - //前の数字と同じでないとき対応表に登録する - if(i == 0 || (i > 0 && scoreList_desc.get(i) != scoreList_desc.get(i-1))) { - ScoreRankingTable.put(scoreList_desc.get(i), i+1); - } - - } - } -} diff --git a/sitou/src/TreasureMap.java b/sitou/src/TreasureMap.java deleted file mode 100644 index 9d39c13..0000000 --- a/sitou/src/TreasureMap.java +++ /dev/null @@ -1,26 +0,0 @@ -package src; - -import java.util.ArrayList; -import java.util.List; - -public class TreasureMap { - final int height; - final int width; - final List> world = new ArrayList>(); - - public TreasureMap(InputData inputData) { - height = inputData.height; - width = inputData.width; - - //scanした文字列を分解して1文字1マスで扱えるようにする - for (int i = 0; i < height; i++) { - final List list = new ArrayList<>(); - final String mapChar = inputData.mapStatus.get(i); - for (int j = 0; j < width; j++) { - list.add(mapChar.substring(j, j + 1)); - } - world.add(list); - } - } - -} diff --git a/sitou/test/A083_Test.java b/sitou/test/A083_Test.java deleted file mode 100644 index 5fc6371..0000000 --- a/sitou/test/A083_Test.java +++ /dev/null @@ -1,37 +0,0 @@ -package test; - -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; -import java.util.Arrays; -import org.junit.Test; -import src.A083_SecretMessage; -import src.InputData; -import src.Result; -import src.TreasureMap; - -public class A083_Test { - @Test - public void 正しく探索できるかテスト1() { - - final InputData inputData = new InputData(3,5,Arrays.asList("hello","paiza","world")); - TreasureMap treasureMap = new TreasureMap(inputData); - final Result result = A083_SecretMessage.solve(treasureMap); - String actual = result.getMessage(); - - final String expected = "heailload"; - - assertThat(actual, is(expected)); - } - - public void 最も辞書順で小さいメッセージを探索できるかテスト() { - - final InputData inputData = new InputData(3,3,Arrays.asList("abc","bcx","cyz")); - TreasureMap treasureMap = new TreasureMap(inputData); - final Result result = A083_SecretMessage.solve(treasureMap); - String actual = result.getMessage(); - - final String expected = "abcbcxz"; - - assertThat(actual, is(expected)); - } -} diff --git a/sitou/test/B148_Test.java b/sitou/test/B148_Test.java index 8a50e24..99c6a5f 100644 --- a/sitou/test/B148_Test.java +++ b/sitou/test/B148_Test.java @@ -8,14 +8,12 @@ import org.junit.Test; import src.B148_Rank; import src.InputData; import src.Result; -import src.Score_and_Rank; public class B148_Test { @Test public void 正しく表示() { final InputData inputData = new InputData(4,Arrays.asList(12,5,36,10)); - Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); - final Result result = B148_Rank.solve(inputData, Score_and_Rank); + final Result result = B148_Rank.solve(inputData); List actual = result.getParticipantsRankList(); final List expected = Arrays.asList(2,4,1,3); @@ -26,8 +24,7 @@ public class B148_Test { @Test public void 同じ順位が2人いるとき() { final InputData inputData = new InputData(5,Arrays.asList(35,14,4,23,14)); - Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); - final Result result = B148_Rank.solve(inputData, Score_and_Rank); + final Result result = B148_Rank.solve(inputData); List actual = result.getParticipantsRankList(); final List expected = Arrays.asList(1,3,5,2,3); @@ -38,8 +35,7 @@ public class B148_Test { @Test public void 全員同じ順位のとき() { final InputData inputData = new InputData(3,Arrays.asList(10,10,10)); - Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); - final Result result = B148_Rank.solve(inputData, Score_and_Rank); + final Result result = B148_Rank.solve(inputData); List actual = result.getParticipantsRankList(); final List expected = Arrays.asList(1,1,1); @@ -50,8 +46,7 @@ public class B148_Test { @Test public void 参加者が1人のとき() { final InputData inputData = new InputData(1,Arrays.asList(2)); - Score_and_Rank Score_and_Rank = new Score_and_Rank(inputData); - final Result result = B148_Rank.solve(inputData, Score_and_Rank); + final Result result = B148_Rank.solve(inputData); List actual = result.getParticipantsRankList(); final List expected = Arrays.asList(1); diff --git a/sitou/test/Score_and_Rank_Test.java b/sitou/test/Score_and_Rank_Test.java deleted file mode 100644 index 8583bcd..0000000 --- a/sitou/test/Score_and_Rank_Test.java +++ /dev/null @@ -1,76 +0,0 @@ -package test; - -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.Test; -import src.InputData; -import src.Score_and_Rank; - -public class Score_and_Rank_Test { - @Test - public void 正しく対応表を作成できる(){ - List test = Arrays.asList(24,5,12,18); - InputData inputData = new InputData(4,test ); - Score_and_Rank score_and_rank = new Score_and_Rank(inputData); - Map actual = score_and_rank.ScoreRankingTable; - - final Map expected = new HashMap<>() ; - expected.put(24,1); - expected.put(5, 4); - expected.put(12, 3); - expected.put(18, 2); - - assertThat(actual, is(expected)); - } - - @Test - public void 同じ得点が2人いるとき() { - List test = Arrays.asList(4,15,21,15,33); - InputData inputData = new InputData(5,test ); - Score_and_Rank score_and_rank = new Score_and_Rank(inputData); - Map actual = score_and_rank.ScoreRankingTable; - - final Map expected = new HashMap<>() ; - expected.put(4, 5); - expected.put(15, 3); - expected.put(21, 2); - expected.put(33, 1); - - assertThat(actual, is(expected)); - } - - @Test - public void 同じ得点が3人いるとき() { - List test = Arrays.asList(77,60,24,3,77,77,53); - InputData inputData = new InputData(7,test ); - Score_and_Rank score_and_rank = new Score_and_Rank(inputData); - Map actual = score_and_rank.ScoreRankingTable; - - final Map expected = new HashMap<>() ; - expected.put(77, 1); - expected.put(60, 4); - expected.put(53, 5); - expected.put(24, 6); - expected.put(3, 7); - - assertThat(actual, is(expected)); - } - - @Test - public void 全員同じ得点のとき() { - List test = Arrays.asList(10,10,10,10); - InputData inputData = new InputData(4,test ); - Score_and_Rank score_and_rank = new Score_and_Rank(inputData); - Map actual = score_and_rank.ScoreRankingTable; - - final Map expected = new HashMap<>() ; - expected.put(10,1); - - assertThat(actual, is(expected)); - } - -} diff --git a/sitou/test/TreasureMapTest.java b/sitou/test/TreasureMapTest.java deleted file mode 100644 index 6c52480..0000000 --- a/sitou/test/TreasureMapTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package test; - -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.junit.Test; - -public class TreasureMapTest { - @Test - public void マスごとに正しく分割できるかテスト() { - - final List> actual = new ArrayList>(); - final List mapStatus = Arrays.asList("hello", "paiza", "world"); - for (int i = 0; i < 3; i++) { - final List list = new ArrayList<>(); - final String mapChar = mapStatus.get(i); - for (int j = 0; j < 5; j++) { - list.add(mapChar.substring(j, j + 1)); - } - actual.add(list); - } - - final List> expected = new ArrayList>(Arrays - .asList(Arrays.asList("h", "e", "l", "l", "o"), Arrays.asList("p", "a", "i", "z", "a"), - Arrays.asList("w", "o", "r", "l", "d"))); - - assertThat(actual, is(expected)); - - } - - @Test - public void 秘境の大きさが最小の時に正しく分割できるかテスト() { - final List> actual = new ArrayList>(); - final List mapStatus = Arrays.asList("a"); - for (int i = 0; i < 1; i++) { - final List list = new ArrayList<>(); - final String mapChar = mapStatus.get(i); - for (int j = 0; j < 1; j++) { - list.add(mapChar.substring(j, j + 1)); - } - actual.add(list); - } - - final List> expected = new ArrayList>(Arrays - .asList(Arrays.asList("a"))); - - assertThat(actual, is(expected)); - } - - @Test - public void 秘境の大きさが最大の時に正しく分割できるかテスト() { - final List> actual = new ArrayList>(); - final List mapStatus = Arrays - .asList("abcde", "fghij", "klmno", "pqrst", "uvwxy", "zzzzz"); - for (int i = 0; i < 6; i++) { - final List list = new ArrayList<>(); - final String mapChar = mapStatus.get(i); - for (int j = 0; j < 5; j++) { - list.add(mapChar.substring(j, j + 1)); - } - actual.add(list); - } - - final List> expected = new ArrayList>(Arrays - .asList(Arrays.asList("a", "b", "c", "d", "e"), Arrays.asList("f", "g", "h", "i", "j"), - Arrays.asList("k", "l", "m", "n", "o"), Arrays.asList("p", "q", "r", "s", "t"), Arrays - .asList("u", "v", "w", "x", "y"), Arrays.asList("z", "z", "z", "z", "z"))); - - assertThat(actual, is(expected)); - } -} -- GitLab From 83282cb06942cdcf22c23f3e2771812adc8cdeb3 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, 13 Aug 2024 15:54:18 +0900 Subject: [PATCH 4/5] =?UTF-8?q?paiza=E3=81=AEB148=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B148_Rank.java | 30 +++++++++++++++--------------- sitou/src/InputData.java | 4 ++++ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/sitou/src/B148_Rank.java b/sitou/src/B148_Rank.java index b7e6bcd..820ce10 100644 --- a/sitou/src/B148_Rank.java +++ b/sitou/src/B148_Rank.java @@ -9,19 +9,19 @@ public class B148_Rank { public static void main(String args[]) { execute(); } - + static void execute() { final InputData inputData = input(); - final Result result = solve(inputData); + final Result result = solveHowRank(inputData); output(result); } private static InputData input() { final Scanner scan = new Scanner(System.in); final int numOfParticipants = scan.nextInt(); - + final List scoreList = new ArrayList<>(); - for (int i = 0; i < numOfParticipants; i++) { + for (int score = 0; score < numOfParticipants; score++) { scoreList.add(scan.nextInt()); } @@ -29,23 +29,23 @@ public class B148_Rank { return new InputData(numOfParticipants, scoreList); } - - public static Result solve(InputData inputData) { + + public static Result solveHowRank(InputData inputData) { final List participantsRankList = new ArrayList<>(); - final List ranking = new ArrayList<>(inputData.scoreList); + final List ranking = new ArrayList<>(inputData.getScoreList()); Collections.sort(ranking, Collections.reverseOrder()); - - for(int i :inputData.scoreList) { - participantsRankList.add(ranking.indexOf(i)+1); + + for (int i : inputData.getScoreList()) { + participantsRankList.add(ranking.indexOf(i) + 1); } - + return new Result(participantsRankList); } - + private static void output(final Result result) { - for(int i:result.getParticipantsRankList()) { - System.out.println(i); + for (int score : result.getParticipantsRankList()) { + System.out.println(score); } - + } } diff --git a/sitou/src/InputData.java b/sitou/src/InputData.java index 818cd5d..e89f479 100644 --- a/sitou/src/InputData.java +++ b/sitou/src/InputData.java @@ -10,5 +10,9 @@ public class InputData { this.numOfParticipants = numOfParticipants; this.scoreList = scoreList; } + + public final List getScoreList(){ + return scoreList; + } } -- GitLab From 2399857ea8c3695676e23b5c9c416eab30b6612c 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, 13 Aug 2024 16:14:51 +0900 Subject: [PATCH 5/5] =?UTF-8?q?paiza=E3=81=AEB148=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B148_Rank.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sitou/src/B148_Rank.java b/sitou/src/B148_Rank.java index 820ce10..7f8d221 100644 --- a/sitou/src/B148_Rank.java +++ b/sitou/src/B148_Rank.java @@ -21,7 +21,7 @@ public class B148_Rank { final int numOfParticipants = scan.nextInt(); final List scoreList = new ArrayList<>(); - for (int score = 0; score < numOfParticipants; score++) { + for (int count = 0; count < numOfParticipants; count++) { scoreList.add(scan.nextInt()); } @@ -35,16 +35,16 @@ public class B148_Rank { final List ranking = new ArrayList<>(inputData.getScoreList()); Collections.sort(ranking, Collections.reverseOrder()); - for (int i : inputData.getScoreList()) { - participantsRankList.add(ranking.indexOf(i) + 1); + for (int score : inputData.getScoreList()) { + participantsRankList.add(ranking.indexOf(score) + 1); } return new Result(participantsRankList); } private static void output(final Result result) { - for (int score : result.getParticipantsRankList()) { - System.out.println(score); + for (int rank : result.getParticipantsRankList()) { + System.out.println(rank); } } -- GitLab