1

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

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

Post's attachments

Pizzas.json.zip 26.43 kb, 23 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 17: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 19: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 19:54:20)

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

sasha87 написав:

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

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

19 Востаннє редагувалося sasha87 (31.03.2022 20: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 20: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, у вас такий самий вивід, як отут у мене вище?