Все перестановки чередующихся горизонтальных и вертикальных направлений в Swift - PullRequest
0 голосов
/ 23 апреля 2020

Допустим, длина каждого списка равна 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']

Я не совсем уверен, как это сделать быстро, поэтому любая помощь будет высоко ценится .

Кроме того, каждое направление - это просто структура, соответствующая направлению, и я знаю, что оно должно иметь () после каждого.

...