from itertools import product Alphabet = [1, 2, 3, 4] Forbidden = set([(1,3),(3,1),(2,4),(4,2)]) def valid(p, discard): p_L = list(p) p_shift = set(zip(p_L, p_L[1:]+p_L[:1])) return len(p_shift & discard) == 0 def L_n(n): if n < 0: return [] else: return [ list(p) for p in product(Alphabet, repeat=n) if valid(p, Forbidden) ] for item in L_n(3): print(item, end='\t') print()
Standard input is empty
[1, 1, 1] [1, 1, 2] [1, 1, 4] [1, 2, 1] [1, 2, 2] [1, 4, 1] [1, 4, 4] [2, 1, 1] [2, 1, 2] [2, 2, 1] [2, 2, 2] [2, 2, 3] [2, 3, 2] [2, 3, 3] [3, 2, 2] [3, 2, 3] [3, 3, 2] [3, 3, 3] [3, 3, 4] [3, 4, 3] [3, 4, 4] [4, 1, 1] [4, 1, 4] [4, 3, 3] [4, 3, 4] [4, 4, 1] [4, 4, 3] [4, 4, 4]