Софтуерно Инженерство
Loading...
+ Нов въпрос
Filkolev avatar Filkolev 4428 Точки

Задачите вече може да се тестват и на C#.

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

1
Peter.Tonev avatar Peter.Tonev 2 Точки

Здравейте,

Понеже не успях да се ориентирам как да задам отделен въпрос по тази тема... и питам тук..

Въпроса ми е относно задача 6-та - Extract Hyperlinks. Използвам следният regex: (?:<[aA][^<>]*\s+href\s*=\s*([\w:;\/.\(\)\?\&#]+(?:'[^']*'|"[^"]*")*[\w:\/.\(\)\;?\&]+))*(?:<[aA][^<>]*\s+href\s*=\s*"([^"]*)")*(?:<[aA][^<>]*\s+href\s*=\s*'([^']*)')*

В сайта за тестване мачва безпроблемно всички примери, но в програмата не работи (ескейпнах кавичките, но въпреки това не работи..)

Дали може да споделите от къде може да е проблема?

0
Filkolev avatar Filkolev 4428 Точки

В какъв смисъл не работи?

0
Peter.Tonev avatar Peter.Tonev 2 Точки

Ами не ми дава верен резултат при теста в judge :)

0
EBojilova avatar EBojilova 330 Точки

Поствам решенията от домашното. https://github.com/EBojilova/04.RegularExpressions

Да си призная, честно това ми е най-трудното домашно до момента :)

Шеста я тормозих цял ден до 33 точки и накрая в екип с Катя Маринчева я докарахме до 100. Но на изпита абсурд да реша такава задача.

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

15
16/05/2015 22:39:01
Filkolev avatar Filkolev 4428 Точки

За успокоение - чак такива извращения нямаме намерение да даваме на изпита ви. Нещо доста по-просто ще е.

Но за да разберете нещата трябва да се мъчите с по-трудни задачи (които умишлено ви даваме) и е силно препоръчително да си помагате и да питате на място или във форума. Това, че си решила задачата с помощ е супер; не е важно дали сама си я преборила, а дали в процеса си научила по-добре как работят регулярните изрази. Ако да - задачата е изпълнила целта си поне за теб.

5
KatyaMarincheva avatar KatyaMarincheva 572 Точки

А сега истината, Ели реши сама задачата, аз махнах един спейс, и смених една двойна кавичка с единична в regex-a, и решението даде 83 точки, накрая Ели написа едно заклинание на клинописно писмо (днес смятам да разшифровам какво точно е написала ;) ) и judge даде 100 точки.

Екипно, Ели 99 judge точки плюс Катя 1 judge точка. Браво на Ели :)

А относно точките във форума - това вече се превърна в пълен цирк - всеки който успее да си реши задачите получава комплект минуси :) Някой е минал и е минус-нал Ели систематично (аз бях дала точки, та знам къде Бяха, а сега където бяха, и в този пост включително, има нулички :)

Още един също толкова цирков пример:D.Kostadinov (Точки: 5) 14/05/2015 02:52:00

https://softuni.bg/forum/4197/Homework-Advanced-CSharp-Strings-and-Text-Processing

Добромир е постнал невероятно хубаво домашно, аз съм писала просто за да изкажа възхищението си, радвам се че познавам толкова умен човек  - той има 1 точка за задачите, аз 5 за коментара - поредната шега, показваща че точки и ценност на поста вече ще бъдат две диаметрално противоположни понятия :)

 Вече минус във форума официално ще го считаме за "потвърдено вярна, полезна и навременно предоставена информация" :))))))

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

8
16/05/2015 08:26:16
EBojilova avatar EBojilova 330 Точки

Ми точно твойте "мънички" поправки ме изкараха от while(true)  и дадоха break на лутането ми :))) A за да ги направиш, си разбирш регексите.

Отностно точките, нямаше и да забележа. На ниво 0 не съм писала, тъй като имаше много стари теми за домашните, от които аз се учих и знам, че ми бяха много полезни. Тъй като сме по нова програма и ние сме пионерите, е много полезно за доста хора, да публикуваме, тъй че ако можем и имаме сили действаме :) Ако изостана назад(работя все пак) ще гледам от вас, така че не спирайте да публикувате теми.

1
16/05/2015 22:35:56
aanguelov avatar aanguelov 219 Точки

Четвърта и пета задачи от мен:

04.SentenceExtractor - https://gist.github.com/aanguelov/46fcb4ca787e8653cbc7

