Loading...
npaunov avatar npaunov 51 Точки

[Homework] Functional Programming Problems всички задачи *

Здравейте,
Това е моето домашно:

01.Class Student

02.Students by Group

03.StudentsFirstAndLastName

04.Students by Age

05.Sort Students

06.FilterStudentsbyEmailDomain

07.Filter Students by Phone

08.Excellent Students

09.Weak Students   външен клас: ExtentionClass

10.Students Enrolled in 2014

11.Students by Groups

Имам няколко въпроса, защото това не е най доброто, което би могло да е :)
1. В домашното има даден фаил Students-data.txt, който обаче не съдържа всички изисквани от домашното колони. Вместо него създадох лист, както е по описание в първа задача :
"Create a List<Student> with sample students. These students will be used for the next few tasks." Този файл по погрешка ли е качен или ние трябва да го използваме по някакъв начин?

2. Възможно ли е класа Student, така да се направи че да се използва в целия Solution?
Аз го копирах във всяка задача.

3. Не успях да намеря удачен метод, така че листа със студентите да го сложа в класа Student и всеки път, когато му се викат функционалностите, да се вика и  листа със студентите. Възможно ли е да се направи това или и той трябва да е в друг клас?
 

 

7
C# Advanced 26/05/2015 20:28:49
Filkolev avatar Filkolev 4482 Точки
Best Answer

1. Текстовият файл е за задачата със звезда, там евентуално може да се напише нов клас Student, който да има въпросните пропъртита. За останалите задачи е достатъчно това, което е описано в първа задача.

2. Да, има начин. Правиш класа Student в единия проект и след това на всеки проект, в който искаш да го ползваш, трябва да му добавиш референция към него. С десен бутон върху проекта, Add Reference, търсиш в solution и намираш проекта, в който е Student класа; отгоре една using директива и готово. Подобно е на вкарването на референция към System.Numerics, когато искаш да ползваш BigInteger например.

Отделно, за тези задачи, които реално представляват отделни заявки, не е нужно да правиш отделни проекти. Аз поне, както и повечето ми колеги, когато правихме задачата, слагахме всичко в един проект. Така си ползвахме класа Student и един списък за всички задачи, освен за последните. Не смятам, че е особен проблем, при положение, че една заявка е 2-3 реда (ако се пише разбито според принципите на КПК), както и един форийч след нея, който също е 3-4 реда.

3. Клас Student да съдържа списък от студенти не е логично от ООП гледна точка. Просто го отбелязвам; решението е, както писах в предния параграф, да си напишеш заявките в един проект, а не за всяка задача нов проект.

7
npaunov avatar npaunov 51 Точки

Благодаря за изчерпателното инфо! Това домашно май ще го напиша втори път :)

0
peterborisov avatar peterborisov 123 Точки

И аз като Николай направих всяка задача отделно и копирах отделно student.cs файла ,защото не можах да намеря начин как да го ползвам за всички задачи до 10-та :) Започвам домашното наново.

0
n1p3ha avatar n1p3ha 20 Точки

Аз използвам файла, който е даден;

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

Все пак някога когато имам време ще ги направя доста по-добре;

https://github.com/ivayloivanof/softuni.homework.FundamentalLevel/tree/master/AdvancedCSharp/06.FunctionalPrograming

3
24/05/2015 14:39:07
malkstor avatar malkstor 348 Точки

Това което аз направих е да направя задачите от 1 до 12 като методи, а когато трябва да се прави class, го добавях към проекта като отделен cs файл. Има едни +/- бутончета за скриване и показване на кода и така когато всички методи са скрити, се виждат само заглавията. В Main метода ги има всичките коментирани, така че може да се разкоментират произволни по избор.

4
npaunov avatar npaunov 51 Точки

Да в отделни методи е доста по-прегледно.

0
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Да добавя и аз решение на Problem 12* Students Joined to Specialties, направено с join LINQ operator.

Получи се сравнително спретнато.

ТУК

p.s. Можем да сменим заглавието на [Homework] Functional Programming само, за да не отваряме нова тема за другите решения

3
npaunov avatar npaunov 51 Точки

Галя, супер е решението, LINQ вече съвсем ми заприлича на SQL :), не знаех че и join има!

Смених темата вече на 12, защото толкова задачи има решени, ако се появят следващи решения, пак ще го сменя:)

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

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

ето и от мен един вариант на домашно - поне началото:

01. Class-Student - тук си създавам class Student и една база данни със студенти - и още се чудя дали това което съм направила в класа StudentsDirectory е оптимално - тук имам метод създаващ списък от студенти, и вместо да пълня този списък за всеки проект поотелно - във всеки следващ проект създавам нов обект от класа StudentsDirectory database = new StudentsDirectory(); и ползвам списъка със студенти от първия проект във всеки следващ, достъпвам го така:

database.Students

