/* * Complete the 'angryAnimals' function below. * * The function is expected to return a LONG_INTEGER. * The function accepts following parameters: * 1. INTEGER n * 2. INTEGER_ARRAY a * 3. INTEGER_ARRAY b */ public static long angryAnimals(int n, List <int> a, List <int> b) { //List<List<string>> lstSafeCombinations = new List<List<string>>(); AngryComboDict dict = new AngryComboDict(a, b); long count = n; List <long> lstResultCounts = new List <long>(); for (int i = 1; i <= n; i++) { // lstSafeCombinations.Add(new List<string>()); bool skipAhead = false; // string items = ""; for (int j = i + 1; j <= n; j++) { //for(int k=i; k < j; k++) //{ //if (!dict.KeyExists(k)) //{ // break; //} //find limit between i and j so that it can be verified and loop is skipped if (dict.KeyValuePairExistsMinMax(j, i)) { skipAhead = true; break; } //} if (!skipAhead) { count = count + 1; // lstSafeCombinations[i - 1].Add("--"+j.ToString()); } else { break; } } } //int count = n; //foreach(List<string> lst in lstSafeCombinations) //{ // count = count + lst.Count; //} return(count); }
public static void CalculatePartitionResult(object stateParams) { ThreadParams thrParams = (ThreadParams)stateParams; int start = thrParams.start; int end = thrParams.end; int n = thrParams.nCount; AngryComboDict dict = thrParams.dict; long count = 0;//thrParams.Count; for (int i = start; i <= end; i++) { // lstSafeCombinations.Add(new List<string>()); bool skipAhead = false; // string items = ""; for (int j = i + 1; j <= n; j++) { //for(int k=i; k < j; k++) //{ //if (!dict.KeyExists(k)) //{ // break; //} //find limit between i and j so that it can be verified and loop is skipped if (dict.KeyValuePairExistsMinMax(j, i)) { skipAhead = true; break; } //} if (!skipAhead) { count = count + 1; // lstSafeCombinations[i - 1].Add("--"+j.ToString()); } else { break; } } } thrParams.Count = count; }
/* * Complete the 'angryAnimals' function below. * * The function is expected to return a LONG_INTEGER. * The function accepts following parameters: * 1. INTEGER n * 2. INTEGER_ARRAY a * 3. INTEGER_ARRAY b */ public static long angryAnimals(int n, List <int> a, List <int> b) { // List<List<string>> lstSafeCombinations = new List<List<string>>(); AngryComboDict dict = new AngryComboDict(a, b); long count = n; Parallel.For(1, n, new ParallelOptions { MaxDegreeOfParallelism = 1 }, (i, state) => { //lock (dict) //{ // lstSafeCombinations.Add(new List<string>()); //} long localCount = 0; for (int j = i + 1; j <= n; j++) { Console.WriteLine("(i:{0},j:{1})->>", i, j); if (dict.KeyExists(j)) { Console.WriteLine("(i:{0},j:{1}) KeyExists for {0} -> with Min Value {2}", i, j, dict.GetMinValueAgainstKey(j)); } //find limit between i and j so that it can be verified and loop is skipped if (dict.KeyValuePairExistsMinMax(j, i)) { Console.WriteLine("(i:{0},j:{1})::Break", i, j); break; } localCount = localCount + 1; //lock (dict) //{ lstSafeCombinations[i - 1].Add("--" + j.ToString()); } } lock (dict) { count = count + localCount; } }); return(count); }
/* * Complete the 'angryAnimals' function below. * * The function is expected to return a LONG_INTEGER. * The function accepts following parameters: * 1. INTEGER n * 2. INTEGER_ARRAY a * 3. INTEGER_ARRAY b */ public static long angryAnimals(int n, List <int> a, List <int> b) { //List<List<string>> lstSafeCombinations = new List<List<string>>(); AngryComboDict dict = new AngryComboDict(a, b); long count = n; //{ // List<ThreadParams> lstResultCounts = new List<ThreadParams>(); // List<Thread> lstThread = new List<Thread>(); // int thrCount = 8; // int partitions = n / thrCount; // for (int i = 0; i < partitions; i++) // { // int upperLimit = ((i * thrCount) + 1); // ThreadParams tp = new ThreadParams() // { // start = upperLimit, // end = n, // nCount = n, // dict = dictionary // }; // Thread t = new Thread(new ParameterizedThreadStart(CalculatePartitionResult)); // lstThread.Add(t); // lstResultCounts.Add(tp); // t.Start(tp); // } //} //for (int i = 1; i <= n; i++) //{ // // lstSafeCombinations.Add(new List<string>()); // bool skipAhead = false; // // string items = ""; // for (int j = i + 1; j <= n; j++) // { // //for(int k=i; k < j; k++) // //{ // //if (!dict.KeyExists(k)) // //{ // // break; // //} // //find limit between i and j so that it can be verified and loop is skipped // if (dictionary.KeyValuePairExistsMinMax(j, i)) // { // skipAhead = true; // break; // } // //} // if (!skipAhead) // { // count = count + 1; // // lstSafeCombinations[i - 1].Add("--"+j.ToString()); // } // else // { // break; // } // } //} // t1.Start(tp); // t1.Join(); // count = count + tp.Count; Parallel.For(1, n, new ParallelOptions { MaxDegreeOfParallelism = 10 }, (i, state) => { // lstSafeCombinations.Add(new List<string>()); long localCount = 0; bool skipAhead = false; // string items = ""; for (int j = i + 1; j <= n; j++) { //for(int k=i; k < j; k++) //{ //if (!dict.KeyExists(k)) //{ // break; //} //find limit between i and j so that it can be verified and loop is skipped if (dict.KeyValuePairExistsMinMax(j, i)) { skipAhead = true; break; } //} if (!skipAhead) { localCount = localCount + 1; // lstSafeCombinations[i - 1].Add("--"+j.ToString()); } else { break; } } lock (dict) { count = count + localCount; } }); return(count); }