using System; using System.Collections.Generic; using System.Linq; using System.Text; class Program { public static TableClass _MyTable = new TableClass(); public class TableRow { public int ID; public string Name; public string Hair; public string Eyes; public TableRow(int _ID, string _Name, string _Hair, string _Eyes) { ID = _ID; Name = _Name; Hair = _Hair; Eyes = _Eyes; } } public class TableClass { public List Table = new List(); } static void Main(string[] args) { // ID Name Hair Eyes // 1 John Black Brown // 2 Paul Brown Green // 3 Ringo Blond Blue // 4 George Red Blue // 5 John * * // 6 John * Brown // 7 * Red * // 8 * * * // 9 Paul * * CreateTable(); ShowTable(); FindID("John", "Black", "Brown"); // should return 1, complete match FindID("John", "Red", "Green"); // should return 5 (not 7), matched on "John" and the other two wildcards (*) FindID("John", "Red", "Brown"); // should return 6, matched on "John" and "Brown" and one wildcard FindID("Brian", "Grey", "Grey"); // should return 8, matched on three wildcard } static bool match(TableRow row, string _Name, string _Hair, string _Eyes) { return (row.Name == _Name || row.Name == "*") && (row.Hair == _Hair || row.Hair == "*") && (row.Eyes == _Eyes || row.Eyes == "*"); } static int score(TableRow row) { //can assume these already "match" var score = 0; score += row.Name == "*" ? 1000 : 2000; score += row.Hair == "*" ? 100 : 200; score += row.Eyes == "*" ? 10 : 20; return score; } static int FindID(string _Name, string _Hair, string _Eyes) { // needs to be implemented var s = from row in _MyTable.Table where match(row, _Name, _Hair, _Eyes) orderby score(row) descending select row; Console.WriteLine(s.First().ID); return 0; } static void CreateTable() { _MyTable.Table.Add(new TableRow(1, "John", "Black", "Brown")); _MyTable.Table.Add(new TableRow(2, "Paul", "Brown", "Green")); _MyTable.Table.Add(new TableRow(3, "Ringo", "Blond", "Blue")); _MyTable.Table.Add(new TableRow(4, "George", "Red", "Blue")); _MyTable.Table.Add(new TableRow(5, "John", "*", "*")); _MyTable.Table.Add(new TableRow(6, "John", "*", "Brown")); _MyTable.Table.Add(new TableRow(7, "*", "Red", "*")); _MyTable.Table.Add(new TableRow(8, "*", "*", "*")); _MyTable.Table.Add(new TableRow(9, "Paul", "*", "*")); } static void ShowTable() { foreach(TableRow _TableRow in _MyTable.Table) { Console.WriteLine("{0} {1} {2} {3}", _TableRow.ID, _TableRow.Name, _TableRow.Hair, _TableRow.Eyes); } } }