Професионална програма
Loading...
Spaskich avatar Spaskich 36 Точки

Homework: Multidimensional Arrays, Sets, Dictionaries

Здравейте, колеги!
Предлагам да направим една обща тема (малко в последния момент) за второто домашно от курса по Advanced C#.

В този пост ще сложа линкове към сорса на задачите, които съм решил до момента и ще го ъпдейтвам, а в коментарите отдолу можем да обсъждаме начините на решаване и да изберем най-оптималния (който ще за заместя в този пост). 

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

 

___

Задача 1 - Fill the Matrix

Задача 2 - Мaximal Sum

Задача 3 - Matrix shuffling

Задача 4 - Sequence in Matrix

Задача 5 - Collect the Coins

Задача 6 - Count Symbols

Задача 7 - Phonebook

Задача 8 - Night Life

5
C# Advanced 21/09/2015 18:40:40
sholeto avatar sholeto 93 Точки

Не знам за оптимални работи, има доста да се развивам преди да започна да правя оптимални неща. За сега се старая кода да е по-разбираем, но не винаги се получава. :D

Problem 1a. Fill The Matrix - Помислих, че ще е интересно ако се вижда как се попълва матрицата и така го направих, понеже не отне доста време отгоре.

Problem 1b. Fill The Matrix

Problem 2. Maximal Sum - Това преди лекцията ми се беше сторило изключително трудно, но имаше подобен пример по време на лекцията и се оказа, че не е трудно.

Problem 3. Matrix Shuffling

Problem 4. Sequence In a Matrix - Това ми се струва най-трудната задача. Трябва да си призная, доста ме затрудни и използвах готов код. Може би когато ми остане време ще се върна назад да я разгледам пак, понеже ми хрумнаха няколко идеи докато решавах другите.

Problem 5. Collect The Coins

Problem 6. Count Symbols - Определено не са подредени по трудност.

Problem 7. Phonebook

Problem 8. Night Life

Problem 9. * Terrorists Win!

Problem 10. * Plus-Remove - Тук алгоритъма е същия, като проблем 2.

Problem 11. * String Matrix Rotation

Problem 12. * To the Stars! - Mass Effect ми е една от любимите поредици. :)

Problem 13. * Activity Tracker - Същия принцип като проблем 8.

 

Отворен съм към всякакви критики и преложения. Стига накой да му се занимава да се рови в чужд код. :D

3
21/09/2015 15:12:08
Spaskich avatar Spaskich 36 Точки

Ще добавя твоите решения на задачите, които съм решил по сходен/същия начин. ;)

1
cap7ainjack avatar cap7ainjack 20 Точки

Здрасти!

Относно задача 3, мисля че по условие трябва да връща "Invalid Ouput" и когато въведения стринг не започва със "swap"  както или ако е по-малко от 5 стринга(+ swap-a). Поне аз така го разбрах, а не мога да го направя този exeption като гледам и при теб не е така. 

Идеи ?

1
22/09/2015 09:04:10
sholeto avatar sholeto 93 Точки

Мда, прав си cap7ainjack. Тук съм недочел условието, което ми се случва често. 

Варианта, който ми хрумва, е да се сложи проверка в try блока, примерно: if (command[0] == "swap" && command.Length == 5) чак тогава да изпълнят методите, които са там. И после примерно else { throw new Exception();} понеже да си използвам пак ексепшъна за грешен input. :)

Утре ще го оправя и ъпдейтна.

1
21/09/2015 23:52:11
cap7ainjack avatar cap7ainjack 20 Точки

Ето моето решение на задача 4 Sequence in Matrix

http://pastebin.com/wJtQu2Dm

Решавам я с Dictionary<string,int>  - където пълня на стринг думата за всяка позиция на матрицата,  а на инт слагам  от 1 до ... в зависимост колко пъти я е намерило тази дума. Търся повтарящи думи с платформа 2х2, като вътре позиция се срявнява с всички останали.

Има обаче място за оптмизация. Например ръчно съм написал 6 if-а , а сигурно има начин да изглежда по-добре и ще се надявам да помогнете, който има желание да го погледне това решение, как може да се направи по-добро :)

 

Не съм добавил още да чете матрицата от конзолата за сега върти само тази от първото примерно решение в домашната. 

1
22/09/2015 13:49:24
kidroca avatar kidroca 117 Точки

Здасти капитане,

Ето това (така и така използваш else):

string curWord = matrix[row, col];
if (!(allWords.ContainsKey(curWord)))
{
    allWords.Add(curWord,1);
}
else
{
    allWords[curWord]++;
}

Можеш да си го напишеш така:

string curWord = matrix[row, col];
if (allWords.ContainsKey(curWord))
{
    allWords[curWord]++;
}
else
{
    allWords.Add(curWord,1);
}

Не е кой знае, но в случей че използваш и else-a е по - четливо 

А самият израз щом се повтаря 6 пъти може прост да си го сложшш във отделен метод и да го викаш когато ти трябва тази проверка

static void AddToDictionary(Dictionary<string, int> dict, string key)
{
    if (dict.ContainsKey(key))
    {
        dict[key]++;
    }
    else
    {
        dict.Add(key, 1);
    }
}

И на мястото на if-a слагаш 

string curWord = matrix[row, col];
AddToDictionary(allWords, curWord);

 

1
23/09/2015 23:02:33
cap7ainjack avatar cap7ainjack 20 Точки

Да, с метод ще изглежда значително по-добре, мерси отново! :)

0