Find the missing permutation: Difference between revisions
Content added Content deleted
(Added TI-83 BASIC) |
(Added Wren) |
||
Line 3,133: | Line 3,133: | ||
{{Out}} |
{{Out}} |
||
<pre>DBAC</pre> |
<pre>DBAC</pre> |
||
=={{header|Wren}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Wren-set}} |
|||
<lang ecmascript>import "/set" for Set |
|||
var permute // recursive |
|||
permute = Fn.new { |input| |
|||
if (input.count == 1) return [input] |
|||
var perms = [] |
|||
var toInsert = input[0] |
|||
for (perm in permute.call(input[1..-1])) { |
|||
for (i in 0..perm.count) { |
|||
var newPerm = perm.toList |
|||
newPerm.insert(i, toInsert) |
|||
perms.add(newPerm) |
|||
} |
|||
} |
|||
return perms |
|||
} |
|||
var missingPerms = Fn.new { |input, perms| |
|||
var s1 = Set.new() |
|||
s1.addAll(perms) |
|||
var perms2 = permute.call(input).map { |p| p.join() } |
|||
var s2 = Set.new() |
|||
s2.addAll(perms2) |
|||
return s2.except(s1).toList |
|||
} |
|||
var input = ["A", "B", "C", "D"] |
|||
var perms = [ |
|||
"ABCD", "CABD", "ACDB", "DACB", "BCDA", "ACBD", "ADCB", "CDAB", |
|||
"DABC", "BCAD", "CADB", "CDBA", "CBAD", "ABDC", "ADBC", "BDCA", |
|||
"DCBA", "BACD", "BADC", "BDAC", "CBDA", "DBCA", "DCAB" |
|||
] |
|||
var missing = missingPerms.call(input, perms) |
|||
if (missing.count == 1) { |
|||
System.print("The missing permutation is %(missing[0])") |
|||
} else { |
|||
System.print("There are %(missing.count) missing permutations, namely:\n") |
|||
System.print(missing) |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
The missing permutation is DBAC |
|||
</pre> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |