[C#] Домашно Подготовка за тест и изпит - Lines (Straight Sequences)


2

Здравейте, колеги!

Моето решение на тази задача даде грешка на два от тестовете (7. и 8.) и се наложи да го коригирам за 100 / 100. Не бях съобразил, че когато една попълнена клетка не е част от по-дълга поредица съгласно условието на задачата се брои само веднъж (1 поредица с дължина 1).

Задачата решавам като използвам структура Line с полета Length и Count. Намирам най-дългата поредица по редове, а после и по колони и правя сравнение:

 

        Line longestByRows = LongestLine(a);
        Line longestByColumns = LongestLine(b);
        if (longestByRows.Length > longestByColumns.Length)
        {
            Console.WriteLine(longestByRows.Length);
            Console.WriteLine(longestByRows.Count);
        }
        else if (longestByRows.Length < longestByColumns.Length)
        {
            Console.WriteLine(longestByColumns.Length);
            Console.WriteLine(longestByColumns.Count);
        }
        else if (longestByRows.Length > 1)
        {
            Console.WriteLine(longestByRows.Length);
            Console.WriteLine(longestByRows.Count + longestByColumns.Count);
        }
        else
        {
            Console.WriteLine(longestByRows.Length);
            Console.WriteLine(longestByRows.Count);
        }



Отговори



1
Браво добра идея.
Аз пазя общия брой на най-дългите линии. Като проверявам по хоризонтала и вертикала и дължината естественно. Накрая проверявам дали най-дългата линия е 1 ако е така извеждам брояча само по вертикала, за да избегна двойното преброяване също както теб.
Ето ти примерен код:
http://pastebin.com/Rdf0bU5j

от nikola76 (1250 точки)


0
Аз ги вадя в един лист и търся максималната стойност. Но определено си скъсах нервите с тея единици дето не се броели. Толкова ужасни условия на задачи не съм чела чесно:) И тоя кодер дето не пише какви данни пуска и си дебъгваш на сляпо.. На мен на изпита (ако стигна до там)ще ми отнеме повече време да разшифровам какво се иска от мен отколкото да го напиша.
http://pastebin.com/xxMCK7mS

от Gerya (1079 точки)


0
Здравей! Много оригинално решение! Аз се придържам към стандартното:
http://pastebin.com/jzeZxC82

от Dimov (907 точки)


1

Lines->Code here

Зареждам числата от всеки ред в един масив.Всяко число конвертирам в двойчен вид като стринг. С цикъл foreach обхождам всеки стринг ("00100011" примерно) и пълня масив от символи( char[8] ) .Масивът от символи отговаря на число от даден ред. Тези символи от масива ги взимам един по един и ги пълня на всеки ред в друг двумерен масив(матрица) като от символа вадя '0' и получавам int(каствам го). Така получавам матрицата с 0 и 1-ци.
С for цикли намирам максималният брой на съседни елементи по хоризонтала, като броя колко са тези линии,ако са повече от една. Същото правя и по вертикала.


от Veni.Naydenov (200 точки)


0
Няколко идеи по кода: Пробвай да четеш входа чрез цикъл. Няма нужда да имаш 8 еднакви реда. След прочитане на всяко число веднага го конвертираш в двоичен вид, обхождаш му чаровете в един вътрешен цикъл и в зависимост дали чар-а е "0" или "1" попълваш във финалната матрица 1 или 0 вече като интиджър. Може да ползваш побитови операции за извличане на отделните битове, би трябвало да е по-бързо. Крайната матрица спокойно може да е от чарове и да си работиш с нея.
Пиша този пост, защото правиш множество ненужни операции и използваш допълнителна памет. Старай се да правиш нещата по възможно най-простия и очевиден начин, с минимален брой итерации.
Успех на изпита :)

от pirin (1101 точки)

0
Благодаря за съветите, напълно си прав за всичко. Просто това беше първото което ми хрумна.Някои от нещата в процеса на писане се сетих,че може и по по-лесен начин,но обикновено като ми хрумне нещо и искам да го реализирам така,дори и да е по по-труден начин. Иначе съветите ти са много добри.

от Veni.Naydenov (200 точки)


0

Ето го и моето решение за 100т. - http://pastebin.com/FE2f3tNW

Ако не бях прочел във форума никога нямаше да се сетя да разгледам случая когато най-дългата редица е 1. Този случай много леко се разграничава от това дали имаме три поредни единици по вертикала или хоризонтала....или само една...страшни уловки имат тия наглед прости задачи : )

 


от p.penchev (204 точки)