[C#] Домашно Multidimensional Arrays - 3 задача


10

Условие: We are given a matrix of strings of size N x M. Sequences in the matrix we define as sets of several neighbor elements located on the same line, column or diagonal. Write a program that finds the longest sequence of equal strings in the matrix. Решениеsource.

ha fifi ho hi
fo ha hi xx
xxx ho ha xx
 
s qq s
pp pp s
pp qq s
 
Обяснение: За всяка клетка броим следващите еднакви клетки в посоките: надясно, надолу, надясно и надолу. Няма смисъл да броим наляво или нагоре, защото вече сме ги преброили на предишните итерации. Запазваме дали вече сме минали в тази посока от по-голяма редица, за да не преброяваме всички по-малки подредици. Накрая отпечатваме дължината на най-дългата такава и нейната стойност.
 
Edit: Махнах побитовите операции и използвам цивилизован начин с тримерен масив по идея на zlatkov да проверя дали сме минали в тази посока - diff.



Отговори



0

Здравейте, ето едно решение и от мен http://pastebin.com/H2esEkeE

След дълго мъчене и несполуки (изпускане на някой диагонал и всякакви "бордер кейсове") реших да си разделя логиката на четири части  съответно за ред, колона, диагонал "надясно" и диагонал "наляво". Мисля че работи, ако някой има време да тества и да сподели : )

ПС: и аз се сблъсках с "проблема" описан от колегите по-горе, и се научих да си слагам логиката с индекси в края (в случая на while циклите).