/// <summary> /// ATTENTION: This method by now works properly only in situations when same variable /// can not exist in both higher and lower permutation /// ATTENTION: This method by now works properly only with substitution order less 10 /// </summary> /// <param name="assign"></param> /// <returns></returns> public int GetNumberOfVariants(SubstitutionAssign assign) { var higherPerms = HigherPermutation.GetAllCertainPermutations(); var lowerPerms = LowerPermutation.GetAllCertainPermutations(); var varNumber = 0; foreach (var higherPerm in higherPerms) { foreach (var lowerPerm in lowerPerms) { int invNumber = InversionNumber(higherPerm, lowerPerm); switch (assign) { case SubstitutionAssign.Positive: if (invNumber % 2 == 0) { varNumber++; PrintCertainSubstitution(higherPerm, lowerPerm); } break; case SubstitutionAssign.Negative: if (invNumber % 2 != 0) { varNumber++; PrintCertainSubstitution(higherPerm, lowerPerm); } break; } } } return(varNumber); }
static void Main(string[] args) { // string line = "2:1 i:5 4:p 1:3 7:4 j:p 5:8 k:7"; // Task #1 // string line = "2:l 6:6 u:m 8:7 5:8 v:n 3:5 1:3"; // Task #2 // string line = "1:3 4:5 p:8 3:s q:t 7:4 8:7 r:1"; // Task #3 // string line = "3:6 5:2 6:1 2:x m:3 4:y 7:4 n:z"; // Task #4 // string line = "2:7 i:4 3:5 5:u 4:8 j:2 7:v k:3"; // Task #5 string line = "2:l 4:8 s:4 7:1 5:6 3:m 8:3 t:n"; // Task #6 SubstitutionAssign assign = SubstitutionAssign.Negative; var paramSubstitution = new ParamSubstitution(line); Console.WriteLine("All suitable substitutions:"); int varNum = paramSubstitution.GetNumberOfVariants(assign); Console.WriteLine(); Console.WriteLine("Number of suitable substitutions:"); System.Console.WriteLine(varNum); Console.ReadLine(); }