File size: 1,013 Bytes
df08b20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import itertools

def verify(m, k, r, p0, p1):
    def get_p(x):
        s = sum(x) % m
        return p0 if s == 0 else p1

    all_edges = set()
    for color in range(k):
        visited_set = set()
        curr = tuple([0]*k)
        edges = set()
        for _ in range(m**k):
            if curr in visited_set: return False
            visited_set.add(curr)
            p = get_p(curr)
            dim = p[color]
            edges.add((curr, dim))
            nx = list(curr)
            nx[dim] = (nx[dim] + r[dim]) % m
            curr = tuple(nx)
        if curr != (0,0,0,0): return False
        if len(visited_set) != m**k: return False
        if all_edges.intersection(edges): return False
        all_edges.update(edges)
    return True

perms = list(itertools.permutations(range(4)))
r = [1, 1, 1, 1]
# Limit search
for p0 in perms[:5]:
    for p1 in perms:
        if verify(2, 4, r, p0, p1):
            print(f"Found solution: p0={p0}, p1={p1}")
            import sys
            sys.exit(0)