From d890a535f6d889426a6bcd2579bd53798dddd1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=A4=92=20=E8=80=80=E5=B9=B3?= Date: Fri, 8 Jul 2022 10:33:52 +0900 Subject: [PATCH 1/2] =?UTF-8?q?B095=20=E3=82=AB=E3=83=A9=E3=82=AA=E3=82=B1?= =?UTF-8?q?=E5=A4=A7=E4=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ykoiso/src/B095_Sing.java | 86 ++++++++++++++++++++++++++++++++++ ykoiso/test/B095_SingTest.java | 57 ++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 ykoiso/src/B095_Sing.java create mode 100644 ykoiso/test/B095_SingTest.java diff --git a/ykoiso/src/B095_Sing.java b/ykoiso/src/B095_Sing.java new file mode 100644 index 0000000..b6107a2 --- /dev/null +++ b/ykoiso/src/B095_Sing.java @@ -0,0 +1,86 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +public class B095_Sing { + static final int EXCELLENT = 5; + static final int GREAT = 10; + static final int VERY_GOOD = 20; + static final int GOOD = 30; + static final int BAD = 99; + // 離れたピッチ数と減点する値のマップ + private static Map minusScoreMap = new HashMap<>(); + static { + minusScoreMap.put(EXCELLENT, 0); + minusScoreMap.put(GREAT, 1); + minusScoreMap.put(VERY_GOOD, 2); + minusScoreMap.put(GOOD, 3); + minusScoreMap.put(BAD, 5); + } + + + public static void main(String[] args) { + Scanner scan = new Scanner(System.in); + // 定数の読み込み + final int MEMBER_NUM = scan.nextInt(); + final int SONG_LENGTH = scan.nextInt(); + // 各人のスコア + List score = new ArrayList<>(); + // 正しいピッチ + List correctPitch = new ArrayList<>(); + for (int i = 0; i < SONG_LENGTH; i++) { + correctPitch.add(scan.nextInt()); + } + // 各人のピッチ + List> menberPitch = new ArrayList<>(); + for (int i = 0; i < MEMBER_NUM; i++) { + menberPitch.add(new ArrayList<>()); + } + for (int menber = 0; menber < MEMBER_NUM; menber++) { + for (int i = 0; i < SONG_LENGTH; i++) { + menberPitch.get(menber).add(scan.nextInt()); + } + } + // 各人のスコアの計算 + for (int menber = 0; menber < MEMBER_NUM; menber++) { + score.add(calcSongScore(menberPitch.get(menber), correctPitch)); + } + // 結果の出力 + System.out.println(max(score)); + scan.close(); + } + + // リストの最大値 + public static int max(final List list) { + int max = 0; + for (int i = 0; i < list.size(); i++) { + if (list.get(i) > max) + max = list.get(i); + } + return max; + } + + // スコアの計算 + public static int calcSongScore(final List menberPitch, + final List correctPitch) { + int score = 100; + for (int i = 0; i < correctPitch.size(); i++) { + // ずれたピッチの絶対値の計算 + int abs = Math.abs(correctPitch.get(i) - menberPitch.get(i)); + // スコアの減点 + if (abs <= EXCELLENT) { + } else if (abs <= GREAT) { + score -= minusScoreMap.get(GREAT); + } else if (abs <= VERY_GOOD) { + score -= minusScoreMap.get(VERY_GOOD); + } else if (abs <= GOOD) { + score -= minusScoreMap.get(GOOD); + } else { + score -= minusScoreMap.get(BAD); + } + } + return score; + } +} diff --git a/ykoiso/test/B095_SingTest.java b/ykoiso/test/B095_SingTest.java new file mode 100644 index 0000000..62afebe --- /dev/null +++ b/ykoiso/test/B095_SingTest.java @@ -0,0 +1,57 @@ +import static org.junit.Assert.assertThat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import static org.hamcrest.CoreMatchers.*; + +public class B095_SingTest { + B095_Sing sut; + List correctPitch, menberPitch; + + @Before + public void setUp() { + correctPitch = new ArrayList<>(Arrays.asList(100, 100, 100)); + } + + @Test + public void EXCELLENTを出したとき() { + int expected = 100; + menberPitch = new ArrayList<>(Arrays.asList(100, 95, 105)); + int actual = sut.calcSongScore(menberPitch, correctPitch); + assertThat(actual, is(expected)); + } + + @Test + public void GREATを出したとき() { + int expected = 97; + menberPitch = new ArrayList<>(Arrays.asList(106, 94, 110)); + int actual = sut.calcSongScore(menberPitch, correctPitch); + assertThat(actual, is(expected)); + } + + @Test + public void VERY_GOODを出したとき() { + int expected = 94; + menberPitch = new ArrayList<>(Arrays.asList(111, 85, 120)); + int actual = sut.calcSongScore(menberPitch, correctPitch); + assertThat(actual, is(expected)); + } + + @Test + public void GOODを出したとき() { + int expected = 91; + menberPitch = new ArrayList<>(Arrays.asList(121, 75, 130)); + int actual = sut.calcSongScore(menberPitch, correctPitch); + assertThat(actual, is(expected)); + } + + @Test + public void BADを出したとき() { + int expected = 85; + menberPitch = new ArrayList<>(Arrays.asList(131, 0, 999)); + int actual = sut.calcSongScore(menberPitch, correctPitch); + assertThat(actual, is(expected)); + } +} -- GitLab From 85543974682f2ee2973b4f107bbd97ac55811d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=A4=92=20=E8=80=80=E5=B9=B3?= Date: Fri, 8 Jul 2022 13:01:42 +0900 Subject: [PATCH 2/2] =?UTF-8?q?B095=20=E3=82=AB=E3=83=A9=E3=82=AA=E3=82=B1?= =?UTF-8?q?=E5=A4=A7=E4=BC=9A=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ykoiso/src/B095_Sing.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ykoiso/src/B095_Sing.java b/ykoiso/src/B095_Sing.java index b6107a2..1530c67 100644 --- a/ykoiso/src/B095_Sing.java +++ b/ykoiso/src/B095_Sing.java @@ -38,14 +38,14 @@ public class B095_Sing { for (int i = 0; i < MEMBER_NUM; i++) { menberPitch.add(new ArrayList<>()); } - for (int menber = 0; menber < MEMBER_NUM; menber++) { + for (int member = 0; member < MEMBER_NUM; member++) { for (int i = 0; i < SONG_LENGTH; i++) { - menberPitch.get(menber).add(scan.nextInt()); + menberPitch.get(member).add(scan.nextInt()); } } // 各人のスコアの計算 - for (int menber = 0; menber < MEMBER_NUM; menber++) { - score.add(calcSongScore(menberPitch.get(menber), correctPitch)); + for (int member = 0; member < MEMBER_NUM; member++) { + score.add(calcSongScore(menberPitch.get(member), correctPitch)); } // 結果の出力 System.out.println(max(score)); -- GitLab