Loading...
zanovasevi avatar zanovasevi 13 Точки

C# - 7.08.2020 - Final Exam

Здравейте, някой би ли споделил 100 от 100 решения на задачите от финалния изпит? Получавам крайният резултат на първа и втора задача, но не и 100 от 100.

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

Тагове:
0
C# Fundamentals 09/08/2020 17:51:27
Ankoun1 avatar Ankoun1 18 Точки

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

без проверка за валидност на а втората команда ми дава 50т.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace regex_demos
{
    class Program
    {

       
        static void Main(string[] args)
        {

           
            int n = int.Parse(Console.ReadLine());
            Dictionary<string, List<double>> plants = new Dictionary<string, List<double> >();
            for (int i = 0; i < n; i++)
            {
                string[] input = Console.ReadLine().Split("<->").ToArray();
                string plant = input[0];
                double rarity = double.Parse(input[1]);
                if (!plants.ContainsKey(plant))
                {
                    plants.Add(plant, new List<double>());
                    plants[plant].Add(rarity);
                }
                else
                {
                    plants[plant][0] += rarity;//трябва да е само =
                }

            }
            while (true)
            {
                string input = Console.ReadLine();
                if (input == "Exhibition")
                {
                    break;
                }
                string[] command = input.Split(new char[] { '-', ' ',':' }, StringSplitOptions.RemoveEmptyEntries);              
              
                    string plant = command[1];
                    if (!plants.ContainsKey(plant))
                    {
                        Console.WriteLine("error");
                        continue;
                    } 

                    if (command[0] == "Rate")
                    {

                        double rating = double.Parse(command[2]);
                       
                        plants[plant].Add(rating);
                    }
                    else if (command[0] == "Update")
                    {
                        double rarity = double.Parse(command[2]);
                        
                        plants[plant][0] = rarity;

                    }
                    else if (command[0] == "Reset")
                    {
                        plants[plant].RemoveRange(1, plants[plant].Count - 1);                       

                    }
                    else
                    {                        
                        Console.WriteLine("error");
                    }               
            }           
                    
            foreach (var item in plants)
            {

                double rarity = item.Value[0];
                
                item.Value.RemoveAt(0);
               
                int count = item.Value.Count;
               
                   double sum = item.Value.Sum();                
               
                if (sum != 0)
                {
                    sum /= count;
                }
                item.Value.Clear();
                item.Value.Add(rarity);
                item.Value.Add(sum);               

            }
            Console.WriteLine("Plants for the exhibition:");
            foreach (var item in plants.OrderByDescending(x => x.Value[0]).ThenByDescending(x => x.Value[1]).ToDictionary(x => x.Key,x => x.Value))
            {              
                  Console.WriteLine($"- {item.Key}; Rarity: {(int)item.Value[0]}; Rating: {item.Value[1]:f2}");               
            }

        }
    }
}

0
11/08/2020 18:35:44
k.ivanov avatar k.ivanov 1 Точки

Здравейте! Аз имах особено затруднение с решението на 3та задача от днес. Поствам моето решение, с което получих 50/100. Много се чудих къде бъркам, но не успях да измисля нищо.

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

