Loading...
i.alidzhikov avatar i.alidzhikov 63 Точки

[Homework] Advanced C# - Multidimensional Arrays, Sets, Dictionaries

Прилагам своите решения на домашната от лекцията за Multidimensional Arrays, Sets, Dictionaries. Надявам се да са от полза на някого, който изпитва затруднения. Всякакви предложения за корекции са добре дошли. : )

 

Problem 1. Fill the Matrix

Problem 2. Maximal Sum

Problem 3. Matrix Shuffling

Problem 4. Sequence in 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

Problem 11. *String Matrix Rotation

Problem 12. *To the Stars!

Problem 13. *Activity Tracker

20
C# Advanced 11/05/2015 11:04:53
DHristoskov avatar DHristoskov 211 Точки

Аз ще добавя само задачите, които се различават като решения от твоите, няма смисъл да поствам всички:

1.Fill the Matrix

3.Matrix Shuffling

4.Sequence in Matrix

5.Collect the Coins

9.*Terrorists Win!

11.*String Matrix Rotation  - се различава от твоето решение, но все още имам малък проблем.

12.*То The Starts! - Ето точно тук съм зациклил.

13*Activity Tracker

8
08/05/2015 16:43:59
nstanevski avatar nstanevski 37 Точки

@ i.alidzhikov, @DHristoskov:

Вашите решения на зад. 4, "Sequence in Matrix" проверяват за последователности по редове, колони, главния диагонал и успоредните на гл. диагонал. Бихте могли да подобрите решенията като проверявате и вторичния и успоредните му диагонали. Моето решение го прави.

В зад.5, Collect the coins е добре след като се провери, че в дадена клетка има '$' този символ да се промени, така че при последващо преминаване да не се брои отново.

1
10/05/2015 08:33:33
EBojilova avatar EBojilova 330 Точки

И аз забелязах, че се проверява само единия наклон на диагонала, ето решение на всички диагонали- и леви и десни:

https://gist.github.com/EBojilova/4b8788faad3ea4f14c05 

Отдолу съм дала инпута, така както е написана програмата, за да не се бавите при въвеждането :)

5
09/05/2015 20:53:07
EBojilova avatar EBojilova 330 Точки

DHristoskov

Този exeption  в Collect the coins  много ми хареса, и даже си преработих моето решение с него :)

1
nstanevski avatar nstanevski 37 Точки

Една техническа подробност: когато paste-ваш сорс-кода си в Gist, горе вляво в полето в което първоначално пише "x Name this file..." задай името на файла с разширение .cs. Така ще активираш синтактичното оцветяване.

1
EBojilova avatar EBojilova 330 Точки

Благодаря, още не бях стигнала до там, а се чудех как става :)

1
pataroka avatar pataroka 319 Точки

Никой ли няма да спомене, че на 2 задача има грешка във входните данни на примера, или аз пак съм изтеглил неъпдейтнати условия за задачите?

4
08/05/2015 23:44:01
i.alidzhikov avatar i.alidzhikov 63 Точки

Да, съгласен съм с теб. Размерът на матрицата от примерния тест трябва да бъде 4 x 5, но и ти би се съгласил с мен, че не е някаква фрапантна грешка, а съвсем малко недоглеждане от страна на автора на задачите. : )

2
pataroka avatar pataroka 319 Точки

Абе фрапантна си е, като гледам, че си съобразил решението си с грешката... Аз на твое място бих изтрил единичките дето си ги добавил при инициализирането на променливите за редове и колони...

1
Filkolev avatar Filkolev 4482 Точки

Грешката е коригирана.

1
knoteva avatar knoteva 1081 Точки

Здравей, 

В 5 задача, в случаите '^' и 'v', трябва да има и проверка: "y < board[temp].Length". Ако пробваш примера с малки "v"( "v>>^^>>>vvv<<"), ще видиш, че ти дава: "System.IndexOutOfRangeException".

 

0
Filkolev avatar Filkolev 4482 Точки

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

4
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Поправено - и много благодаря :)

-2
EBojilova avatar EBojilova 330 Точки

Aз съм я направила точно с масив от стрингове.

После се опитах да я преработя, с хващане на IndexOutOfRangeException exc, както е решението на  DHristoskov, но не ми се получи. За него явно си трябва да се превърнат стринговете в масив от чарове??? 

ето го решението на DHristoskov

http://pastebin.com/rczu58nM 

ето го и моето решение само с масив от срингове, което не можах да преработя с exeption, някой има ли идея как да стане?

https://github.com/EBojilova/Homework02.MultidimensionalArraysSetsDictionaries/blob/master/05.CollectCoins/CollectCoins.cs 

 

 

1
Filkolev avatar Filkolev 4482 Точки

^ Най-лесно би било ако си изкараш някакъв метод, който да прави обхождането, при викането да го оградиш с try-catch и ако изгърми с IndexOutOfRange да увеличиш брояча за ударите в стени. Понеже променяш и други променливи трябва да помислиш как ще е най-удачно; принципно може да стане с ref да подадеш по референция броячите и булевата променлива, но ако може да го избегнеш - избгни го по някакъв начин.

1
pataroka avatar pataroka 319 Точки

Тоз път малко се помотах, но в крайна сметка ето ги и моите решения 02.Advanced-CSharp-MultidimensionalArrays-Sets-Dictionaries-Homework.

