Допустим, длина каждого списка равна 3, он будет создавать список списков, подобных этому
[[Left, Up, Left],
[Left, Up, Right],
[Left, Down, Left],
[Left, Down, Right],
[Right, Up, Left],
[Right, Up, Right],
[Right, Down, Left],
[Right, Down, Right]]
Таким образом, список, подобный [Left, Right, Left]
, не будет действительным, поскольку он должен чередоваться по горизонтали. и по вертикали
Я делал это раньше в python, вот так
def Foo(n):
for k in nSteps(n-1):
// Code for each list
def nSteps(n):
results = []
for d1 in ['left','right','up','down']:
results += nMoreSteps(d1,n-1)
return(results)
def nMoreSteps(d,n):
if n == 0:
return [[d]]
else:
results = []
for k in CreateDirectionList(d):
for k2 in nMoreSteps(k,n-1):
results.append([d]+k2)
return results
def CreateDirectionList(direction):
#Returns the valid directions based on previous direction
if direction=='left' or direction=='right':
return ['up', 'down']
if direction=='up' or direction=='down':
return ['left', 'right']
Я не совсем уверен, как это сделать быстро, поэтому любая помощь будет высоко ценится .
Кроме того, каждое направление - это просто структура, соответствующая направлению, и я знаю, что оно должно иметь () после каждого.