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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.