Професионална програма
Loading...
+ Нов въпрос
zanovasevi avatar zanovasevi 0 Точки

C# - 7.08.2020 - Final Exam

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

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

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

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

без проверка за валидност на а втората команда ми дава 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 0 Точки

Здравейте! Аз имах особено затруднение с решението на 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 0 Точки

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

0
Ankoun1 avatar Ankoun1 9 Точки

- за отрицателните стойности също може да има проблем още при проверка на следващите команди (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 0 Точки

Благодаря :)

0
vicksun avatar vicksun 8 Точки

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

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

https://pastebin.com/Txi3L2Jm

0
vicksun avatar vicksun 8 Точки

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

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

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

https://pastebin.com/4hV6wQDV

0
VelyanG avatar VelyanG 3 Точки

Здравей,

това са решенията ми на първа и втора задача. За съжалние трета не я реших за 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 8 Точки

Благодаря VelyanG !

0
VDIordanov avatar VDIordanov 0 Точки

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

0
VelyanG avatar VelyanG 3 Точки

Здравей,

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

0
09/08/2020 20:24:14
Ankoun1 avatar Ankoun1 9 Точки

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

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

.

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}");               
            }

        }
    }
}

0
25/08/2020 15:24:49
Ankoun1 avatar Ankoun1 9 Точки

- за отрицателните стойности също може да има проблем още при проверка на следващите команди (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

0
11/08/2020 12:19:24
Ankoun1 avatar Ankoun1 9 Точки

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

 

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}");               
            }

        }
    }
}

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

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

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

0
krum_43 avatar krum_43 379 Точки

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

0