Not Quite Latin Square (Codeforces 1915B)
Tags: Implement, bitmasks

A Latin square is a $$$3 \times 3$$$ grid made up of the letters $$$\texttt{A}$$$, $$$\texttt{B}$$$, and $$$\texttt{C}$$$ such that:   in each row, the letters $$$\texttt{A}$$$, $$$\texttt{B}$$$, and $$$\texttt{C}$$$ each appear once, and  in each column, the letters $$$\texttt{A}$$$, $$$\texttt{B}$$$, and $$$\texttt{C}$$$ each appear once.  For example, one possible Latin square is shown below. $$$$$$\begin{bmatrix} \texttt{A} & \texttt{B} & \texttt{C} \\ \texttt{C} & \texttt{A} & \texttt{B} \\ \texttt{B} & \texttt{C} & \texttt{A} \\ \end{bmatrix}$$$$$$You are given a Latin square, but one of the letters was replaced with a question mark $$$\texttt{?}$$$. Find the letter that was replaced.

Input: The first line of the input contains a single integer $$$t$$$ ($$$1 \leq t \leq 108$$$) — the number of testcases.Each test case contains three lines, each consisting of three characters, representing the Latin square. Each character is one of $$$\texttt{A}$$$, $$$\texttt{B}$$$, $$$\texttt{C}$$$, or $$$\texttt{?}$$$.Each test case is a Latin square with exactly one of the letters replaced with a question mark $$$\texttt{?}$$$.

Output: For each test case, output the letter that was replaced.

Note: The correct Latin squares for the three test cases are shown below:$$$$$$\begin{bmatrix} \texttt{A} & \texttt{B} & \texttt{C} \\ \texttt{C} & \color{red}{\texttt{A}} & \texttt{B} \\ \texttt{B} & \texttt{C} & \texttt{A} \\ \end{bmatrix} \quad \begin{bmatrix} \texttt{B} & \texttt{C} & \texttt{A} \\ \texttt{C} & \texttt{A} & \color{red}{\texttt{B}} \\ \texttt{A} & \texttt{B} & \texttt{C} \\ \end{bmatrix} \quad \begin{bmatrix} \color{red}{\texttt{C}} & \texttt{A} & \texttt{B} \\ \texttt{B} & \texttt{C} & \texttt{A} \\ \texttt{A} & \texttt{B} & \texttt{C} \\ \end{bmatrix}$$$$$$

Sample Inputs:
3
ABC
C?B
BCA
BCA
CA?
ABC
?AB
BCA
ABC

Sample Outputs:
A
B
C

Solution (Python):
e = []
l = 'ABC'
for i in range(int(input())):
    r = [input() for x in range(3)]
    for i in range(3):
        for j in range(3):
            if r[i][j] == '?':
                rows = set(r[i])
                col = set((r[g][j] for g in range(3)))
                m = (set(l) - rows - col).pop()
                e.append(m)
                break
for e in e:
    print(e)

Solution (Python):
def check_letter(letter_list):
    if not 'A' in letter_list[0]:
        print('A')
    if not 'B' in letter_list[0]:
        print('B')
    if not 'C' in letter_list[0]:
        print('C')
n = int(input())
for i in range(n):
    letter_list = [letter for letter in input().split()]
    letter_list2 = [letter for letter in input().split()]
    letter_list3 = [letter for letter in input().split()]
    check_letter(letter_list)
    check_letter(letter_list2)
    check_letter(letter_list3)

Solution (Python):
n = int(input())
for i in range(n):
    letter_list = [letter for letter in input().split()]
    letter_list2 = [letter for letter in input().split()]
    letter_list3 = [letter for letter in input().split()]
    if not 'A' in letter_list[0]:
        print('A')
    if not 'B' in letter_list[0]:
        print('B')
    if not 'C' in letter_list[0]:
        print('C')
    if not 'A' in letter_list2[0]:
        print('A')
    if not 'B' in letter_list2[0]:
        print('B')
    if not 'C' in letter_list2[0]:
        print('C')
    if not 'A' in letter_list3[0]:
        print('A')
    if not 'B' in letter_list3[0]:
        print('B')
    if not 'C' in letter_list3[0]:
        print('C')