Problem:
カップゲーム

3 つのカップがふせて置かれています。カップの置かれている場所を、順に A,B,C と呼ぶことにします。最初は A に置かれているカップの中にボールが隠されているとします。カップの位置を入れ替えると、中に入っているボールも一緒に移動します。

入れ替える２つのカップの位置を読み込んで、最終的にどの場所のカップにボールが隠されているかを出力するプログラムを作成してください。

Input

入れ替える２つのカップの位置が順番に複数行にわたり与えられます。各行に、入れ替える２つのカップの位置を表す文字（A, B, または C）がカンマ区切りで与えられます。

入れ替える操作は 50 回を超えません。

Output

ボールが入っているカップの場所（A, B, または C）を１行に出力します。

Sample Input

B,C
A,C
C,B
A,B
C,B

Output for the Sample Input

A

Solution in JAVA (judge verdict: Accepted)

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) {

        String[] indexToAlphabet = {"A", "B", "C"};
        Map<String, Integer> alphabetToIndex = new HashMap<>();
        for(int cur = 0; cur < indexToAlphabet.length; cur++){
            alphabetToIndex.put(indexToAlphabet[cur], cur);
        }

        Integer[] cup = {1, 0, 0};
        List<String[]> splitStringList = readStdInput(",");

        for(String[] stringLine : splitStringList){
            swap(cup, alphabetToIndex.get(stringLine[0]).intValue(), alphabetToIndex.get(stringLine[1]).intValue());
        }

        for(int cur = 0; cur < cup.length; cur++){
            if(cup[cur] == 1){
                formatPrintln("%s", indexToAlphabet[cur]);
                break;
            }
        }
    }

    private static void formatPrint(String format, Object... args) {
        System.out.print(String.format(format, args));
    }

    private static void formatPrintln(String format, Object... args) {
        formatPrint(format, args);
        System.out.println();
    }

    private static List<String[]> readStdInput(String delim) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String buffer = null;

        List<String[]> splitStringList = new ArrayList<>();

        try {
            while ((buffer = br.readLine()) != null) {

                if(buffer.isEmpty()){
                    break;
                }
                splitStringList.add(buffer.split(delim));
            }
            br.close();
        } catch (IOException e) {
        }

        return splitStringList;
    }

    private static <T> void swap(T[] array, int leftIndex, int rightIndex){
        T temp = array[leftIndex];
        array[leftIndex] = array[rightIndex];
        array[rightIndex] = temp;
    }
}