05.ValidUsernames - https://gist.github.com/aanguelov/ab9c1d4c00da9130a686 - тук judge ми дава 80/100, но снощи до късно я писах и не можах да я оправя.

Тук слагам линк към темата за екстрактване на имейли за да я видят повече хора, щото ми изтекоха очите по тамошния патерн и така и не стигнах до напълно работещо решение - https://softuni.bg/forum/4227/Homework-CSharp-Advanced-Regular-Expressions-Problem-3-Extract-Emails

 

2
16/05/2015 10:27:44
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Алекс,

Първо, решението ти на 5-та задача Valid Usernames е мнооого умно направено!

Конкретно, някои judge тестове ти гърмяха заради regex-a: [\w{3,25}]+.

/w - хваща само един символ от вида a-zA-Z0-9_

{3,25} - би трябвало да match-не 3-25 символи от горните видове, но то търси друго, иска да match-не точно същия символ, с който започва username-а 3-25 пъти, а не който и да е от тези a-zA-Z0-9_, и [\w{3,25}] match-ва отново единичен символ (освен ако не напишем само еднакви символи "аааааааа"), тъй че в случая не работи.

[\w{3,25}]+. а това вече match-ва докато има символи от вида a-zA-Z0-9_, от 0 до безкрайност, и така match-ва например "двадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипет" цялото, а не би трябвало, защото е над 25 символа дълго.

Аз промених regex-a ти на това: \w{3,25}

Този подход е слабоефективен - разликата е, че \w ще провери дали символът е от вида a-zA-Z0-9_, а после {3,25} проверява дали има общо 3 до 25 броя последователни символи от който и да било от вида a-zA-Z0-9_

Недостатък, от този username: "двадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипетдвадесетипет" си реже първите 25 знака и изобщо не отчита че общата дължина е по-голяма.

После погледнах какво Ели е използвала за regex, и оттам добавих \b в началото и в края на regex-a. Получи се \b\w{3,25}\b, което е нещо средно между твоя regex и този на Ели, и дава 100 точки в judge.

 

 

1
16/05/2015 15:49:20
aanguelov avatar aanguelov 219 Точки

Катя, много благодаря за подробното обяснение, сега сядам да я оправя.

1
nstanevski avatar nstanevski 37 Точки

Здравейте,

в задача №8, "Use Your Chains, Buddy" вторият тест е по-дълъг от стандартната дължина на конзолния ред и се отрязва. Моето решение на проблема: в началото на Main() поставих:

Console.SetIn(new StreamReader(Console.OpenStandardInput(8192)));

което изисква и добавянето на namespace System.IO в началото на файла:

using System.IO;

А ето и моите решения. Джъджа ми дава 88/100 на зад. 8 (Use Your Chains), другите са 100.

Надявам се да съм бил полезен.

 

4
16/05/2015 22:36:10
pataroka avatar pataroka 319 Точки

В джъджа тоя проблем го няма... Така, че задачата изкарва 100 точки и без тая добавка...

2
EBojilova avatar EBojilova 330 Точки

Благодаря, че сподели. Бях забравила, че има такъв проблем.

08. https://github.com/EBojilova/04.RegularExpressions/blob/master/08.UseYourChainsBuddy/UseYourChainsBuddy.cs

1
cap7ainjack avatar cap7ainjack 20 Точки

Е не, от 2 дни се чудя защо тази задача на върви... 

То каква била работата.

 

Благодря! Нямах предсвата за това

0
pataroka avatar pataroka 319 Точки

Ами ето ги всички решения: 04.Advanced-CSharp-Regular-Expressions-Homework

На четвърта крадох от Ели. На седма се мотах половин ден додет разбера, че регекса ми не работи заради едни скоби. След нея, осма и девета ми се сториха като детска игра... Макар решението ми на девета да е доста хамалско...

Не ща да виждам регекси поне до изпита... А ако може и половин година след това...

До такава степен изперках, че преди час търсих къде се е скрила дъщеря ми, докато жена ми не дойде да ми напомни, че от обяд детето е при баба си.

П.П. Мисля, да пропусна бонус точките от проверка на това домашно laugh

3
16/05/2015 23:53:15
EBojilova avatar EBojilova 330 Точки

И аз я преборих. Доста по-лесна от предишната. Решенията са ни почти еднакви :)

