diff --git a/yitou/src/B054_Addition.java b/yitou/src/B054_Addition.java new file mode 100644 index 0000000000000000000000000000000000000000..2d5d80c51d1d8729ca166eecdc3e60ce30d7ddf4 --- /dev/null +++ b/yitou/src/B054_Addition.java @@ -0,0 +1,58 @@ +package src; + +import java.util.Scanner; + +public class B054_Addition { + + public static void main(final String[] args) { + final Scanner scanner = new Scanner(System.in); + final String alpha1 = scanner.next().toUpperCase(); + final String alpha2 = scanner.next().toUpperCase(); + + // 足し算メソッドを呼び出す + final String result = add(alpha1, alpha2); + System.out.println(result); + + scanner.close(); + } + + // PAIZA表記を足し算する + public static String add(final String alpha1, final String alpha2) { + // PAIZA表記から10進数へ + final int num1 = convertPaizaToDecimal(alpha1); + final int num2 = convertPaizaToDecimal(alpha2); + + // 合計 + final int sum = num1 + num2; + + // 結果をPAIZA表記へ変換 + return convertDecimalToPaiza(sum); + } + + // PAIZA表記から10進数に変換する + private static int convertPaizaToDecimal(final String paiza) { + int decimalValue = 0; + + for (int i = 0; i < paiza.length(); i++) { + final int power = paiza.length() - 1 - i; // 5の階乗 + decimalValue += PaizaNotation.valueOf(String.valueOf(paiza.charAt(i))).getValue() * Math.pow(5, power); + } + return decimalValue; + } + + //10進数をPAIZA表記に変換する + private static String convertDecimalToPaiza(final int decimal) { + if (decimal == 0) { + return "A"; // 0の場合 + } + final StringBuilder paiza = new StringBuilder(); + int tempDecimal = decimal; // 引数をコピーする + + while (tempDecimal > 0) { + final int remainder = tempDecimal % 5; + paiza.insert(0, PaizaNotation.values()[remainder]); // 逆順に挿入 + tempDecimal /= 5; + } + return paiza.toString(); + } +} diff --git a/yitou/src/PaizaNotation.java b/yitou/src/PaizaNotation.java new file mode 100644 index 0000000000000000000000000000000000000000..c6b18c4f5acad95e2d446a464df4497354008788 --- /dev/null +++ b/yitou/src/PaizaNotation.java @@ -0,0 +1,22 @@ +package src; + +/** + * アルファベットを数値に対応させる列挙型です. + */ +public enum PaizaNotation { + A(0), + B(1), + C(2), + D(3), + E(4); + + private final int value; + + PaizaNotation(final int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/yitou/test/B054_AdditionTest.java b/yitou/test/B054_AdditionTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5e0da68a3fdb23ca39dc92263863c676249b2164 --- /dev/null +++ b/yitou/test/B054_AdditionTest.java @@ -0,0 +1,36 @@ +package test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import src.B054_Addition; + +public class B054_AdditionTest { + + @Test + public void AとAを入力したときの出力はAになる() { + final String actual = B054_Addition.add("A", "A"); + final String expected = "A"; + assertEquals(expected, actual); + } + + @Test + public void BEBとBCCを入力したときの出力はCCDになる() { + final String actual = B054_Addition.add("BAB", "BCC"); + final String expected = "CCD"; + assertEquals(expected, actual); + } + + @Test + public void BBAAとEBBを入力したときの出力はCABBになる() { + final String actual = B054_Addition.add("BBAA", "EBB"); + final String expected = "CABB"; + assertEquals(expected, actual); + } + + @Test + public void CとCCCCを入力したときの出力はCCCEになる() { + final String actual = B054_Addition.add("C", "CCCC"); + final String expected = "CCCE"; + assertEquals(expected, actual); + } +}