[Homework]:C# Advanced- Regular Expressions
05.Valid Usernames
08.Use Your Chains, Buddy
Не са отворени за тестване на C#.
05.Valid Usernames
08.Use Your Chains, Buddy
Не са отворени за тестване на C#.
Задачите вече може да се тестват и на C#.
Използвайте темата за обсъждане на домашното от лекцията. Не е проблем за някои задачи да има отделни теми. Но така и така името на темата предполага - нека тук да стават дискусиите по него като цяло.
Поствам решенията от домашното. https://github.com/EBojilova/04.RegularExpressions
Да си призная, честно това ми е най-трудното домашно до момента :)
Шеста я тормозих цял ден до 33 точки и накрая в екип с Катя Маринчева я докарахме до 100. Но на изпита абсурд да реша такава задача.
Всякакви коментари са добре дошли.
За успокоение - чак такива извращения нямаме намерение да даваме на изпита ви. Нещо доста по-просто ще е.
Но за да разберете нещата трябва да се мъчите с по-трудни задачи (които умишлено ви даваме) и е силно препоръчително да си помагате и да питате на място или във форума. Това, че си решила задачата с помощ е супер; не е важно дали сама си я преборила, а дали в процеса си научила по-добре как работят регулярните изрази. Ако да - задачата е изпълнила целта си поне за теб.
А сега истината, Ели реши сама задачата, аз махнах един спейс, и смених една двойна кавичка с единична в 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 за коментара - поредната шега, показваща че точки и ценност на поста вече ще бъдат две диаметрално противоположни понятия :)
Вече минус във форума официално ще го считаме за "потвърдено вярна, полезна и навременно предоставена информация" :))))))
Колеги, предлагам да си говорим за код, за собствено удоволствие, и .....Ангел Георгиев се оказа прав - реално на точки от форума няма смисъл да се разчита - за момента зависят от .........
Ми точно твойте "мънички" поправки ме изкараха от while(true) и дадоха break на лутането ми :))) A за да ги направиш, си разбирш регексите.
Отностно точките, нямаше и да забележа. На ниво 0 не съм писала, тъй като имаше много стари теми за домашните, от които аз се учих и знам, че ми бяха много полезни. Тъй като сме по нова програма и ние сме пионерите, е много полезно за доста хора, да публикуваме, тъй че ако можем и имаме сили действаме :) Ако изостана назад(работя все пак) ще гледам от вас, така че не спирайте да публикувате теми.
Здравейте, за тези, които още не са си написали домашното, тук ще откриете доста инфо за регулярните изрази - http://www.devbg.org/dotnetbook/Nakov-Programming-.NET-Framework-Book-Volume-1-ver-1.03.html#_Toc116671746
Четвърта и пета задачи от мен:
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
Здравей Алекс,
Първо, решението ти на 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.
Катя, много благодаря за подробното обяснение, сега сядам да я оправя.
Здравейте,
в задача №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.
Надявам се да съм бил полезен.
В джъджа тоя проблем го няма... Така, че задачата изкарва 100 точки и без тая добавка...
Благодаря, че сподели. Бях забравила, че има такъв проблем.
08. https://github.com/EBojilova/04.RegularExpressions/blob/master/08.UseYourChainsBuddy/UseYourChainsBuddy.cs
Е не, от 2 дни се чудя защо тази задача на върви...
То каква била работата.
Благодря! Нямах предсвата за това
Ами ето ги всички решения: 04.Advanced-CSharp-Regular-Expressions-Homework
На четвърта крадох от Ели. На седма се мотах половин ден додет разбера, че регекса ми не работи заради едни скоби. След нея, осма и девета ми се сториха като детска игра... Макар решението ми на девета да е доста хамалско...
Не ща да виждам регекси поне до изпита... А ако може и половин година след това...
До такава степен изперках, че преди час търсих къде се е скрила дъщеря ми, докато жена ми не дойде да ми напомни, че от обяд детето е при баба си.
П.П. Мисля, да пропусна бонус точките от проверка на това домашно
И аз я преборих. Доста по-лесна от предишната. Решенията са ни почти еднакви :)
https://github.com/EBojilova/04.RegularExpressions/blob/master/07.QueryMess/QueryMess.cs
Много ме кефят твоите решения с MatchCollection класа. Аз така и не се научих да го ползвам и си рендосвам с единичния...
Как ги правиш да изглеждата цветни тези патерни, имаш всички цветове-оранжево, зелено, т.н. а моите са само бордо.
Гледах, чудих се и не разбрах кви ги вършиш :)))
Здравейте колеги,
От мен първо една малко по-особена втора задача 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.
Аз имам следния въпрос, понеже 6та задача я въртях и суках по всякакви възможни начини и не можах да измисля 1 регекс който сам да задоволява условието. Има ли задачата решение в което не се ровим в групите на Match-а, иначе казано съществува ли рекегс които да върне като match-ове единствено и само търсените отговори и да е валиден за всички тестове.
Ами вероятно да... Моят е дълъг около 60 символа, но го докарах дотам освен резултата, да ми вкарва и празни ентрита в групите, което ме задоволи напълно... Предполагам, че с малко повече играчка, може и да се стигне до нещо смислено...
Празните групи са от OR-а защото само 1 от групите ще върне стойност другите ще останат празни. Имах идея да пробвам със backreference за да избегна OR-овете, но просто има резултати който правят този вариант невъзможен.
Може да ползваш група, която да обхваща трите условия и след това да тримнеш ако има кавички, но като цяло магически регекс няма. Не винаги всичко може да се направи с регекс.
Здравейте колеги, тук си качвам и аз домашните - https://github.com/PPBaev/CAdvanced.
Само да спомена нещо, което ми коства известно време, докато разбера. Повечето може и вече да са се усетили, но все пак...
Когато foreach-вам MatchCollection учудващо не ми излизаха правилните properties на елемента на който съм. Конкретно Groups пропъртито. Ами понеже съм мързелив винаги оставям var във foreach-a, а не правилният тип. Почти винаги това работи ок, но не и при Match класа - тогава var автоматично се разпознава като object и нормално липсват доста неща, които може да се очаква да са там.
Прав си, аз също го знам от вчера : ) Напоследък преоткривам C#. Ще споделя какво прочетох в интернет. Ако държиш да използваш var във foreach:
foreach (var match in matches.Cast<Match>())
ще работи окей. Според мен Match match in matches е по-четимо в случая.
Изобщо не държа, даже мисля и при всички други типове да понамаля ползването на var, че не се знае кога това може да ми изяде главата при някоя задача и да не се сетя навреме.
Както ти е удобно. Така и така през целия Front End модул само var ще използвате 6 месеца. Радвай се на експлицитните типове, докато можеш : ) Когато променливите са именувани правилно, няма шанс от объркване.
Пробвай се да познаеш типа на следващите ->
var firstName;
var age;
var isClickable;
Здравейте,
Понеже не успях да се ориентирам как да задам отделен въпрос по тази тема... и питам тук..
Въпроса ми е относно задача 6-та - Extract Hyperlinks. Използвам следният regex: (?:<[aA][^<>]*\s+href\s*=\s*([\w:;\/.\(\)\?\&#]+(?:'[^']*'|"[^"]*")*[\w:\/.\(\)\;?\&]+))*(?:<[aA][^<>]*\s+href\s*=\s*"([^"]*)")*(?:<[aA][^<>]*\s+href\s*=\s*'([^']*)')*
В сайта за тестване мачва безпроблемно всички примери, но в програмата не работи (ескейпнах кавичките, но въпреки това не работи..)
Дали може да споделите от къде може да е проблема?
В какъв смисъл не работи?
Ами не ми дава верен резултат при теста в judge :)