02. Students-By-Group - клас Student, списъка database.Students - ги ползвам тук и във всеки следващ проект с референция към първия проект, тук пиша само LINQ query, и метод за печатане на query, което е групирано по group number PrintStudentInfoByGroup<T>(IEnumerable<IGrouping<T, Student>> studentsQuery), по-късно в 11-та задача извиквам същия метод оттук и го ползвам за отяечатване на групи по group name.

03. Students-By-First-And-Last-Name - тук създавам и PrintStudentsInfo(IEnumerable<Student> studentsQuery) метод, който използвам за печатане навсякъде където се печата пълната информация за всеки студент.

04. Students-By-Age

05. Sort-Students - с ламбда и LINQ query

06. Filter-Students-By-Email-Domain

07. Filter-Students-By-Phone

08. Excellent-Students

09. Weak-Students

10. Students-Enrolled-In-2014 - с regex

11. Students-By-Groups (name) - създавам нов клас наследяващ class Student, и подавам class Student като инпут за създаване на новите обекти, чрез конструктор:

public StudentWithGroup(Student student)
: base(student.FirstName, student.LastName, student.Age, student.FacultyNumber, student.Phone, student.Email, student.Marks, student.GroupNumber)
{
}

Исках да питам за това условие: Use the "group by into" LINQ operator. - ако няма подреждане това group student by student.GroupName е достатъчно, не ми се налага да ползвам into, ползвах го но за да подредя по азбучен ред групите, което не се изисква? Какво се има предвид с това условие?

12. Students-Joined-To-Specialties

13.LINQToExcel

14. Text-Gravity

15. Uppercase-Words

16. Little-John

17. Office-Stuff

2
22/06/2015 13:59:02
Filkolev avatar Filkolev 4482 Точки

След като не се изисква манипулиране на групите след групирането, into не е нужно, заявката може да приключи с групирането и след това да се изпълни с foreach.

1
EBojilova avatar EBojilova 330 Точки

Доста бързо се справих с домашното благодарение на npaunov и GalyaGeorgieva .

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

LINQ-Queries

LINQExtensionMethods- честно казано по-ми допада(на 12 особенно стана уникален:))

Всички задачи от 01 до 12 съм направила в един Solution, два допълнителни класа, с различни заявки и печатам с метод.

Всякакви коментари са добре дошли :)

https://github.com/EBojilova/07.Homwork-Functional-Programming/blob/master/01.Class%20Student/Problems1to12.cs

Имената на студентите не можах да се моря да ги мисля, и са на колеги от форума- може някой да се познае :)

13 оставям за след изпита, че съм решила само 2-3 изпитни задачи :)

4
25/05/2015 20:25:14
npaunov avatar npaunov 51 Точки

То стана обичай това домашно да се пише по 2 пъти :))), но при теб е най - добрия вариант, защото си го направила и по двата възможни начина!
var jonedDataLinqExtMtd  => кърти мивки! Не знаех, че Lambda, може да прави такива неща!

Хмм задача 9 можеш да се заиграеш и да си направиш "extension method", заради условието:)

1
pataroka avatar pataroka 319 Точки

Това са моите решения на задачите до 13-та включително. 07.Advanced-CSharp-Functional-Programming-Homework

Първите 12 са в един проект. Даже в един клас - като отделни методи.

До утре вечер вероятно ще кача и 4-те изпитни на същото място. 

Противно на очакванията на 13-та не се мотах много с правенето на ексела - разгледах дадените предложения за библиотеки, разгледах и разни други и си харесах ClosedXML. Хареса ми, щот си е обектно ориентирана и има доста пълна документация с примери - нещо, което на повечето други библиотеки им липсва.

Проблемът, дойде, като почнах да попълвам ексела и половин ден се мотах да намеря начин да печатам всички пропъртита на обекта с едно движение frown - явно съм мноо глупав. Пробвах с нещо си наречено ObjectDumper, ама тоя пакет се оказа някво много прехвалено и велико творение, което, обаче никой и никъде не може да обясни като хората как работи - гледам аз разни хора пишат някакъв код аз пробвам да преписвам поне да видя за кво иде реч и ришарпъра вика : Ааааа, тоя клас такива работи не мое да праи.

Накрая стигнах до великата идея да ползвам това: TypeDescriptor Class и всичко си дойде на мястото и напълних екселчето с точно 484 ентрита с точно два форийча. 

Ако някой, обаче знае някаква друга методология за извличане на пропъртита на обекти - моля да сподели. 

Благодаря предварително!

3
26/05/2015 01:48:24
Filkolev avatar Filkolev 4482 Точки

Форийчването на пропъртита на някакъв клас не е толкова просто, както форийчването на някаква колекция. За целта се ползва Reflection, което, накратко казано, е бъркане в червата на асемблито, за да си каже какво има вътре.

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

1
pataroka avatar pataroka 319 Точки