namespace Plant_Discovery
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, Dictionary<string, List<double>>> plantsManager =
                new Dictionary<string, Dictionary<string, List<double>>>();

            int n = int.Parse(Console.ReadLine());

            for (int i = 0; i < n; i++)
            {
                string[] input = Console.ReadLine()
                    .Split("<->", StringSplitOptions.RemoveEmptyEntries);

                var plant = input[0];
                var rarity = double.Parse(input[1]);

                if (!plantsManager.ContainsKey(plant))
                {
                    plantsManager.Add(plant, new Dictionary<string, List<double>>
                    {
                        { "rarity", new List<double>() { rarity } },
                        { "rating", new List<double>() }
                    });
                }
                else if (plantsManager.ContainsKey(plant))
                {
                    plantsManager[plant]["rarity"][0] = rarity;
                }
            }

            string command = Console.ReadLine();

            while (command != "Exhibition")
            {
                var tokens = command.Split(": ");
                var plantStats = tokens[1].Split(" - ");
                var plant = plantStats[0];

                if (tokens[0] == "Rate")
                {
                    var rating = double.Parse(plantStats[1]);
                    plantsManager[plant]["rating"].Add(rating);  
                }

                if (tokens[0] == "Update")
                {
                    var newRarity = double.Parse(plantStats[1]);
                    plantsManager[plant]["rarity"][0] = newRarity;
                }

                if (tokens[0] == "Reset")
                {
                    plantsManager[plant]["rating"].Clear();
                }

                command = Console.ReadLine();
            }

            var sorted = plantsManager.OrderByDescending(x => x.Value["rarity"][0])
                .ThenByDescending(x => x.Value["rating"].Average());

            Console.WriteLine("Plants for the exhibition:");

            foreach (var plant in sorted)
            {
                if (plant.Value["rating"].Count > 0)
                {
                    if (plant.Value["rating"].Count == 1)
                    {
                        Console.WriteLine($"- {plant.Key}; Rarity: {plant.Value["rarity"][0]:f0}; " +
                    $"Rating: {plant.Value["rating"][0]:f2}");
                    }
                    else
                    {
                        var averageRating = plant.Value["rating"].Average();
                        Console.WriteLine($"- {plant.Key}; Rarity: {plant.Value["rarity"][0]:f0}; " +
                        $"Rating: {averageRating:f2}");
                    }
                }                   
                else
                {
                    Console.WriteLine($"- {plant.Key}; Rarity: {plant.Value["rarity"][0]:f0}; " +
                                        $"Rating: 0.00");
                }   
            }
        }
    }
}
 

0
zanovasevi avatar zanovasevi 13 Точки

Благодаря, Ankoun1, за отделеното време! След като разгледах внимателно решението ти установих, че проблемът при мен не е от незнание как да напиша кода за решението, а в това че не съм разбрала условието и всичките тези термини rarity, rating, кое какво е, са ме объркали тотално какво точно се изисква. 

1
Ankoun1 avatar Ankoun1 18 Точки

- за отрицателните стойности също може да има проблем още при проверка на следващите команди (rarity),(rating)

double(rarity) ако присвоява отрицателна стойност това би трябвало да е грешка , съществува вероятност корекцията да важи и за double(rating)

ако double(rating) приема отрицателни стойности ,тогава листовете може да се напълнят с отрицателни стойности и проверката за(sum) се променя ако операциите за присвояване са валидни 
                if (sum != 0) ако са невалидни още преди тази проверка трябва да се направи друга проверка за (sum)
                {
                    sum /= count;
                }

ако се иска да се отпечата "грешка" при отрицателна (sum) на всички(rating) от конкретен plants[plant] лист, когато while цикъла е завършил, тогава проверката за (sum) се променя в следващия цикъл за манипулация на данните  sum >= 0 за да е валидна

- може да има и още проблеми с неправилен стринг ,който трябва да се сплитне по командите .Тогава трябва да се наблюдава дължината на последващия масив и съдържанието му за валидност ,което е необходимо за правилно последващо деклариране на променливите  и следене за "error", затова задачата наистина може да е доста трудна и часовете да се изнижат 

0
11/08/2020 18:26:55
Casual avatar Casual 1 Точки

И аз щях да стартитрам такава тема. Благодаря на колегите, че показаха решението на 3та. Може ли да постнете решенията за 1ва и 2ра?

0
09/08/2020 17:44:33
Casual avatar Casual 1 Точки

Благодаря! Може ли да метнеш едно око на моето решение, понеже мисля, че и аз съм я решил така(една идея по-различно)?
А пък ми даде 66/100.

https://pastebin.com/k6aUTRVC

 

0
zanovasevi avatar zanovasevi 13 Точки

Благодаря :)

0
vicksun avatar vicksun 21 Точки

Ето и едно решение на трета, което сглобих от моето и на колегата Ankoun1

Работи за примерните тестове, джъдж не знам какво би казал :) 

https://pastebin.com/Txi3L2Jm

0
vicksun avatar vicksun 21 Точки

zanovasevi дай да видим решението ти на втора, че там съвсем съм се оплел.

0
09/08/2020 19:27:17
zanovasevi avatar zanovasevi 13 Точки

Ето моето решение на втора, където излиза резултата, но не и 100 от 100 ...хахаха....

https://pastebin.com/4hV6wQDV

0
VelyanG avatar VelyanG 4 Точки

Здравей,

