RosettaCodeData/Task/Find-the-missing-permutation/Groovy/find-the-missing-permutation-1.groovy
Ingy döt Net db842d013d A-M baby
2013-04-10 21:29:02 -07:00

9 lines
400 B
Groovy

def fact = { n -> [1,(1..<(n+1)).inject(1) { prod, i -> prod * i }].max() }
def missingPerms
missingPerms = {List elts, List perms ->
perms.empty ? elts.permutations() : elts.collect { e ->
def ePerms = perms.findAll { e == it[0] }.collect { it[1..-1] }
ePerms.size() == fact(elts.size() - 1) ? [] \
: missingPerms(elts - e, ePerms).collect { [e] + it }
}.sum()
}