Така де, ама няколко стотин милиона програмисти по света пишат рипорти и логове. Най-малкото с цел дебъгване е добре да има нещо дето да си вре гагата там. ObjectDumper-а е ок като идея - поне като видях какво изкарва, но могат поне да се пробват да го документират. В msdn има едно кратко ентри за него, в което пише колко велик туул е и откъде да си дръпнеш семпли за него и като отидеш да ги дърпаш - няма никой...

П.П. А като говорим за скорост - цялото упражнение със създаването на обект е безмислено, тъй като текстов файл идентиран с табове може спокойно да се импортне в (ек)селска таблица. Оттам нататък могат да се ползват функциите на конкретната библиотека за сортиране на данните, вместо да се създава отделен обект за всеки ред, после колекция в която да се пазят обектите и прочее. Ама айде - нали трябва да се упражнаваме... angel

П.П.П Освен това, се оказа, че тая библиотека дет съм ползвал си има функция да тъпче обекти от колекция в ексела с точно един ред код, ама кой да гледаsurprise Единственото, което трябва да се има предвид е, че най-отпред изкарва стойността, по която е сортирана заявката.

Редактирал съм решението, закоментирал съм варианта с TypeDescriptor-а, ако на някой му е интересно...

3
26/05/2015 15:00:47
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Решение на Problem 15. Uppercase Words
няма нещо екзотично, което да съм използвала. Всичко е с наличните знанияsmiley
Работи си със 100 т.
кодът на Uppercase Words

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

0
npaunov avatar npaunov 51 Точки

Готово smiley

0
pataroka avatar pataroka 319 Точки

На 14-та задача ако използваме SecurityElement.Escape() метода, както е посочено в условието - джъджа ни реже главата до кръста. Това май има смисъл да се ползва само ако експортваме в .xml.

Иначе, ето го моето решение 14.TextGravity добутах до 87 точки - гърми ми на последния тест. Ако някое набито око види къде бъркам, моля да сподели. Благодаря предварително!

1
26/05/2015 10:56:46
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Пламене,

решението ти дава 100 точки в judge ако му прибавиш SecurityElement.Escape, на 36-ти ред ти смених sb.Append(matrix[row, col]);  със

sb.Append(SecurityElement.Escape(matrix[row, col].ToString())); и даде 100 точки.

Да използвам случая да ти благодаря за 13-та задача - направо ми спести изчитането на тон учебници, а и на интервю за работа вчера ме питаха точно за такова създаване на Excel file - огромно благодаря :)

 

1
26/05/2015 15:13:32
Filkolev avatar Filkolev 4482 Точки

Последният тест гърми именно заради ескейпването. Методът трябва да се приложи върху данните между <td> таговете, ако и самите тагове си ескейпнал нормално джъджа ще те ореже здраво.

Т.е. джъдж очаква да види нещо такова примерно: "<td>&gt;</td>", в момента програмата ти вади това: "<td>></td>", а ако си ескейпвал всичко, както подозирам, си вадил това: "&lt;td&gt;&gt;&lt;/td&gt;"

0
pataroka avatar pataroka 319 Точки

Благодаря!... и... Благодаря! Сега ми стана ясно... май...

@npaunov 200 точки ли трябва да изкараме на джъджа, за да си редактираш заглавието или Галя трябва да те помоли персонално blush

0
26/05/2015 15:04:29
pataroka avatar pataroka 319 Точки

Пускам 15-та, 16-та и 17-та задача.

17.OfficeStuff - тая въобще не искам да я коментирам - ако може 4 таквизи задачки на изпита и да плеснем с ръце и да се прегърнем.

15.UppercaseWords - алтернатива на решението на Галя, с един безкрайно дълъг екземпляр от любимите на всички ни регекси.

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

"Note that the body of each arrow will always be 5 dashes long. The difference between the arrows is in their tip and tail. The given 3 types are the only ones you should count, the rest should be ignored (Robin Hood does not like them)"

Това, написано по този начин означава, че  това  >>>>----->>> е стрела, която на Робин Худ не му харесва и трябва да бъде игнорирана, а не че трябва да и резнем част от опашката и част от острието, за да я оформим според предпочитанията му. Това е много подвеждащо и ако този, който е писал условието го е мързяло да доуточни, трябваше поне да бъде показано в примерния вход. Ей такива глупости губят по 30-40 минути на изпит и после излизат коментари от сорта - "Ми има хора дет се сетиха." Разбирам да има уловки в чисто технически аспект, като това, че си превъртял някой int щот не си се сетил да декларираш променлива, която ще побере резултата, ама това тук си е чиста проба игра на криеница и единственото, което демонстрира е некомпетентността на автора да напише условие на задача, което следва елементарна логическа нишка. 

0
26/05/2015 23:20:58
Filkolev avatar Filkolev 4482 Точки

Не съм я писал аз задачата, че да се засягам :) Но мисля, че не е чак толкова подвеждащо.

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