about summary refs log tree commit diff
path: root/scratch/facebook/recursive-string-permutations.py
blob: e4c61eff9f62411aaaa0826987731a1489d46232 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# permutations: no repeat characters

def char_and_rest(i, xs):
    return xs[i], xs[0:i] + xs[i + 1:]

def permutations(xs):
    if len(xs) == 1:
        return [xs]
    result = []
    for c, rest in [char_and_rest(i, xs) for i in range(len(xs))]:
        result += [c + perm for perm in permutations(rest)]
    return result

expected = ["cat", "cta", "act", "atc", "tca", "tac"]
result = permutations("cat")
print(result, expected)
assert len(result) == len(expected)
assert result == expected
print("Success!")