(Analysis by Nick Wu)

Since a die has four sides and there are ten possible values for each side, there are $10^4 = 10000$ possible dice to test for non-transitivity. This number is small enough that we can check every possible die via brute force for non-transitivity.

When are three dice non-transitive? There are two cases - either A beats B, B beats C, and C beats A, or B beats A, C beats B, and A beats C. Therefore, we need to be able to check whether one die beats another.

In order for die A to beat die B, there needs to be more pairs $(x, y)$ where $x$ is a side on die A and $y$ is a side on die B where $x > y$, compared to when $x < y$.

Benjamin Qi's C++ solution:

#include <bits/stdc++.h>
using namespace std;

using Die = array<int, 4>;

bool beats(const Die& a, const Die& b) {
	int wins = 0, losses = 0;
	for(int i = 0; i < 4; i++) for(int j = 0; j < 4; j++) {
		if (a[i] > b[j]) ++wins;
		if (a[i] < b[j]) ++losses;
	}
	return wins > losses;
}

bool non_transitive(const Die& A, const Die& B) {
	for(int a = 1; a <= 10; a++) for(int b = 1; b <= 10; b++) for(int c = 1; c <= 10; c++) for(int d = 1; d <= 10; d++) {
		Die C{a,b,c,d};
		if (beats(A,B) && beats(B,C) && beats(C,A)) return 1;
		if (beats(B,A) && beats(C,B) && beats(A,C)) return 1;
	}
	return 0;
}

int main() {
	int N;
	cin >> N;
	for(int i = 0; i < N; i++) {
		Die A, B;
		for(int j = 0; j < 4; j++) cin >> A[j];
		for(int j = 0; j < 4; j++) cin >> B[j];
		if(non_transitive(A,B)) {
			cout << "yes\n";
		} else {
			cout << "no\n";
		}
	}
}

Danny Mittal's Java solution:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class NonTransitiveDice {
 
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder out = new StringBuilder();
        for (int n = Integer.parseInt(in.readLine()); n > 0; n--) {
            StringTokenizer tokenizer = new StringTokenizer(in.readLine());
            int[] diceA = new int[4];
            for (int j = 0; j < 4; j++) {
                diceA[j] = Integer.parseInt(tokenizer.nextToken());
            }
            int[] diceB = new int[4];
            for (int j = 0; j < 4; j++) {
                diceB[j] = Integer.parseInt(tokenizer.nextToken());
            }
            String answer = "no";
            for (int w = 1; w <= 10; w++) {
                for (int x = 1; x <= 10; x++) {
                    for (int y = 1; y <= 10; y++) {
                        for (int z = 1; z <= 10; z++) {
                            int[] diceC = {w, x, y, z};
                            if (beats(diceA, diceB) && beats(diceB, diceC) && beats(diceC, diceA)) {
                                answer = "yes";
                            }
                            if (beats(diceB, diceA) && beats(diceA, diceC) && beats(diceC, diceB)) {
                                answer = "yes";
                            }
                        }
                    }
                }
            }
            out.append(answer).append('\n');
        }
        System.out.print(out);
    }
 
    static boolean beats(int[] dice1, int[] dice2) {
        int diff = 0;
        for (int x : dice1) {
            for (int y : dice2) {
                diff += Integer.signum(x - y);
            }
        }
        return diff > 0;
    }
}

My Python 3 solution:

def win(a, b):
    return sum([x > y for x in a for y in b]) > sum([y > x for x in a for y in b])
 
def solve():
    l = [int(x) for x in input().split()]
    a_die = l[0:4]
    b_die = l[4:8]
    for a in range(1, 11):
        for b in range(1, 11):
            for c in range(1, 11):
                for d in range(1, 11):
                    c_die = [a, b, c, d]
                    if win(a_die, b_die) and win(b_die, c_die) and win(c_die, a_die):
                        print("yes")
                        return
                    if win(b_die, a_die) and win(c_die, b_die) and win(a_die, c_die):
                        print("yes")
                        return
    print("no")
 
t = int(input())
for _ in range(t):
    solve()