18 lines
737 B
D
18 lines
737 B
D
import std.stdio, std.math, std.algorithm, std.traits, std.array, permutations2:permutations;
|
|
|
|
void main() {
|
|
|
|
enum Names { Baker, Cooper, Fletcher, Miller, Smith }
|
|
|
|
immutable(bool function(in Names[]) pure nothrow)[] predicates = [
|
|
s => s.countUntil(Names.Baker) != 4 && s.countUntil(Names.Cooper) != 0,
|
|
s => s.countUntil(Names.Fletcher) != 4 && s.countUntil(Names.Fletcher) != 0,
|
|
s => s.countUntil(Names.Miller) > s.countUntil(Names.Cooper),
|
|
s => abs(s.countUntil(Names.Smith) - s.countUntil(Names.Fletcher)) != 1,
|
|
s => abs(s.countUntil(Names.Cooper) - s.countUntil(Names.Fletcher)) != 1
|
|
];
|
|
|
|
permutations([EnumMembers!Names]).filter!(solution => predicates.all!(pred => pred(solution)))
|
|
.writeln;
|
|
|
|
}
|