diff --git a/checks.py b/checks.py new file mode 100644 index 0000000000000000000000000000000000000000..20243a0b1175fd6dd171a9a0391d62e63dfd4084 --- /dev/null +++ b/checks.py @@ -0,0 +1,72 @@ +def valid_ns1d0(ns1d0): + # rule 0 + n = (len(ns1d0) * 2) - 1 + for val in ns1d0: + if val > n: + return False + + # rule 1 + if ns1d0[0] != 0 or ns1d0[-1] != 1: + return False + + # rule 2 + if (n+1)/2 in ns1d0: + return False + + # rule 3 + for i in range(2, n): + if i != (n+1) / 2: + inverseI = (1- i) % n + + if (inverseI not in ns1d0) and (i not in ns1d0): + return False + + if (inverseI in ns1d0) and (i in ns1d0): + return False + + # rule 4 + + # get differences + diffs = [] + for i in range(1, len(ns1d0)): + diffs.append((ns1d0[i] - ns1d0[i-1]) % n) + + #check differences + for j in range(1, n): + inverseJ = (-j) % n + + if (inverseJ not in diffs) and (j not in diffs): + return False + + if (inverseJ in diffs) and (j in diffs): + return False + + + return True + + +def valid_triple(triple_system, order): + # generate pairs + + pairs = [] + for i in range(order): + for j in range(i+1, order): + pairs.append([i, j]) + + # check each triple + for triple in triple_system: + pair1 = sorted((triple[0], triple[1])) + pair2 = sorted((triple[1], triple[2])) + pair3 = sorted((triple[0], triple[2])) + + if pair1 in pairs and pair2 in pairs and pair3 in pairs: + # hasn't been seen yet + pairs.remove(pair1) + pairs.remove(pair2) + pairs.remove(pair3) + else: + # one of these has either a) been seen or b) is an invalid pair for this order, so the system is invalid + print(pair1, pair1 in pairs, "\n", pair2, pair2 in pairs, "\n", pair3, pair3 in pairs) + return False + + return True \ No newline at end of file