Loading...
Elena123456 avatar Elena123456 235 Точки

11. The Party Reservation Filter Module- 100/100, but incorrect solution

Здравейте,

извинявам се предварително, че отварям тази тема, въпреки че Judge ми дава максималния брой точки, но имам някои неясноти. Въпреки максималния брой точки не получавам еднакви резултати, а разбъркани имена на гостите накрая при принтирането им. Вчера почти цял ден се борих с тази задача- как да добaвям и махам филтри на поканените гости, без значение каква им е последователността на добавяне и на изтриване. Според трейнъра трябва да се използва лист от филтри, но аз така и не успях да осъзная каква е логиката в подобно решение. Не разбирам защо е небходимо да се използва лист от филтри и дали някой би ми обяснил накратко с "думи" (ако е възможно) защо лист от филтри би ни свършил работа?

През нощта ми хрумна едно решение, което е със следната логика- за добавяне на филтър си имаме конкретна фунцкия ("funcAddFilter"), която приема guests, filterType, filterParameter, а за изтриването също има подобна фунцкия ("funcRemoveFilter"), но тя винаги приема първоначалния лист от гости и съответно filterType, и filterParameter. Като за funcRemoveFilter винаги след като получим листа с вече изтрития филтър от гости, ще трябва да си го добавяме към текущия (актуален) списък от гости.

Judge е съгласен с подхода ми, но резултата не е коректен на 100% и друг е въпроса доколко функционално е решението ми и дали е възможно да се подобри. И найстина ще съм благодарна, ако някой  ми обясни за решението с лист от филтри или някакво друго, при което се получават правилно подредени резултати, защото при мен винаги се получават разбъркани. И последно- когато се опитвам да използвам Where във функцията, вместо foreach, филтъра  прескача и изобщо не работи филтрацията.frown Това нормално ли е?

 

https://softuni.bg/trainings/resources/officedocument/52733/functional-programming-exercise-csharp-advanced-september-2020/3007

https://pastebin.com/navD6gt3

 

Тагове:
0
C# Advanced 28/01/2021 22:55:06
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

Hmm, those functional programming exercises just aim to demonstrate the possibilities of Func<> and Action<>, keep in mind that they are usually not covered on the exam. From what I remember from this exercise, was to properly set up some Func<> variables and then to filter a set of names accordingly - no additional collections of filter or anything else is needed.

Best,

using System;
using System.Linq;
using System.Collections.Generic;

namespace partyReservationFilterFinal
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] names = Console.ReadLine()
                .Split(" ", StringSplitOptions.RemoveEmptyEntries);

            var filterList = new List<string>();

            string filter = Console.ReadLine();

            while (filter != "Print")
            {
                string[] filterInfo = filter
                    .Split(";", StringSplitOptions.RemoveEmptyEntries);
                string operation = filterInfo[0];

                if (operation == "Add filter")
                {
                    filterList.Add($"{filterInfo[1]};{filterInfo[2]}");
                }
                else if (operation == "Remove filter")
                {
                    if (filterList.Contains($"{filterInfo[1]};{filterInfo[2]}"))
                    {
                        filterList.Remove($"{filterInfo[1]};{filterInfo[2]}");
                    }
                }

                filter = Console.ReadLine();
            }

            Func<string, int, bool> lengthFilter = (name, length)
                => name.Length == length;
            Func<string, string, bool> startsFilter = (name, letter)
                => name.StartsWith(letter);
            Func<string, string, bool> endsFilter = (name, letter)
                => name.EndsWith(letter);
            Func<string, string, bool> containsFilter = (name, letter)
                => name.Contains(letter);

            foreach (var currentFilter in filterList)
            {
                string[] currentFilterInfo = currentFilter
                    .Split(";", StringSplitOptions.RemoveEmptyEntries);

                string action = currentFilterInfo[0];
                string parameter = currentFilterInfo[1];

                if (action == "Starts with")
                {
                    names = names
                        .Where(name => !startsFilter(name, parameter)) 
                        .ToArray();
                }
                else if (action == "Ends with")
                {
                    names = names
                        .Where(name => !endsFilter(name, parameter))
                        .ToArray();
                }
                else if (action == "Length")
                {
                    names = names
                        .Where(name => !lengthFilter(name, int.Parse(parameter)))
                        .ToArray();
                }
                else if (action == "Contains")
                {
                    names = names
                        .Where(name => !containsFilter(name, parameter))
                        .ToArray();
                }

            }

            Console.WriteLine(string.Join(" ", names));
        }
    }
}

 

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