diff --git a/syamauchi/src/B079.java b/syamauchi/src/B079.java new file mode 100644 index 0000000000000000000000000000000000000000..c60ded6dab63da0f267dac03f18b836d0231abab --- /dev/null +++ b/syamauchi/src/B079.java @@ -0,0 +1,106 @@ +package src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class B079 { + static final List TO_NUMBER = Arrays + .asList( + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", + "s", + "t", "u", "v", "w", "x", "y", "z"); + static final int DECREASE_NUMBER = 101; + + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + + new B079().checkRelationship(sc); + } + + private void checkRelationship(final Scanner sc) { + final List namesList = splitName(sc); + final List reverceNamesList = reverceSplitName(namesList); + final int relationship = calcRelationship(sequenceConversion(namesList)); + final int reverceRelationship = calcRelationship(sequenceConversion(reverceNamesList)); + compareRelationship(relationship, reverceRelationship); + } + + // 入力値を分ける + private ArrayList splitName(final Scanner sc) { + final String[] names = sc.nextLine().split(" "); + final ArrayList namesList = new ArrayList(); + for (String name : names) { + namesList.add(name); + } + sc.close(); + return namesList; + } + + // 名前のリストの要素順を逆にする + private List reverceSplitName(final List nameList) { + final List reverceNamesList = new ArrayList(); + for (int index = nameList.size() - 1; index >= 0; index--) { + reverceNamesList.add(nameList.get(index)); + } + + return reverceNamesList; + } + + // 1文字ずつ対応されている整数に変換 + private List sequenceConversion(final List namesList) { + final List nameOfNumberList = new ArrayList(); + for (int name = 0; name < namesList.size(); name++) { + for (int index = 0; index < namesList.get(name).length(); index++) { + nameOfNumberList.add(nameToNumber(namesList.get(name).substring(index, index + 1))); + + } + + } + + return nameOfNumberList; + } + + // 文字と対応している整数を算出 + private int nameToNumber(final String nameOfCharacter) { + int number = 0; + for (String character : TO_NUMBER) { + if (nameOfCharacter.equals(character)) { + return number + 1; + } + number++; + } + return 0; + } + + // 相性度の計算 + private int calcRelationship(final List nameOfNumberList) { + final List numberList = new ArrayList(nameOfNumberList); + int totalNumber; + for (int people = 0; people <= nameOfNumberList.size(); people++) { + for (int number = 0; number < numberList.size() - 1; number++) { + totalNumber = numberList.get(number) + numberList.get(number + 1); + // 101より大きければ101引く + if (totalNumber > DECREASE_NUMBER) { + totalNumber = totalNumber - DECREASE_NUMBER; + } + numberList.set(number, totalNumber); + } + if (numberList.size() > 1) { + numberList.remove(numberList.size() - 1); + } + } + return numberList.get(0); + } + + // 正順と逆順で計算した相性度の高いほうを出力 + private void compareRelationship(final int relationship, final int reverceRelationship) { + if (relationship > reverceRelationship) { + System.out.println(relationship); + } else { + System.out.println(reverceRelationship); + } + } + +}