Вероятно е споменавано вече, но аз явно съм го проспал, та каква точно е културата на Джъджа и защо ми хваща инвариантна когато си иска?

Конкретния проблем беше с парсването на датата на 13 задача, което според това не би трябвало да е проблем, а освен това в конкретната задача мен не ме интересува, как точно ще ми парсне датата при положение, че ползвам само стойността на месеца...

Благодаря предварително за всякакви разяснения по темата...

1
Kamigawa avatar Kamigawa 750 Точки

Тази тема може да е от помощ - https://softuni.bg/forum/4192/0/10/Exam-Problems-KPK-Primeren-izpit-Travel-Agency#answer-16216 , не съм го пробвал, но на PHP джъджа искаше да му се даде date_default_timezone_set('UTC'); преди да се ползват дати, предполагам и тук е нещо подобно. Аз лично си написах един регекс и си взех само месеците, които ги ползвах като числа - не съм парсвал към дейттайм класа да го ползвам него.

1
rulzzzbg avatar rulzzzbg 1 Точки

И аз имах проблеми с парсването на датата.Проблема дойде от това че формата на датата от задачата е различен от формата датата на моят компютър.Когато искаш да парснеш дата то взима твойте настойки и ги сравнява и ако са различават гърми(поне в повечето случаи).За да го избегна това му казах изрично как да форматира датата Snippet

DateTime.ParseExact(input[0], "dd/MM/yyyy", null); input[0] е входящата дата.

 

0
11/05/2015 20:25:44
pataroka avatar pataroka 319 Точки

Абе не е баш така. Ако погледнеш линка, който съм дал и по-горе http://www.dotnetperls.com/datetime-parse, ще видиш, че всички дадени примери се компилират и работят без смяна на културата, за автора на статията, който предполагам е с американски настройки, след като месеца му излиза най-отпред. Аз съм с локални настройки за България и всички дадени примери без предпоследния, при мен работят безпроблемно и дават следния изход:

bg-BG InvariantCulture en-US en-GB
1.1.2000 г. 00:00:00 ч.
27.2.2009 г. 05:11:21 ч.
26.2.2009 г. 18:37:58 ч.
26.2.2009 г. 00:00:00 ч.
26.2.2009 г. 00:00:00 ч.
10.2.2002 г. 00:00:00 ч.
Грешка
12.5.2015 г. 20:04:00 ч.
01/01/2000 00:00:00
02/27/2009 05:11:21
02/26/2009 18:37:58
02/26/2009 00:00:00
02/26/2009 00:00:00
02/10/2002 00:00:00
02/21/2009 22:35:00
05/12/2015 20:04:00

 

1/1/2000 12:00:00 AM
2/27/2009 5:11:21 AM
2/26/2009 6:37:58 PM
2/26/2009 12:00:00 AM
2/26/2009 12:00:00 AM
2/10/2002 12:00:00 AM
2/21/2009 10:35:00 PM
5/12/2015 8:04:00 PM

 

01/01/2000 00:00:00
27/02/2009 05:11:21
26/02/2009 18:37:58
26/02/2009 00:00:00
26/02/2009 00:00:00
10/02/2002 00:00:00
Грешка
12/05/2015 20:04:00

В Джъджа задача 13 работи с bg-BG и en-GB. Това разбира се, ако се решава с Datetime.Parse. С Invariant и en-US гърми съвсем естествено още на нулевите тестове. Гледайки дадените примери, е доста интересно защо форматът с тирета не е проблемен, както и първия пример, в който не е ясно кое е месец, кое ден, обаче пример 7 гърми...

0
Innos avatar Innos 419 Точки

Айде и аз на камарата колеги домашно , междудругото @DHristoskov найстина ми хареса решението ти на Collect the Coins, просто как си накарал и Exceptionite да работят за тебе :) .

7
KatyaMarincheva avatar KatyaMarincheva 572 Точки

WOW!!!!!!!

Решенията ти са направо учебник по Advanced C# :)

-1
milen.stefanov avatar milen.stefanov 40 Точки

Ето домашното и от мен :)

Между другото да вметна, че на Collect the coins не е необходим назъбен масив, а нормален масив от стрингове и при V и ^ ходиш по масива, а при < и > ходиш по символите на дадения стринг, нз дали някой вече не е обърнал внимание, това доста улсенява цялата програма. :)

2
12/05/2015 00:32:32
Inspix avatar Inspix 51 Точки

Май ще остана последен, но и аз да се включа в споделянето на решения :)

 

AdvCSharp-MultidimensionalArrays-Sets-Dictionaries

Добавени промени на база на съвета на Фил.

 

Всякакви забележки и препоръки са добре дошли.

1
12/05/2015 12:28:39
Filkolev avatar Filkolev 4482 Точки

За 13-та задача е малко излишно да правиш клас за хората, на теб реално ти трябва просто една колекция, която да пази данните. Ако класа го ползваш само за това се явява малко безсмислен. Не е особено правилен и начинът по който е направен конструктора. Т.е. пробвай да преработиш решението без класове, би трябвало да е и по-кратко.

Всъщност не е само на 13-та задача. Ако ти е интересно ООП-то изгледай някои от лекциите ако имаш време. Но като цяло правиш някои неща, които не са съвсем правилни, с цел да проработят както на теб ти е удобно да ги ползваш.

1
12/05/2015 04:28:17
Inspix avatar Inspix 51 Точки

Благодаря , ще си взема забележка :)

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