RosettaCodeData/Task/Dinesmans-multiple-dwelling.../Python/dinesmans-multiple-dwelling...

19 lines
718 B
Python

from itertools import permutations
class Names:
Baker, Cooper, Fletcher, Miller, Smith = range(5)
seq = [Baker, Cooper, Fletcher, Miller, Smith]
strings = "Baker Cooper Fletcher Miller Smith".split()
predicates = [
lambda s: s[Names.Baker] != len(s)-1,
lambda s: s[Names.Cooper] != 0,
lambda s: s[Names.Fletcher] != 0 and s[Names.Fletcher] != len(s)-1,
lambda s: s[Names.Miller] > s[Names.Cooper],
lambda s: abs(s[Names.Smith] - s[Names.Fletcher]) != 1,
lambda s: abs(s[Names.Cooper] - s[Names.Fletcher]) != 1];
for sol in permutations(Names.seq):
if all(p(sol) for p in predicates):
print(" ".join(x for x, y in sorted(zip(Names.strings, sol), key=lambda x: x[1])))