public static List <MatrixItem> generatePossiblityMatrix(this List <item> squares) { List <int> UniquePossibles = squares.getPossibleUnique(); List <MatrixItem> returnMe = new List <MatrixItem>(); //Trace.WriteLine(string.Format("Generating possibility matrix for {0} items", squares.Count.ToString())); if (squares.Count == 0) { return(null); } if (squares.Count == 2) { MatrixItem newGuy = new MatrixItem(); newGuy.ControlPossibles = new List <int>(); newGuy.ControlPossibles.Add(UniquePossibles[0]); newGuy.ControlPossibles.Add(UniquePossibles[1]); newGuy.items = squares.Where(x => x.possibles.Contains(UniquePossibles[0])).Where(y => y.possibles.Contains(UniquePossibles[1])).ToList(); newGuy.UnquePossibles = newGuy.items.getPossibleUnique(); returnMe.Add(newGuy); } else { //generate the items for the list for (int outer = 0; outer < UniquePossibles.Count - 1; outer++) { for (int inner = outer + 1; inner < UniquePossibles.Count; inner++) { //Trace.WriteLine(string.Format("Creating Matrix items {0}-{1}", outer.ToString(), inner.ToString())); MatrixItem newGuy = new MatrixItem(); newGuy.ControlPossibles = new List <int>(); newGuy.ControlPossibles.Add(UniquePossibles[outer]); newGuy.ControlPossibles.Add(UniquePossibles[inner]); newGuy.items = squares.Where(x => x.possibles.Contains(UniquePossibles[outer])).Where(y => y.possibles.Contains(UniquePossibles[inner])).ToList(); newGuy.UnquePossibles = newGuy.items.getPossibleUnique(); returnMe.Add(newGuy); } } } return(returnMe); }
public static List <MatrixItem> generateSimpleMatrix(this List <item> squares) { List <MatrixItem> returnMe = new List <MatrixItem>(); //Trace.WriteLine(string.Format("Generating possibility matrix for {0} items", squares.Count.ToString())); if (squares.Count == 0) { return(null); } for (int i = 1; i < 10; i++) { MatrixItem newGuy = new MatrixItem(); newGuy.ControlPossibles = new List <int>(); newGuy.ControlPossibles.Add(i); newGuy.items = squares.Where(x => x.possibles.Contains(i)).ToList(); newGuy.UnquePossibles = newGuy.items.getPossibleUnique(); returnMe.Add(newGuy); } return(returnMe); }