Find the missing permutation: Difference between revisions
Content added Content deleted
No edit summary |
(Added C++) |
||
Line 128: | Line 128: | ||
FreePermutations( pi); |
FreePermutations( pi); |
||
return 0; |
return 0; |
||
}</lang> |
|||
=={{header|C++}}== |
|||
<lang Cpp>#include <algorithm> |
|||
#include <vector> |
|||
#include <iostream> |
|||
#include <string> |
|||
// These are lexicographically ordered |
|||
static const std::string GivenPermutations[] = { |
|||
"ABCD", "ABDC", "ACBD", "ACDB", |
|||
"ADBC", "ADCB", "BACD", "BADC", |
|||
"BCAD", "BCDA", "BDAC", "BDCA", |
|||
"CABD", "CADB", "CBAD", "CBDA", |
|||
"CDAB", "CDBA", "DABC", "DACB", |
|||
"DBCA", "DCAB", "DCBA" |
|||
}; |
|||
static const size_t NumGivenPermutations = sizeof(GivenPermutations) / sizeof(std::string); |
|||
int main() |
|||
{ |
|||
std::vector<std::string> permutations; |
|||
std::string initial = "ABCD"; |
|||
permutations.push_back(initial); |
|||
while(true) |
|||
{ |
|||
std::string p = permutations.back(); |
|||
std::next_permutation(p.begin(), p.begin() + 4); |
|||
if(p == permutations.front()) |
|||
break; |
|||
permutations.push_back(p); |
|||
} |
|||
std::vector<std::string> missing; |
|||
std::set_difference(permutations.begin(), permutations.end(), GivenPermutations, |
|||
GivenPermutations + NumGivenPermutations, std::back_insert_iterator< std::vector<std::string> >(missing)); |
|||
std::copy(missing.begin(), missing.end(), std::ostream_iterator<std::string>(std::cout, "\n")); |
|||
}</lang> |
}</lang> |
||