From 99e781e412fe14d23c947588a257c7702e7431c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E7=94=B0=20=E5=95=93=E4=BB=8B?= Date: Fri, 12 Aug 2022 13:04:20 +0900 Subject: [PATCH 1/3] =?UTF-8?q?B079=20=E7=9B=B8=E6=80=A7=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AFver1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knoda/src/B079_CompatibilityCheck.java | 155 ++++++++++++++++++++ knoda/test/B079_CompatibilityCheckTest.java | 50 +++++++ 2 files changed, 205 insertions(+) create mode 100644 knoda/src/B079_CompatibilityCheck.java create mode 100644 knoda/test/B079_CompatibilityCheckTest.java diff --git a/knoda/src/B079_CompatibilityCheck.java b/knoda/src/B079_CompatibilityCheck.java new file mode 100644 index 0000000..4ace1fe --- /dev/null +++ b/knoda/src/B079_CompatibilityCheck.java @@ -0,0 +1,155 @@ +package hellojunit; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class B079_CompatibilityCheck { + + public static void main(String[] args) { + final Scanner scan = new Scanner(System.in); + final String name1 = scan.next(); + final String name2 = scan.next(); + final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); + // 2人の相性を取得する + final int compatibilityDegree = compatibilityCheck.getCompatibilityDegree(name1, name2); + System.out.println(compatibilityDegree); + scan.close(); + } + +} + +class CompatibilityCheck { + private final int MAX_NUMBER = 101; // numberListの要素の最大値 + + // 2人の相性を取得するメソッド + public int getCompatibilityDegree(final String name1, final String name2) { + final int compatibilityDegree1 = calcCompatibilityDegree(name1 + name2); + final int compatibilityDegree2 = calcCompatibilityDegree(name2 + name1); + + // 2通りの方法で算出した2人の相性のうち大きい方を取得する + if (compatibilityDegree1 > compatibilityDegree2) { + return compatibilityDegree1; + } + return compatibilityDegree2; + } + + // 2人の相性を算出するメソッド + private int calcCompatibilityDegree(final String concatName) { + final List numberList = new ArrayList(); + + // 文字を数字に変換する + for (int i = 0; i < concatName.length(); i++) { + numberList.add(AlphabetAndNumber.getNumber(concatName.charAt(i))); + } + + // 2人の相性を算出する + while (true) { + for (int i = 0; i < numberList.size() - 1; i++) { + numberList.set(i, numberList.get(i) + numberList.get(i + 1)); + if (numberList.get(i) > MAX_NUMBER) { + numberList.set(i, numberList.get(i) - MAX_NUMBER); + } + } + numberList.remove(numberList.size() - 1); + + // numberListの要素数が1になったらループから抜ける + if (numberList.size() == 1) { + break; + } + } + return numberList.get(0); + } +} + +// 文字を数字に変換するクラス +class AlphabetAndNumber { + public static int getNumber(final char alphabet) { + final int number; + switch (alphabet) { + case 'a': + number = 1; + break; + case 'b': + number = 2; + break; + case 'c': + number = 3; + break; + case 'd': + number = 4; + break; + case 'e': + number = 5; + break; + case 'f': + number = 6; + break; + case 'g': + number = 7; + break; + case 'h': + number = 8; + break; + case 'i': + number = 9; + break; + case 'j': + number = 10; + break; + case 'k': + number = 11; + break; + case 'l': + number = 12; + break; + case 'm': + number = 13; + break; + case 'n': + number = 14; + break; + case 'o': + number = 15; + break; + case 'p': + number = 16; + break; + case 'q': + number = 17; + break; + case 'r': + number = 18; + break; + case 's': + number = 19; + break; + case 't': + number = 20; + break; + case 'u': + number = 21; + break; + case 'v': + number = 22; + break; + case 'w': + number = 23; + break; + case 'x': + number = 24; + break; + case 'y': + number = 25; + break; + case 'z': + number = 26; + break; + default: + number = 0; + break; + } + return number; + } +} + diff --git a/knoda/test/B079_CompatibilityCheckTest.java b/knoda/test/B079_CompatibilityCheckTest.java new file mode 100644 index 0000000..8ce0bb8 --- /dev/null +++ b/knoda/test/B079_CompatibilityCheckTest.java @@ -0,0 +1,50 @@ +package hellojunit; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; + +import org.junit.Test; + +public class B079_CompatibilityCheckTest { + + @Test + public void pa_izaと入力すると83と出力されるテスト() { + final String name1 = "pa"; + final String name2 = "iza"; + final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); + final int expected = 83; + final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); + assertThat(actual, is(expected)); + } + + @Test + public void iza_paと入力すると83と出力されるテスト() { + final String name1 = "iza"; + final String name2 = "pa"; + final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); + final int expected = 83; + final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); + assertThat(actual, is(expected)); + } + + @Test + public void alice_bobと入力すると97と出力されるテスト() { + final String name1 = "alice"; + final String name2 = "bob"; + final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); + final int expected = 97; + final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); + assertThat(actual, is(expected)); + } + + @Test + public void bob_aliceと入力すると97と出力されるテスト() { + final String name1 = "bob"; + final String name2 = "alice"; + final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); + final int expected = 97; + final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); + assertThat(actual, is(expected)); + } + +} -- GitLab From 46afd68d698d2ac024f66c14499a311ea8bb379f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E7=94=B0=20=E5=95=93=E4=BB=8B?= Date: Fri, 12 Aug 2022 14:17:56 +0900 Subject: [PATCH 2/3] =?UTF-8?q?B079=20=E7=9B=B8=E6=80=A7=E3=81=AE=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AFver1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knoda/src/B079_CompatibilityCheck.java | 120 +++----------------- knoda/test/B079_CompatibilityCheckTest.java | 58 ++++++---- 2 files changed, 47 insertions(+), 131 deletions(-) diff --git a/knoda/src/B079_CompatibilityCheck.java b/knoda/src/B079_CompatibilityCheck.java index 4ace1fe..de59687 100644 --- a/knoda/src/B079_CompatibilityCheck.java +++ b/knoda/src/B079_CompatibilityCheck.java @@ -22,29 +22,34 @@ public class B079_CompatibilityCheck { class CompatibilityCheck { private final int MAX_NUMBER = 101; // numberListの要素の最大値 - // 2人の相性を取得するメソッド + /** + * 2人の相性を取得するメソッド + * @param name1 + * @param name2 + * @return Math.max(compatibilityDegree1, compatibilityDegree2) + */ public int getCompatibilityDegree(final String name1, final String name2) { final int compatibilityDegree1 = calcCompatibilityDegree(name1 + name2); final int compatibilityDegree2 = calcCompatibilityDegree(name2 + name1); - // 2通りの方法で算出した2人の相性のうち大きい方を取得する - if (compatibilityDegree1 > compatibilityDegree2) { - return compatibilityDegree1; - } - return compatibilityDegree2; + return Math.max(compatibilityDegree1, compatibilityDegree2); } - // 2人の相性を算出するメソッド + /** + * 2人の相性を算出するメソッド + * @param concatName + * @return numberList.get(0) + */ private int calcCompatibilityDegree(final String concatName) { final List numberList = new ArrayList(); // 文字を数字に変換する for (int i = 0; i < concatName.length(); i++) { - numberList.add(AlphabetAndNumber.getNumber(concatName.charAt(i))); + numberList.add(concatName.charAt(i) - 'a' + 1); } // 2人の相性を算出する - while (true) { + while (numberList.size() > 1) { for (int i = 0; i < numberList.size() - 1; i++) { numberList.set(i, numberList.get(i) + numberList.get(i + 1)); if (numberList.get(i) > MAX_NUMBER) { @@ -52,104 +57,7 @@ class CompatibilityCheck { } } numberList.remove(numberList.size() - 1); - - // numberListの要素数が1になったらループから抜ける - if (numberList.size() == 1) { - break; - } } return numberList.get(0); } } - -// 文字を数字に変換するクラス -class AlphabetAndNumber { - public static int getNumber(final char alphabet) { - final int number; - switch (alphabet) { - case 'a': - number = 1; - break; - case 'b': - number = 2; - break; - case 'c': - number = 3; - break; - case 'd': - number = 4; - break; - case 'e': - number = 5; - break; - case 'f': - number = 6; - break; - case 'g': - number = 7; - break; - case 'h': - number = 8; - break; - case 'i': - number = 9; - break; - case 'j': - number = 10; - break; - case 'k': - number = 11; - break; - case 'l': - number = 12; - break; - case 'm': - number = 13; - break; - case 'n': - number = 14; - break; - case 'o': - number = 15; - break; - case 'p': - number = 16; - break; - case 'q': - number = 17; - break; - case 'r': - number = 18; - break; - case 's': - number = 19; - break; - case 't': - number = 20; - break; - case 'u': - number = 21; - break; - case 'v': - number = 22; - break; - case 'w': - number = 23; - break; - case 'x': - number = 24; - break; - case 'y': - number = 25; - break; - case 'z': - number = 26; - break; - default: - number = 0; - break; - } - return number; - } -} - diff --git a/knoda/test/B079_CompatibilityCheckTest.java b/knoda/test/B079_CompatibilityCheckTest.java index 8ce0bb8..a78d8a5 100644 --- a/knoda/test/B079_CompatibilityCheckTest.java +++ b/knoda/test/B079_CompatibilityCheckTest.java @@ -5,46 +5,54 @@ import static org.junit.Assert.*; import org.junit.Test; +/** + * @author knoda + * + */ public class B079_CompatibilityCheckTest { - - @Test - public void pa_izaと入力すると83と出力されるテスト() { - final String name1 = "pa"; - final String name2 = "iza"; - final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); - final int expected = 83; - final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); - assertThat(actual, is(expected)); - } @Test - public void iza_paと入力すると83と出力されるテスト() { - final String name1 = "iza"; - final String name2 = "pa"; + public void 名前がそれぞれa_bのとき3が出力されるテスト() { + final String name1 = "a"; + final String name2 = "b"; final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); - final int expected = 83; + final int expected = 3; final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); assertThat(actual, is(expected)); } + @Test - public void alice_bobと入力すると97と出力されるテスト() { - final String name1 = "alice"; - final String name2 = "bob"; + public void 名前がそれぞれ1000文字のときのテスト() { + String name1 = ""; + String name2 = ""; + for (int i = 0; i < 1000; i++) { + name1 += "a"; + } + for (int i = 0; i < 1000; i++) { + name2 += "b"; + } final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); - final int expected = 97; + final int expected = 26; final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); assertThat(actual, is(expected)); } + + /** + * 名前の順序を入れ替えても相性の大きい方が出力される + * つまり、出力される値は変わらない + */ @Test - public void bob_aliceと入力すると97と出力されるテスト() { - final String name1 = "bob"; - final String name2 = "alice"; + public void pa_izaと入力してもiza_paと入力してもともに83と出力されるテスト() { + final String name1 = "pa"; + final String name2 = "iza"; final CompatibilityCheck compatibilityCheck = new CompatibilityCheck(); - final int expected = 97; - final int actual = compatibilityCheck.getCompatibilityDegree(name1, name2); - assertThat(actual, is(expected)); + final int expected = 83; + int actual1 = compatibilityCheck.getCompatibilityDegree(name1, name2); + assertThat(actual1, is(expected)); + + int actual2 = compatibilityCheck.getCompatibilityDegree(name2, name1); + assertThat(actual1, is(actual2)); } - } -- GitLab From 68d88900ee7a95ec9cfacecdcc72007e4dcb36b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E7=94=B0=20=E5=95=93=E4=BB=8B?= Date: Fri, 12 Aug 2022 14:43:38 +0900 Subject: [PATCH 3/3] =?UTF-8?q?B079=20=E7=9B=B8=E6=80=A7=E3=81=AE=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AFver1.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knoda/src/B079_CompatibilityCheck.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/knoda/src/B079_CompatibilityCheck.java b/knoda/src/B079_CompatibilityCheck.java index de59687..b2a0c8b 100644 --- a/knoda/src/B079_CompatibilityCheck.java +++ b/knoda/src/B079_CompatibilityCheck.java @@ -24,9 +24,9 @@ class CompatibilityCheck { /** * 2人の相性を取得するメソッド - * @param name1 - * @param name2 - * @return Math.max(compatibilityDegree1, compatibilityDegree2) + * @param name1 : 名前 + * @param name2 : 名前 + * @return Math.max(compatibilityDegree1, compatibilityDegree2) : 2人の相性 */ public int getCompatibilityDegree(final String name1, final String name2) { final int compatibilityDegree1 = calcCompatibilityDegree(name1 + name2); @@ -37,8 +37,8 @@ class CompatibilityCheck { /** * 2人の相性を算出するメソッド - * @param concatName - * @return numberList.get(0) + * @param concatName : 2人の名前を連結した文字列 + * @return numberList.get(0) : 2人の相性 */ private int calcCompatibilityDegree(final String concatName) { final List numberList = new ArrayList(); -- GitLab