https://github.com/EBojilova/04.RegularExpressions/blob/master/07.QueryMess/QueryMess.cs

1
pataroka avatar pataroka 319 Точки

Много ме кефят твоите решения с MatchCollection класа. Аз така и не се научих да го ползвам и си рендосвам с единичния...

1
EBojilova avatar EBojilova 330 Точки

Как ги правиш да изглеждата цветни тези патерни, имаш всички цветове-оранжево, зелено, т.н. а моите са само бордо.

Гледах, чудих се и не разбрах кви ги вършиш :)))

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

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

От мен първо една малко по-особена втора задача Replace <a> Tag  - по втората опция от условието на задачата (с извикване на инпута от файл) - извиквам source-а на страницата на форума на СофтУни (записала съм част от него в .txt файл), и после правя замените на <a href... с [URL...., и промененият source записвам в нов txt файл, който после извиквам за да го печатам на конзолата. На този линк може да се види кода, а от този линк може да се свали zip folder съдържащ и този проект - за да се тества програмата с input file-a.

Идеята е, че файлът който се извиква, трябва да е на компютъра на този който тества програмата, в папката с ,cs файла на самия проект - за тестване може да се създаде и друг txt файл, който да save-не в съответната папка.

Ели ми помогна с regex-a  защото този който аз бях съставила първоначално match-ваше идеално на regex101.com, но във Visual Studio даваше 0 matches....

Edit: И още едно по-собено решение - на Problem 3 - Extract Emails - понеже в примерите от задачата output-а е даден в italic - програмата ми създава html файл с резултатите и после го извиква за да се изпишат резултатите в italic.

И Problem 4 - Sentence-Extractor

0
22/06/2015 14:15:38
Innos avatar Innos SoftUni Team 419 Точки

Аз имам следния въпрос, понеже 6та задача я въртях и суках по всякакви възможни начини и не можах да измисля 1 регекс който сам да задоволява условието. Има ли задачата решение в което не се ровим в групите на Match-а, иначе казано съществува ли рекегс които да върне като match-ове единствено и само търсените отговори и да е валиден за всички тестове.

1
pataroka avatar pataroka 319 Точки

Ами вероятно да... Моят е дълъг около 60 символа, но го докарах дотам освен резултата, да ми вкарва и празни ентрита в групите, което ме задоволи напълно... Предполагам, че с малко повече играчка, може и да се стигне до нещо смислено...

1
Innos avatar Innos SoftUni Team 419 Точки

Празните групи са от OR-а защото само 1 от групите ще върне стойност другите ще останат празни. Имах идея да пробвам със backreference за да избегна OR-овете, но просто има резултати който правят този вариант невъзможен.

1
17/05/2015 02:52:37
Filkolev avatar Filkolev 4428 Точки

Може да ползваш група, която да обхваща трите условия и след това да тримнеш ако има кавички, но като цяло магически регекс няма. Не винаги всичко може да се направи с регекс.

0
LoKSET avatar LoKSET 160 Точки

Само да спомена нещо, което ми коства известно време, докато разбера. Повечето може и вече да са се усетили, но все пак...

Когато foreach-вам MatchCollection учудващо не ми излизаха правилните properties на елемента на който съм. Конкретно Groups пропъртито. Ами понеже съм мързелив винаги оставям var във foreach-a, а не правилният тип. Почти винаги това работи ок, но не и при Match класа - тогава var автоматично се разпознава като object и нормално липсват доста неща, които може да се очаква да са там.

1
17/05/2015 16:34:06
enevlogiev avatar enevlogiev 1169 Точки

Прав си, аз също го знам от вчера : ) Напоследък преоткривам C#. Ще споделя какво прочетох в интернет. Ако държиш да използваш var във foreach:

foreach (var match in matches.Cast<Match>())

ще работи окей. Според мен Match match in matches е по-четимо в случая.

0
LoKSET avatar LoKSET 160 Точки

Изобщо не държа, даже мисля и при всички други типове да понамаля ползването на var, че не се знае кога това може да ми изяде главата при някоя задача и да не се сетя навреме.

0
enevlogiev avatar enevlogiev 1169 Точки

Както ти е удобно. Така и така през целия Front End модул само var ще използвате 6 месеца. Радвай се на експлицитните типове, докато можеш : ) Когато променливите са именувани правилно, няма шанс от объркване.

Пробвай се да познаеш типа на следващите  ->

var firstName;
var age;
var isClickable;

0