това са решенията ми на първа и втора задача. За съжалние трета не я реших за 100/100, макар с дадените входове работи ок (качвам и нея с надеждата да подскаже поне мъничко на някого или пък на някой му стане интересно и види къде й проблема :D).

1. WorldTour - https://pastebin.com/MnTFJvxW

2.DestinationMapper - https://pastebin.com/Brq79JTZ

3. https://pastebin.com/DqvbE1D0

0
09/08/2020 19:36:00
vicksun avatar vicksun 21 Точки

Благодаря VelyanG !

0
VDIordanov avatar VDIordanov 1 Точки

Колега , това е моето решение на 3та задача Plant Discovery : https://pastebin.com/Tkj0Mbv0   100/100 надявам се да ти помогне с нещо :), иначе благодаря за решениетоп на 2ра !

1
VelyanG avatar VelyanG 4 Точки

Здравей,

Благодаря ти много. Така като гледам твоето решение, явно не съм разбрал правилно забележката в условието(Note: If any of the command is invalid, print "error"). Щом пуснат изпита за практика, ще проверя, но ако наистина е така, то ..ще се гръмна... какъв съм тъпанар! :D :D Аз какво ли не въртях и суках 2 часа над тази задача. 

1
09/08/2020 20:24:14
Ankoun1 avatar Ankoun1 18 Точки

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

би трябвало решението на трета задача да изглежда така с добавяне на проверка за валидност на командите

.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace regex_demos
{
    class Program
    {

       
        static void Main(string[] args)
        {

           
            int n = int.Parse(Console.ReadLine());
            Dictionary<string, List<double>> plants = new Dictionary<string, List<double> >();
            for (int i = 0; i < n; i++)
            {
                string[] input = Console.ReadLine().Split("<->").ToArray();
                string plant = input[0];
                double rarity = double.Parse(input[1]);
                if (!plants.ContainsKey(plant))
                {
                    plants.Add(plant, new List<double>());
                    plants[plant].Add(rarity);
                }
                else
                {
                    plants[plant][0] = rarity;
                }

            }
            while (true)
            {
                string input = Console.ReadLine();
                if (input == "Exhibition")
                {
                    break;
                }
                string[] command = input.Split(new char[] { '-', ' ',':' }, StringSplitOptions.RemoveEmptyEntries);              
              
                    string plant = command[1];
                    if (!plants.ContainsKey(plant))
                    {
                        Console.WriteLine("error");                      
                    }

                    else

                    {

                    if (command[0] == "Rate")
                    {

                        double rating = double.Parse(command[2]);
                       
                        plants[plant].Add(rating);
                    }
                    else if (command[0] == "Update")
                    {
                        double rarity = double.Parse(command[2]);
                        
                        plants[plant][0] = rarity;

                    }
                    else if (command[0] == "Reset")
                    {
                        plants[plant].RemoveRange(1, plants[plant].Count - 1);                       

                    }
                    else
                    {                        
                        Console.WriteLine("error");
                    } 

                    }             
            }           
                Dictionary<string,List<double>> result = new Dictionary<string,List<double>>();  
            foreach (var item in plants)
            {

                double rarity = item.Value[0];
                
                item.Value.RemoveAt(0);
               
                int count = item.Value.Count;
               
                   double sum = item.Value.Sum();                
               
                if (sum != 0)
                {
                    sum /= count;
                }
                  result.Add(item.Key,new List<double>{rarity,sum});       

            }

               result.ToDictionary(x => x.Key,x => x.Value); //за да се изчисти по бързо паметта от стария речник и да не се товари системата при евентуална следваща манипулация на елементите ,които ще съществуват на две позиции  в паметта,докато C# прецени кога да изтрие речник 1

            Console.WriteLine("Plants for the exhibition:");
            foreach (var item in result.OrderByDescending(x => x.Value[0]).ThenByDescending(x => x.Value[1]).ToDictionary(x => x.Key,x => x.Value))
            {              
                  Console.WriteLine($"- {item.Key}; Rarity: {(int)item.Value[0]}; Rating: {item.Value[1]:f2}");               
            }

        }
    }
}

1
25/08/2020 15:24:49
Ankoun1 avatar Ankoun1 18 Точки

- за отрицателните стойности също може да има проблем още при проверка на следващите команди (rarity),(rating)

