Advertisement
Fhernd

Permutations.cs

Jul 4th, 2016
1,023
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.67 KB | None | 0 0
  1. // Generates partial permutations for a given string:
  2. private HashSet<string> GeneratePartialPermutation(string word)
  3. {
  4.     return new HashSet<string>(Enumerable.Range(0, word.Length)
  5.         .Select(i => word.Remove(i, 1).Insert(0, word[i].ToString())));
  6. }
  7.  
  8. // Entry point for the LINQ recipe:
  9. void Main()
  10. {
  11.     // Stores all the permutations computed in HashSet data structure.
  12.     // It also generates the first partial permutations:
  13.     HashSet<string> perms = GeneratePartialPermutation("abcd");
  14.    
  15.     // Generates permutations by traversing all possible permutations of
  16.     // the given string -"abcd"-:
  17.     Enumerable.Range(0, 2)
  18.         .ToList()
  19.         .ForEach
  20.         (
  21.             c =>
  22.             {
  23.                 // Permutations in forward direction:
  24.                 Enumerable.Range(0, perms.Count())
  25.                 .ToList()
  26.                 .ForEach
  27.                 (
  28.                     i => GeneratePartialPermutation(
  29.                         perms.ElementAt(i))
  30.                         .ToList()
  31.                         .ForEach(p => perms.Add(p))
  32.                 );
  33.                
  34.                 // Permutations in reverse direction:
  35.                 Enumerable.Range(0, perms.Count())
  36.                 .ToList()
  37.                 .ForEach
  38.                 (
  39.                     i => GeneratePartialPermutation(new String
  40.                         (perms.ElementAt(i).ToCharArray()
  41.                             .Reverse().ToArray())
  42.                 )
  43.                 .ToList().ForEach(p => perms.Add(p)));
  44.             }
  45.         );
  46.        
  47.     // Displays all permutations:
  48.     perms.OrderBy(p => p).Dump("Permutations of 'abcd'");
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement