Софтуерно Инженерство
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
kidroca avatar kidroca 117 Точки

Тук са моите решения на всички задачи, направил съм ги цветни - матриците се оцветяват където има смисъл.

https://github.com/kidroca/Advanced-CSharp-2015-Multidimentional

Долу са задачите които ми бяха по - интересни, със 4та много се заиграх - знам как да я направя много лесно, за 20 - 30 мин. но това решени съм го писал на 2 пъти по 2 - 3 часа.

Задача 2 - Maximal Sum - работи на само с 3х3, а със площадка от какъвто размер и бъде зададено 

Задача 4 - Sequence in Matrix - Overkill направих я да работи с със generic матрица - не само със стрингове , а със всички данни които имплементират IConvertible (заради стринговете). Това всъшност беше лесното. Откритата последователност се оцветява. Методът който проверява последователността приема като параметри освен матрицата - списък от методи/делегати които да изпълни и от там вече се влиза в Матрицата (ама във филма)

Задача10 - Plus Remove - Използвам List<bool[]> къдто запомям индексите котито съдържат части от фигурата Plus и на края всичко което е true го изрязвам от резултата

Задача 11 - String Matrix Rotation - Tъй като градусите се подават във вида "Roatae(90)" понеже са единственото число във стринга си ги извадих със ей този обикновен regex:

var rxPattern = new Regex(@"\d+");

int degreesOfRotation = int.Parse(
    rxPattern.Match(
        Console.ReadLine()).Value);

После със ей този израз разбирам колко пъти(1, 2 или 3) е необходимо да завъртя матрицата на 90 градуса 

int numberOfRotations = (degreesOfRotation / 90) % 4;

И за моя изненада тестовете минават, (мислех си че ще гърмят за време защото първо преобразуам входа във char[,]) после я въртя но всъшност съм далеч от горната граница.

0
23/09/2015 22:41:14
kidroca avatar kidroca 117 Точки

Готино решение на Terrorists Win!

0
Isibel avatar Isibel 40 Точки

Благодаря, първо я реших с регекс, но стана някак засукана и реших, че без тях ще ми е по-добре. String.IndexOf и StringBuilder са напълно достатъчни.

0