public void CheckIfEmptyWordToSearchShowsZeroOccurences() { Table table = new Table(new List<string>() { "ivan", "evnn", "nnav", "mvvn", "irit" }); string wordToSearch = " "; string wordToSearchReversed = WordOperations.ReverseWord(wordToSearch); string[] wordsToSearch = { wordToSearch, wordToSearchReversed }; int wordOccurences = TableOperations.CountWordInTable(table, wordsToSearch); Assert.AreEqual(0, wordOccurences); }
public static void Main(string[] args) { //creates new table with data Table table = new Table(new List<string>() { "ivan", "evnh", "inav", "mvvn", "qrit" }); string wordToSearch = "ivan"; string wordToSearchReversed = WordOperations.ReverseWord(wordToSearch); string[] wordsToSearch = { wordToSearch, wordToSearchReversed }; int wordOccurences = TableOperations.CountWordInTable(table, wordsToSearch); Console.WriteLine(wordOccurences); }
/// <summary> /// Builds a string from table cells based on start position and position modifiers /// for each step until give maximum row and column position /// </summary> /// <param name="table">Table to build string from</param> /// <param name="currentRow">Int start row position</param> /// <param name="currentCol">Int start column position</param> /// <param name="maxRow">Maximum allowed row position</param> /// <param name="maxCol">Maximum allowed column position</param> /// <param name="rowPositionModifier">Row position modifier on each step</param> /// <param name="colPositionModifier">Column position modifier on each step</param> /// <returns>Returns the build string from the table</returns> private static string BuildStringToSearchFromTable(Table table, int currentRow, int currentCol, int maxRow, int maxCol, int rowPositionModifier, int colPositionModifier) { StringBuilder stringToSearch = new StringBuilder(); while (currentRow < maxRow && currentCol < maxCol && currentRow > -1 && currentCol > -1) { stringToSearch.Append(table.GetTable[currentRow][currentCol]); currentRow += rowPositionModifier; currentCol += colPositionModifier; } return stringToSearch.ToString(); }
public void CheckIfEmptyTableShowZeroOccurences() { Table table = new Table(new List<string>()); string wordToSearch = "ivan"; string wordToSearchReversed = WordOperations.ReverseWord(wordToSearch); string[] wordsToSearch = { wordToSearch, wordToSearchReversed }; int wordOccurences = TableOperations.CountWordInTable(table, wordsToSearch); Assert.AreEqual(0, wordOccurences); }
/// <summary> /// Count word occurences in table by summing /// the occurences in rows, columns and diagonals /// </summary> /// <param name="table">Table to be checked</param> /// <param name="words">String array of words to search for</param> /// <returns>Returns int occurences of all words</returns> public static int CountWordInTable(Table table, string[] words) { int count = 0; if(table.RowsCount > 0 && !String.IsNullOrEmpty(words[0])) { count += SearchWordInRows(table, words); count += SearchWordInColumns(table, words); count += SearchWordInDiagonals(table, words); } return count; }
/// <summary> /// Search in current diagonal by given start position /// and position modifiers in each step /// </summary> /// <param name="table">Table to search in</param> /// <param name="words">String array of words to search for</param> /// <param name="currentColValue">Start column value</param> /// <param name="modifierRows">Row modifier on each step required only for building string to search</param> /// <param name="modifierCols">Column modifier on each step required only for building string to search</param> /// <param name="rowReseter">Row reset value after reaching the edge of the table</param> /// <param name="colReseter">Column reset value after reaching the edge of the table</param> /// <param name="rowIncreaser">Current row position modifier on each step</param> /// <param name="colIncreaser">Current column position modifier on each step</param> /// <returns>Returns int occurences of string array of words in the table</returns> private static int SearchInDiagonals(Table table, string[] words, int currentColValue, int modifierRows, int modifierCols, int rowReseter, int colReseter, int rowIncreaser, int colIncreaser) { int currentRow = 0; int currentCol = currentColValue; int maxRow = table.RowsCount; int maxCol = table.ColsCount; int rowPositionModifier = modifierRows; int colPositionModifier = modifierCols; int count = 0; int maxDiagonal = maxRow > maxCol ? maxCol : maxRow; while (maxRow - currentRow >= maxDiagonal) { string stringToSearch = BuildStringToSearchFromTable(table, currentRow, currentCol, maxRow, maxCol, rowPositionModifier, colPositionModifier); foreach (var word in words) { count += WordOperations.CheckWordOccurences(stringToSearch, word); } currentRow += rowIncreaser; } currentRow = rowReseter; currentCol = colReseter; while (currentCol >= maxDiagonal) { string stringToSearch = BuildStringToSearchFromTable(table, currentRow, currentCol, maxRow, maxCol, rowPositionModifier, colPositionModifier); foreach (var word in words) { count += WordOperations.CheckWordOccurences(stringToSearch, word); } currentCol-= colIncreaser; } return count; }
public void CheckIfTableValueIsSetCorrectly() { Table table = new Table(); var newTableData = new List<string>() { "ivan", "evnn", "nnav", "mvvn", "irit" }; table.GetTable = newTableData; bool areEqual = true; int position = 0; foreach(var tableRow in table.GetTable) { if(!tableRow.Equals(newTableData[position])) { areEqual = false; break; } position++; } Assert.AreEqual(true, areEqual); }
public void CheckIfWordIsSearchCorrectlyColumnsBackwardsOnly() { Table table = new Table(new List<string>() { "naan", "aaaa", "vaav", "iaai", "aaaa" }); string wordToSearch = "ivan"; string wordToSearchReversed = WordOperations.ReverseWord(wordToSearch); string[] wordsToSearch = { wordToSearch, wordToSearchReversed }; int wordOccurences = TableOperations.CountWordInTable(table, wordsToSearch); Assert.AreEqual(2, wordOccurences); }
public void CheckIfWordIsSearchCorrectlyWholeTable() { Table table = new Table(new List<string>() { "ivan", "evnn", "nnav", "mvvn", "irit" }); string wordToSearch = "ivan"; string wordToSearchReversed = WordOperations.ReverseWord(wordToSearch); string[] wordsToSearch = { wordToSearch, wordToSearchReversed }; int wordOccurences = TableOperations.CountWordInTable(table, wordsToSearch); Assert.AreEqual(4, wordOccurences); }
public void CheckIfWordIsSearchCorrectlyRightToLeftDiagonalOnly() { Table table = new Table(new List<string>() { "aaai", "aavi", "aava", "naaa", "naaa" }); string wordToSearch = "ivan"; string wordToSearchReversed = WordOperations.ReverseWord(wordToSearch); string[] wordsToSearch = { wordToSearch, wordToSearchReversed }; int wordOccurences = TableOperations.CountWordInTable(table, wordsToSearch); Assert.AreEqual(2, wordOccurences); }
/// <summary> /// Search words occurences in table rows /// </summary> /// <param name="table">Table to search in</param> /// <param name="words">String array of words to search for</param> /// <returns>Returns int occurences of string array of words in the table</returns> private static int SearchWordInRows(Table table, string[] words) { int count = 0; foreach (var word in words) { foreach (var row in table.GetTable) { count += WordOperations.CheckWordOccurences(row, word); } } return count; }
/// <summary> /// Search words occurences in table diagonals /// </summary> /// <param name="table">Table to search in</param> /// <param name="words">String array of words to search for</param> /// <returns>Returns int occurences of string array of words in the table</returns> private static int SearchWordInDiagonals(Table table, string[] words) { int count = 0; //set initial values for left to right diagonal search int leftToRightDiagonalStartCol = 0; int leftToRightDiagonalRowsModifier = 1; int leftToRightDiagonalColsModifier = 1; int leftToRightDiagonalRowReseter = 0; int leftToRightDiagonalColReseter = 1; int leftToRightDiagonalRowIncreaser = 1; int leftToRightDiagonalColIncreaser = 1; ////set initial values for right to left diagonal search int rightToLeftDiagonalStartCol = table.ColsCount - 1; int rightToLeftDiagonalRowsModifier = 1; int rightToLeftDiagonalColsModifier = -1; int rightToLeftDiagonalRowReseter = 0; int rightToLeftDiagonalColReseter = table.ColsCount - 2; int rightToLeftDiagonalRowIncreaser = 1; int rightToLeftDiagonalColIncreaser = -1; count += SearchInDiagonals(table, words, leftToRightDiagonalStartCol, leftToRightDiagonalRowsModifier, leftToRightDiagonalColsModifier, leftToRightDiagonalRowReseter, leftToRightDiagonalColReseter, leftToRightDiagonalRowIncreaser, leftToRightDiagonalColIncreaser); count += SearchInDiagonals(table, words, rightToLeftDiagonalStartCol, rightToLeftDiagonalRowsModifier, rightToLeftDiagonalColsModifier, rightToLeftDiagonalRowReseter, rightToLeftDiagonalColReseter, rightToLeftDiagonalRowIncreaser, rightToLeftDiagonalColIncreaser); return count; }
/// <summary> /// Search words occurences in table columns /// </summary> /// <param name="table">Table to search in</param> /// <param name="words">String array of words to search for</param> /// <returns>Returns int occurences of string array of words in the table</returns> private static int SearchWordInColumns(Table table, string[] words) { int currentRow = 0; int currentCol = 0; int maxRow = table.RowsCount; int maxCol = table.ColsCount; int rowPositionModifier = 1; int colPositionModifier = 0; int count = 0; for (int i = 0; i < maxCol; i++) { string stringToSearch = BuildStringToSearchFromTable(table, currentRow, currentCol, maxRow, maxCol, rowPositionModifier, colPositionModifier); foreach (var word in words) { count += WordOperations.CheckWordOccurences(stringToSearch, word); } currentCol++; } return count; }