Loading...
evgenikolov avatar evgenikolov 304 Точки

[Programming Fundamentals] String, Dicts, LINQ - проблеми

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

В contest-a Strings, Dictionaries, Lambda and LINQ - Lab последната задача: Population Aggregation липсва в условията и реално не може да се реши без условие.

В contest-a Strings, Dictionaries, Lambda and LINQ - Exercises задача 04. Extract Sentences е вероятно да има сгрешени тестове, понеже никой от опиталите се не е успял да извади 100/100. Може и проблема да е в нас и да не съобразяваме някой краен случай, но ако може да я погледнете за всеки случай. 

Също така още няма упражнения по темата: Objects and Classes - Exercises, има само Lab за момента.

Благодаря! :)

Тагове:
0
Programming Fundamentals
massbless avatar massbless 5 Точки

Извинявам се, че съживявам тази стара тема (пишейки с цели 2 седмици закъснение), но се опитвам да избягвам да post-вам нови въпроси ако това, което ме интересува, вече съществува под някаква форма в нечие чуждо допитване.

Въпросната задача 04. Extract Sentences виждам, че вече е била решена за пълния брой точки от доста голям брой хора. Някой може ли да сподели как стоят нещата с последната проверка? Забил съм на 80/100 и започвам да се изчерпвам откъм идеи. Условието изглежда доста некоректно зададено. Няма информация дали изреченията в текста могат да съдържат изрази в скоби, кавички и прочие, дали не може да се срещне процент или $ (ако се говори за цени). Hint-овете накрая пък са откровено подвеждащи, защото казват да се заменят всички небуквени стойности със спейсове, което би гръмнало още с примерния вход, където се виждат и цифри, и тирета, и запетаи!

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

0
tihomirj avatar tihomirj 33 Точки

Аз първо направих списък от изреченията и после всеки елемент на списъка (тоест изречение) го разбих на масив от думите. Използвах Регекс и сплитнах по всички символи, които не са думи. Ако масива от думи от едно изречение съдържа ключовата дума - печатам изречението.

static void Main(string[] args)
        {
            var sentenceDelimeters = ".!?".ToCharArray();
            var keyword = Console.ReadLine();
            var text = Console.ReadLine()
.Split(sentenceDelimeters, StringSplitOptions.RemoveEmptyEntries).ToList();
 
            foreach (var sentence in text)
            {
                string[] words = Regex.Split(sentence, @"\W+");
                if (words.Contains(keyword))
                    Console.WriteLine(sentence);
            }
                
        }
0
massbless avatar massbless 5 Точки

Ами аз в общи линии правя същото:

static void Main(string[] args)
    {
        string keyWord = Console.ReadLine();
        //string check = "(" + keyWord;
        string inputText = Console.ReadLine();

        char[] sentenceSeparators = { '.', '!', '?' };
        char[] wordSeparator = { ' ' };
        Regex rgx = new Regex("[^a-zA-Z0-9 /+=&%@$[]'\"();:,-]");

        string[] sentences = inputText.Split(sentenceSeparators, StringSplitOptions.RemoveEmptyEntries).ToArray();

        for (int i = 0; i < sentences.Length; i++)
        {
            sentences[i] = rgx.Replace(sentences[i], " ");
            string[] words = sentences[i].Split(wordSeparator, StringSplitOptions.RemoveEmptyEntries).ToArray();
            if (words.Contains(keyWord))
                    Console.WriteLine(sentences[i].Trim());
        }
    }

Regex-а оригинално беше само [^a-zA-Z0-9 -]. В последствие започнах да добавям още символи, защото както текста съдържа числа, тирета и запетаи, така би могъл да има и кавички, скоби и прочие. Промените обаче нямаха ефект - продължавам да изкарвам 80/100. Явно проблемът не е в някой от изброените characters. Между другото, не виждам никъде да тримваш текста. Как избягваш 2-то, 3-то и т.н. изречения да се появяват с отстояние в output-a? Или Judge не го гледа това?

0
tihomirj avatar tihomirj 33 Точки

Ти променяш изреченията с този ред sentences[i] = rgx.Replace(sentences[i], " "); И после ги печаташ. Според мен е малко чудо че ти дава 80 от 100 след като променяш изреченията и ги печаташ променени.

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

Закоментирах тези редове Regex rgx = new Regex("[^a-zA-Z0-9 /+=&%@$[]'\"();:,-]"); и sentences[i] = rgx.Replace(sentences[i], " "); Пак даде 80/100 - явно не вършат работа. Предполагам, че причината е, че променяш изреченията. Не съм много добър в regular expressions, но е възможно по този начин и да пропускаш някой символ, затова използвай по-простото var words = Regex.Split(sentences[i], @"\W+"). Така нищо не реплейсваш, а само сплитваш по "не-думи".

Иначе си прав - не тримвам текста и ако има повече интервали се появяват отместени. Явно Judge не проверява за това. Но си редактирах кода и вече тримвам, за да не ги отмества. Явно помага още някой да ти гледа кода. :)

0
14/06/2016 00:25:09
massbless avatar massbless 5 Точки

Ами от условието не стана ясно дали изреченията трябва да се печатат в оригиналния им вид (с всякакви странни символи, използвани като разделители) или в "чистия" им вид. Като видях, че имам 80/100 и реших, че съм на прав път да печатам "изчистените" изречения.

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