Advertisement
Guest User

Solution

a guest
Jul 9th, 2015
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace _04.SequenceInMatrix
  8. {
  9. class SequenceInMatrix
  10. {
  11. private static String[,] _matrix;
  12. private static int _rows;
  13. private static int _cols;
  14. private static List<String> _result;
  15.  
  16. static void Main(string[] args)
  17. {
  18. Console.WriteLine("Using matrix from example A");
  19. InstantiateMatrixFromExampleA();
  20. FindLongestSequenceOfEqualStrings();
  21. PrintResult();
  22.  
  23. Console.WriteLine("Using matrix from example B");
  24. InstantiateMatrixFromExampleB();
  25. FindLongestSequenceOfEqualStrings();
  26. PrintResult();
  27.  
  28. Console.WriteLine("You can test me with your own matrix, if you want.");
  29. InstantiateCustomMatrix();
  30. FindLongestSequenceOfEqualStrings();
  31. PrintResult();
  32. }
  33.  
  34. private static void InstantiateMatrixFromExampleA()
  35. {
  36. _rows = 3;
  37. _cols = 4;
  38. _matrix = new String[,]
  39. {
  40. {"ha", "fifi", "ho", "hi"},
  41. {"fo", "ha", "hi", "xx"},
  42. {"xxx", "ho", "ha", "xx"},
  43. };
  44. _result = new List<String>();
  45. }
  46.  
  47. private static void InstantiateMatrixFromExampleB()
  48. {
  49. _rows = 3;
  50. _cols = 3;
  51. _matrix = new String[,]
  52. {
  53. {"s", "qq", "s"},
  54. {"pp", "pp", "s"},
  55. {"pp", "qq", "s"}
  56. };
  57. _result = new List<String>();
  58. }
  59.  
  60. private static void InstantiateCustomMatrix()
  61. {
  62. int[] rowsCols = GetRowsColsFromConsole();
  63. _rows = rowsCols[0];
  64. _cols = rowsCols[1];
  65. _matrix = new String[_rows, _cols];
  66. _result = new List<String>();
  67.  
  68. PopulateMatrixFromConsole();
  69. }
  70.  
  71. private static int[] GetRowsColsFromConsole()
  72. {
  73. int[] rowsCols = new int[2];
  74.  
  75. Console.Write("Rows: ");
  76. rowsCols[0] = int.Parse(Console.ReadLine());
  77.  
  78. Console.Write("Cols: ");
  79. rowsCols[1] = int.Parse(Console.ReadLine());
  80.  
  81. return rowsCols;
  82. }
  83.  
  84. private static void PopulateMatrixFromConsole()
  85. {
  86. for (int row = 0; row < _rows; row++)
  87. {
  88. Console.Write("Enter the " + (_cols+ 1) + " elements for row " + (row + 1) + " separated by space: ");
  89. String[] input = Console.ReadLine().Split(' ');
  90. int inputIndex = 0;
  91. for (int col = 0; col < _cols; col++)
  92. {
  93. _matrix[row, col] = input[inputIndex];
  94. inputIndex++;
  95. }
  96. }
  97. }
  98.  
  99. private static void FindLongestSequenceOfEqualStrings()
  100. {
  101. List<String> sequence = new List<String>();
  102. for (int row = 0; row < _rows; row++)
  103. {
  104. for (int col = 0; col < _cols; col++)
  105. {
  106. sequence = GetSequenceRight(row, col, sequence);
  107. CopySeqToResultIfCountIsBigger(sequence);
  108. sequence.Clear();
  109.  
  110. sequence = GetSequenceRightDown(row, col, sequence);
  111. CopySeqToResultIfCountIsBigger(sequence);
  112. sequence.Clear();
  113.  
  114. sequence = GetSequenceDown(row, col, sequence);
  115. CopySeqToResultIfCountIsBigger(sequence);
  116. sequence.Clear();
  117.  
  118. sequence = GetSequenceLeftDown(row, col, sequence);
  119. CopySeqToResultIfCountIsBigger(sequence);
  120. sequence.Clear();
  121.  
  122. sequence = GetSequenceLeft(row, col, sequence);
  123. CopySeqToResultIfCountIsBigger(sequence);
  124. sequence.Clear();
  125.  
  126. sequence = GetSequenceLeftUp(row, col, sequence);
  127. CopySeqToResultIfCountIsBigger(sequence);
  128. sequence.Clear();
  129.  
  130. sequence = GetSequenceUp(row, col, sequence);
  131. CopySeqToResultIfCountIsBigger(sequence);
  132. sequence.Clear();
  133.  
  134. sequence = GetSequenceRightUp(row, col, sequence);
  135. CopySeqToResultIfCountIsBigger(sequence);
  136. sequence.Clear();
  137. }
  138. }
  139. }
  140.  
  141. private static List<String> GetSequenceRight(int row, int col, List<String> sequence)
  142. {
  143. String expected = _matrix[row, col];
  144. sequence.Add(expected);
  145. String element;
  146. for (int c = col + 1; c < _cols; c++)
  147. {
  148. element = _matrix[row, c];
  149. if (expected.Equals(element))
  150. {
  151. sequence.Add(element);
  152. }
  153. else
  154. {
  155. break;
  156. }
  157. }
  158.  
  159. return sequence;
  160. }
  161.  
  162. private static List<String> GetSequenceRightDown(int row, int col, List<String> sequence)
  163. {
  164. String expected = _matrix[row, col];
  165. sequence.Add(expected);
  166. String element;
  167. int r = row + 1;
  168. int c = col + 1;
  169. while (r < _rows && c < _cols)
  170. {
  171. element = _matrix[r, c];
  172. if (expected.Equals(element))
  173. {
  174. sequence.Add(expected);
  175. r++;
  176. c++;
  177. }
  178. else
  179. {
  180. break;
  181. }
  182. }
  183.  
  184. return sequence;
  185. }
  186.  
  187. private static List<String> GetSequenceDown(int row, int col, List<String> sequence)
  188. {
  189. String expected = _matrix[row, col];
  190. sequence.Add(expected);
  191. String element;
  192. for (int r = row + 1; r < _rows; r++)
  193. {
  194. element = _matrix[r, col];
  195. if (expected.Equals(element))
  196. {
  197. sequence.Add(element);
  198. }
  199. else
  200. {
  201. break;
  202. }
  203. }
  204.  
  205. return sequence;
  206. }
  207.  
  208. private static List<String> GetSequenceLeftDown(int row, int col, List<String> sequence)
  209. {
  210. String expected = _matrix[row, col];
  211. sequence.Add(expected);
  212. String element;
  213. int r = row + 1;
  214. int c = col - 1;
  215. while (r < _rows && c >= 0)
  216. {
  217. element = _matrix[r, c];
  218. if (expected.Equals(element))
  219. {
  220. sequence.Add(element);
  221. r++;
  222. c--;
  223. }
  224. else
  225. {
  226. break;
  227. }
  228. }
  229.  
  230. return sequence;
  231. }
  232.  
  233. private static List<String> GetSequenceLeft(int row, int col, List<String> sequence)
  234. {
  235. String expected = _matrix[row, col];
  236. sequence.Add(expected);
  237. String element;
  238. for (int c = col - 1; c >= 0; c--)
  239. {
  240. element = _matrix[row, c];
  241. if (expected.Equals(element))
  242. {
  243. sequence.Add(element);
  244. }
  245. else
  246. {
  247. break;
  248. }
  249. }
  250.  
  251. return sequence;
  252. }
  253.  
  254. private static List<String> GetSequenceLeftUp(int row, int col, List<String> sequence)
  255. {
  256. String expected = _matrix[row, col];
  257. sequence.Add(expected);
  258. String element;
  259. int r = row - 1;
  260. int c = col - 1;
  261. while (r >= 0 && c >= 0)
  262. {
  263. element = _matrix[r, c];
  264. if (expected.Equals(element))
  265. {
  266. sequence.Add(element);
  267. r--;
  268. c--;
  269. }
  270. else
  271. {
  272. break;
  273. }
  274. }
  275.  
  276. return sequence;
  277. }
  278.  
  279. private static List<String> GetSequenceUp(int row, int col, List<String> sequence)
  280. {
  281. String expected = _matrix[row, col];
  282. sequence.Add(expected);
  283. String element;
  284. for (int r = row - 1; r >= 0; r--)
  285. {
  286. element = _matrix[r, col];
  287. if (expected.Equals(element))
  288. {
  289. sequence.Add(element);
  290. }
  291. else
  292. {
  293. break;
  294. }
  295. }
  296.  
  297. return sequence;
  298. }
  299.  
  300. private static List<String> GetSequenceRightUp(int row, int col, List<String> sequence)
  301. {
  302. String expected = _matrix[row, col];
  303. sequence.Add(expected);
  304. String element;
  305. int r = row - 1;
  306. int c = col + 1;
  307. while (r >= 0 && c < _cols)
  308. {
  309. element = _matrix[r, c];
  310. if (expected.Equals(element))
  311. {
  312. sequence.Add(element);
  313. r--;
  314. c++;
  315. }
  316. else
  317. {
  318. break;
  319. }
  320. }
  321.  
  322. return sequence;
  323. }
  324.  
  325. private static void CopySeqToResultIfCountIsBigger(List<String> sequence)
  326. {
  327. if (sequence.Count > _result.Count)
  328. {
  329. _result = new List<String>(sequence);
  330. }
  331. }
  332.  
  333. private static void PrintResult()
  334. {
  335. Console.WriteLine("{0}", string.Join(", ", _result));
  336. }
  337. }
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement