1

Тема: C# Замовлення піци (консоль)

Мережа піццерій хоче дізнатися, які комбінації інгредієнтів є найбільш популярними серед клієнтів.
Список замовлених піц знаходиться у файлі (JSON). Потрібно написати програму (консольний проект), яка виводить на екран 20 найпопулярніших піц. При цьому для кожної такої піци потрібно вказати список інгредієнтів, а також кількість її замовлень.
Підкажіть будб-ласка що де описувати. Хто може дати якусь ідею для виконання завдання?

Post's attachments

Pizzas.json.zip 26.43 kb, 151 downloads since 2022-03-22 

2

Re: C# Замовлення піци (консоль)

завантайже той JSON на https://gist.github.com/
нам так зручніше буде його переглядати

3

Re: C# Замовлення піци (консоль)

https://github.com/SashaMaksyutenko/-_pizza_select

4

Re: C# Замовлення піци (консоль)

а як там дізнатись, чи одна піца популярніша за іншу, чи нє?

5

Re: C# Замовлення піци (консоль)

мабуть якось в методі - рандомно я думаю

6

Re: C# Замовлення піци (консоль)

Там піци повторюються, отже тре порахувати, які піци як часто купляли і відповідно виводити їх за частотою, скільки вам там потрібно.

Подякували: FakiNyan, leofun012

7

Re: C# Замовлення піци (консоль)

має бути клас Піца і клас Замовлення
Треба діставати всі піци з json файлу і закидати в список - в класі Замовлення і в новий список (20 найпопулярніших піц закидати з загального списку з усіма піцами)
якось так?

8

Re: C# Замовлення піци (консоль)

Та, як на мене, тут класи взагалі не потрібні )
Проте, як хочете можете їх додати. Ну, так json можна розпарсити у якийсь масив чи список, щоб було зручніше. А для підрахунку частот, я б додатково використав словник і вже з нього виводив 20 найпопулярніших піц.

9

Re: C# Замовлення піци (консоль)

https://github.com/SashaMaksyutenko/-_pizza_select

Такий вийшов проект.
Дали таку відповідь - Відповідь по ТЗ невірна. Від самого початку був вибраний неправильний шлях  зі спробою порівняння масивів як окремих сущностей. В принципі через такий підхід можна отримати правильний результат, але він буде неоптимальним.
Підкажіть в чому помилка і як отримати оптимальний результат?

10

Re: C# Замовлення піци (консоль)

sasha87 написав:

Дали таку відповідь - Відповідь по ТЗ невірна.

Що, означає "Відповідь по ТЗ невірна"?

sasha87 написав:

такий підхід [...] буде неоптимальним.

Де, в ТЗ вказано, щоб використати найоптимальніший підхід?

11 Востаннє редагувалося sasha87 (31.03.2022 16:45:47)

Re: C# Замовлення піци (консоль)

Ще написали - Потрібно відсортувати інгредієнти і від цього відштовхуватися.
Але ж там є сортування.
та ніде не вказано що треба використовувати найоптимальніший спосіб
Та все таки що ж не так?

12

Re: C# Замовлення піци (консоль)

Накидав на пітоні на швидкоруч алгоритм, ось що мені вивело:

1 . name:pepperoni           , count:6335
2 . name:four cheese         , count:1611
3 . name:mozzarella cheese   , count:1461
4 . name:bacon               , count:1447
5 . name:beef                , count:1140
6 . name:sausage             , count:831
7 . name:mushrooms           , count:733
8 . name:italian sausage     , count:672
9 . name:black olives        , count:456
10. name:chicken             , count:401
11. name:pineapple           , count:360
12. name:ham                 , count:341
13. name:jalapenos           , count:258
14. name:green peppers       , count:206
15. name:canadian bacon      , count:174
16. name:diced white onions  , count:168
17. name:cheddar cheese      , count:154
18. name:diced tomatoes      , count:128
19. name:alredo sauce        , count:127
20. name:onions              , count:121

У вас такий же вивід?

Подякували: leofun011

13

Re: C# Замовлення піци (консоль)

wander написав:

Накидав на пітоні на швидкоруч алгоритм, ось що мені вивело:

1 . name:pepperoni           , count:6335
2 . name:four cheese         , count:1611
3 . name:mozzarella cheese   , count:1461
4 . name:bacon               , count:1447
5 . name:beef                , count:1140
6 . name:sausage             , count:831
7 . name:mushrooms           , count:733
8 . name:italian sausage     , count:672
9 . name:black olives        , count:456
10. name:chicken             , count:401
11. name:pineapple           , count:360
12. name:ham                 , count:341
13. name:jalapenos           , count:258
14. name:green peppers       , count:206
15. name:canadian bacon      , count:174
16. name:diced white onions  , count:168
17. name:cheddar cheese      , count:154
18. name:diced tomatoes      , count:128
19. name:alredo sauce        , count:127
20. name:onions              , count:121

У вас такий же вивід?

А скільки у вас в масиві елементів всього? Бо я глянув, і в мене порядок схожий, але кількість піц з пепероні лише 4616 нарахувало (всього в масиві 12761 елемент)

┌─────────┬─────┬───────────────────────────────┬───────┐
 (index)  num              name               count 
├─────────┼─────┼───────────────────────────────┼───────┤
    0      1            'pepperoni'           4616  
    1      2        'mozzarella cheese'       1014  
    2      3           'four cheese'           956  
    3      4              'bacon'              732  
    4      5              'beef'               623  
    5      6             'sausage'             402  
    6      7         'italian sausage'         361  
    7      8             'chicken'             229  
    8      9      'four cheese,pepperoni'      203  
    9     10               'ham'               165  
   10     11            'mushrooms'            159  
   11     12   'mozzarella cheese,pepperoni'   155  
   12     13         'beef,pepperoni'          122  
   13     14         'bacon,pepperoni'         121  
   14     15          'black olives'           117  
   15     16          'alredo sauce'           101  
   16     17        'pepperoni,sausage'        96   
   17     18         'cheddar cheese'          95   
   18     19    'italian sausage,pepperoni'    85   
   19     20            'pineapple'            79   
└─────────┴─────┴───────────────────────────────┴───────┘

14 Востаннє редагувалося wander (31.03.2022 18:04:55)

Re: C# Замовлення піци (консоль)

Гм, так, якщо у нас є ось такий список:

    "toppings": [
      "pepperoni",
      "four cheese"
    ]

І це все одна піца, то тре чуть інакше рахувати :)
Просто "Чотири сири", це зазвичай йде як окрема піца, а не інгредієнт. Тоді у мене так само, як і у вас:

1 . name:(pepperoni                     ), count:4616
2 . name:(mozzarella cheese             ), count:1014
3 . name:(four cheese                   ), count:956
4 . name:(bacon                         ), count:732
5 . name:(beef                          ), count:623
6 . name:(sausage                       ), count:402
7 . name:(italian sausage               ), count:361
8 . name:(chicken                       ), count:229
9 . name:(ham                           ), count:165
10. name:(mushrooms                     ), count:159
11. name:(black olives                  ), count:117
12. name:(pepperoni, four cheese        ), count:103
13. name:(alredo sauce                  ), count:101
14. name:(four cheese, pepperoni        ), count:100
15. name:(mozzarella cheese, pepperoni  ), count:96
16. name:(cheddar cheese                ), count:95
17. name:(pineapple                     ), count:79
18. name:(pepperoni, beef               ), count:67
19. name:(pepperoni, bacon              ), count:63
20. name:(pepperoni, mozzarella cheese  ), count:59

Або майже так само )

Подякували: FakiNyan1

15

Re: C# Замовлення піци (консоль)

wander написав:

Гм, так, якщо у нас є ось такий список:

    "toppings": [
      "pepperoni",
      "four cheese"
    ]

І це все одна піца, то тре чуть інакше рахувати :)
Просто "Чотири сири", це зазвичай йде як окрема піца, а не інгредієнт. Тоді у мене так само, як і у вас:

1 . name:(pepperoni                     ), count:4616
2 . name:(mozzarella cheese             ), count:1014
3 . name:(four cheese                   ), count:956
4 . name:(bacon                         ), count:732
5 . name:(beef                          ), count:623
6 . name:(sausage                       ), count:402
7 . name:(italian sausage               ), count:361
8 . name:(chicken                       ), count:229
9 . name:(ham                           ), count:165
10. name:(mushrooms                     ), count:159
11. name:(black olives                  ), count:117
12. name:(pepperoni, four cheese        ), count:103
13. name:(alredo sauce                  ), count:101
14. name:(four cheese, pepperoni        ), count:100
15. name:(mozzarella cheese, pepperoni  ), count:96
16. name:(cheddar cheese                ), count:95
17. name:(pineapple                     ), count:79
18. name:(pepperoni, beef               ), count:67
19. name:(pepperoni, bacon              ), count:63
20. name:(pepperoni, mozzarella cheese  ), count:59

Але у вас

14. name:(four cheese, pepperoni        ), count:100

а в мене так

9      'four cheese,pepperoni'      203

Може це там є інгрідієнти з додатковими пробілами зліва і справа? Я в себе проходжусь по кожному інгрідієнту і обрізаю ті пробіли

 const key = pizza.toppings
    .sort()
    .map(str => str.trim())
    .toString();

16

Re: C# Замовлення піци (консоль)

такий самий результат

17

Re: C# Замовлення піци (консоль)

бачу що є одінакові піци в яких інгредієнти йдуть в різному порядку
як це виправити?

18 Востаннє редагувалося FakiNyan (31.03.2022 18:54:20)

Re: C# Замовлення піци (консоль)

sasha87 написав:

бачу що є одінакові піци в яких інгредієнти йдуть в різному порядку
як це виправити?

відсортувати інгредієнти

19 Востаннє редагувалося sasha87 (31.03.2022 19:00:56)

Re: C# Замовлення піци (консоль)

такий код
але результат відрізняється від того, що на пітоні

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace jsonWork
{
    class Program
    {
        static void Main(string[] args)
        {
            var pizzass = JsonConvert.DeserializeObject<List<PizzaIngredients>>(File.ReadAllText("Pizzas.json"))
                .GroupBy(g => String.Join(", ", g.toppings.OrderBy(o => o)))

                .Select(s => new { topping = s.Key, count = s.Count() })
                .OrderByDescending(o => o.count);

            int nums = 1;

            int prewVal = Int32.MaxValue;

            foreach (var row in pizzass)
            {
                if (nums <= 20)
                {
                    Console.WriteLine($"pizza (topping): {row.topping}. count: {row.count}");
                }
                if (row.count < prewVal)
                {
                    prewVal = row.count;

                    nums++;
                }
            }
        }
    }
    public class PizzaIngredients
    {
        public List<string> toppings { get; set; }
    }
}

20 Востаннє редагувалося wander (31.03.2022 19:55:13)

Re: C# Замовлення піци (консоль)

FakiNyan, так я трошки недогледів, бо паралельно ще працюю, мало б бути так:

1 . name:(pepperoni                     ), count:4616
2 . name:(mozzarella cheese             ), count:1014
3 . name:(four cheese                   ), count:956
4 . name:(bacon                         ), count:732
5 . name:(beef                          ), count:623
6 . name:(sausage                       ), count:402
7 . name:(italian sausage               ), count:361
8 . name:(chicken                       ), count:229
9 . name:(four cheese, pepperoni        ), count:203
10. name:(ham                           ), count:165
11. name:(mushrooms                     ), count:159
12. name:(mozzarella cheese, pepperoni  ), count:155
13. name:(beef, pepperoni               ), count:122
14. name:(bacon, pepperoni              ), count:121
15. name:(black olives                  ), count:117
16. name:(alredo sauce                  ), count:101
17. name:(pepperoni, sausage            ), count:96
18. name:(cheddar cheese                ), count:95
19. name:(italian sausage, pepperoni    ), count:85
20. name:(pineapple                     ), count:79
Total count:10431

sasha87, у вас такий самий вивід, як отут у мене вище?