double(rarity) ако присвоява отрицателна стойност това би трябвало да е грешка , съществува вероятност корекцията да важи и за double(rating)

ако double(rating) приема отрицателни стойности ,тогава листовете може да се напълнят с отрицателни стойности и проверката за(sum) се променя ако операциите за присвояване са валидни 
                if (sum != 0)
                {
                    sum /= count;
                }

- ако се иска да се отпечата "грешка" при отрицателна (sum) на всички(rating) от конкретен plants[plant] лист, когато while цикъла е завършил, тогава проверката за (sum) се променя в следващия цикъл за манипулация на данните  sum >= 0 за да е валидна

- може да има и още проблеми с неправилен стринг ,който трябва да се сплитне по командите .Тогава трябва да се наблюдава дължината на последващия масив и съдържанието му за валидност ,което е необходимо за правилно последващо деклариране на променливите  и следене за "error", затова задачата наистина може да е доста трудна и часовете да се изнижат 

-    в такъв случай по-добре да се използва Regex за проверка  на валидност на стринга (input) чрез match.Sucses

1
11/08/2020 12:19:24
Ankoun1 avatar Ankoun1 18 Точки

задачата с регекс

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace regex_demos
{
    class Program
    {

       
        static void Main(string[] args)
        {

           
            int n = int.Parse(Console.ReadLine());
            Dictionary<string, List<double>> plants = new Dictionary<string, List<double> >();
            for (int i = 0; i < n; i++)
            {
                string[] input = Console.ReadLine().Split("<->").ToArray();
                string plant = input[0];
                double rarity = double.Parse(input[1]);
                if (!plants.ContainsKey(plant))
                {
                    plants.Add(plant, new List<double>());
                    plants[plant].Add(rarity);
                }
                else
                {
                    plants[plant][0] = rarity;
                }

            }
            while (true)
            {
                string input = Console.ReadLine();
                if (input == "Exhibition")
                {
                    break;
                }
                Match command = Regex.Match(input, @"^([A-Z][a-z]{3,5}): (\w+)( - (\-?\d+))?$");
                command.ToString();
                if (!command.Success)
                {
                    Console.WriteLine("error");
                    continue;
                }
                else
                {
                   
                    string validCommand = command.Groups[1].Value;
                    string plant = command.Groups[2].Value;
                    if (!plants.ContainsKey(plant))
                    {
                        Console.WriteLine("error");
                        continue;
                    }

                    if (validCommand == "Rate")
                    {

                        double rating = double.Parse(command.Groups[4].Value);

                        plants[plant].Add(rating);


                    }
                    else if (validCommand == "Update")
                    {
                        double rarity = double.Parse(command.Groups[4].Value);

                        plants[plant][0] = rarity;

                    }
                    else if (validCommand == "Reset")
                    {
                        plants[plant].RemoveRange(1, plants[plant].Count - 1);


                    }
                    else
                    {

                        Console.WriteLine("error");
                    }
                }
               
            }           
                    
            foreach (var item in plants)
            {

                double rarity = item.Value[0];
                
                item.Value.RemoveAt(0);
               
                int count = item.Value.Count;
               
                   double sum = item.Value.Sum();                
               
                if (sum != 0)
                {
                    sum /= count;
                }
                item.Value.Clear();
                item.Value.Add(rarity);
                item.Value.Add(sum);             

            }
            Console.WriteLine("Plants for the exhibition:");
            foreach (var item in plants.OrderByDescending(x => x.Value[0]).ThenByDescending(x => x.Value[1]).ToDictionary(x => x.Key,x => x.Value))
            {             
               
                    Console.WriteLine($"- {item.Key}; Rarity: {(int)item.Value[0]}; Rating: {item.Value[1]:f2}");               
            }

        }
    }
}

1
25/08/2020 15:53:44
Jorjo77 avatar Jorjo77 0 Точки

Много добро решение колега, аз не успях с тази задача. Една техническа грешка забелязах накрая:

във сортирания foreach трябва да сортираме result, а не plants.

0
krum_43 avatar krum_43 756 Точки

А може ли от някъде да се видят условията на задачите?

0
Valentin.Shumankov avatar Valentin.Shumankov 7 Точки

100/100    03. Plant Discovery

https://pastebin.com/psZVpv7w

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