Exemple #1
0
        public static ArrayList FillCandySet(bool showLog = false)
        {
            ArrayList resultSet = new ArrayList();

            for (int i = 0; i < CandySetAmount; i++)
            {
                try
                {
                    CandySet candySet = CandySet.LoadFromFile(string.Format("{0}{1:D3}", CandySetData[0], i));
                    candySet.CandySetName = string.Format("{0}{1:D3}", CandySetData[0], i);

                    resultSet.Add(candySet);
                    if (showLog)
                    {
                        Console.WriteLine("{0}{1:D3} состоит:", CandySetData[0], i);
                        foreach (var c in candySet)
                        {
                            Console.WriteLine("Конфета: {0}  количество:{1}", ((CandyForSet)c).Candy.CandyName, ((CandyForSet)c).Amount);
                        }
                        Console.WriteLine("Вес набора:{0}", candySet.Weight);
                        Console.WriteLine("Энергетическая ценность:{0}", candySet.FoodValue);
                        Console.WriteLine("Годен до:{0}", candySet.ExpirationDate);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Не удалось загрузить: {0}{1:D3}", CandySetData[0], i);
                    Console.WriteLine("Ошибка: {0}", e.Message);
                }
            }

            return(resultSet);
        }
 public void changeScene()
 {
     if (clearPlayerPref)
     {
         CandySet.ClearCandy();
         ItemManager.ClearItem();
     }
     SceneNavigator.Instance.Change(scenename, FadeTime);
 }
Exemple #3
0
        // рассматриваем Новогодний подарок как совокупность наборов конфет CandySet. Т.е. даже если 1 конфета - то мы ее помещаем в набор с кол-ом 1.
        static void Main(string[] args)
        {
            AppPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);

            // CreateCandySets(true);

            ArrayList candyList    = GetCandyList();     // получаем список конфет
            ArrayList candySetList = FillCandySet(true); // набор наборов конфет :)

            // Найдем просроченные наборы, т.е. у кого срок хранения вышел на текущую дату
            Console.WriteLine("\nПросроченные наборы");
            foreach (var c in candySetList.ToArray().Where(x => (x as CandySet).ExpirationDate < DateTime.Now))
            {
                Console.WriteLine("Набор:{0} срок годности истек: {1}", (c as CandySet).CandySetName, (c as CandySet).ExpirationDate);
                var res = (from x in (c as CandySet)
                           where (x.Candy.ExpirationDate < DateTime.Now)
                           select(x as CandyForSet).Candy);
                if (res.Any())
                {
                    Console.WriteLine("Во всем виноваты:");
                    foreach (var cc in res)
                    {
                        Console.WriteLine("Конфетка:{0} со сроком:{1}", cc.CandyName, cc.ExpirationDate);
                    }
                }
            }

            XmasGift XmasGift = new XmasGift();
            Random   r        = new Random();
            // все наборы с хорошим сроком годности и в которых больше 1 конфеты
            var validCandySets = (from x in candySetList.ToArray()
                                  where ((x as CandySet).ExpirationDate > DateTime.Now && (x as CandySet).Count() > 1)
                                  select(x as CandySet));
            var candySets         = validCandySets as CandySet[] ?? validCandySets.ToArray();
            int minCandySetWeight = candySets.Min(x => (int)x.Weight);
            int maxCandySetWeight = candySets.Max(x => (int)x.Weight);

            // наполняем подарок, пока не оставим место для одного набора
            while (XmasGiftWeight - XmasGift.Weigh > maxCandySetWeight)
            {
                XmasGift.Add(candySets.ToArray()[r.Next(candySets.Count())]);
            }
            // нужно добавить один набор, тогда у нас будет подарок приближен к Макс весу подарка
            XmasGift.Add(candySets.ToArray()[r.Next(candySets.Count())]);
            // если осталось место для еще одного набора, то дополним его
            if (XmasGiftWeight - XmasGift.Weigh > minCandySetWeight)
            {
                int      difference   = XmasGiftWeight - XmasGift.Weigh;
                int      minimalValue = difference;
                CandySet cs           = null;
                foreach (var c in candySets)
                {
                    if ((difference - c.Weight > 0) && (difference - c.Weight < minimalValue))
                    {
                        cs           = c;
                        minimalValue = difference - (int)c.Weight;
                    }
                }
                // если нашли наиболее близкий набор для наполнения
                if (cs != null)
                {
                    XmasGift.Add(cs);
                }
            }
            // нужно подарок добить конфетами до XmasGiftWeight (1000)
            Console.WriteLine("\nНабор без сортировки");

            foreach (var cs in XmasGift)
            {
                Console.WriteLine("Набор: {0} sugar={1} вec={2}", (cs as CandySet).CandySetName, (cs as CandySet).Sugar, (cs as CandySet).Weight);
            }
            XmasGift.SortBySugar();
            Console.WriteLine("\nНаборы после сортировки сахару");
            foreach (var cs in XmasGift)
            {
                Console.WriteLine("Набор: {0} sugar={1} вec={2}", (cs as CandySet).CandySetName, (cs as CandySet).Sugar, (cs as CandySet).Weight);
            }

            Console.WriteLine("Самые сладкие конфеты:");
            foreach (var c in candyList.ToArray().Where(x => (x as Candy).Sugar == candyList.ToArray().Max(y => (y as Candy).Sugar)))
            {
                Console.WriteLine("Конфета: {0} sugar={1} вec={2}", (c as Candy).CandyName, (c as Candy).Sugar, (c as Candy).Weight);
            }

            Console.ReadKey();
        }
Exemple #4
0
        public static void CreateCandySets(bool overrideCandySet = false) // создаем наборы конфет
        {
            // создаем CandySetAmount(200) наборов конфет.
            // т.е. в наборе конфета1-количество, ..., конфетаN-количество
            // считаем, что кол-во конфет в наборе не должно превышать MaxCandyAmountInSet(20) и вес 100г.
            Random    r         = new Random();
            ArrayList candyList = GetCandyList();

            for (int i = 0; i < CandySetAmount; i++)
            {
                // делаем первых CandyName.Count наборов c 1 конфетой, чтобы потом можно было докладывать конфетами до определенного веса
                CandySet CandySet = new CandySet(string.Format("{0}{1:D3}", CandySetData[0], i));

                if (i < CandyNames.Count())
                {
                    CandyForSet candyForSet = new CandyForSet()
                    {
                        Amount = 1, Candy = (Candy)candyList[i]
                    };
                    CandySet.Add(candyForSet);
                }
                else
                {
                    // находим минимальный вес конфеты
                    //double minCandyWeight = 1000;
                    //foreach (var c in candyList)
                    //{
                    //    minCandyWeight = ((c as Candy).Weight < minCandyWeight && (c as Candy).Weight > 0) ? (c as Candy).Weight : minCandyWeight;
                    //}
                    //Console.WriteLine(minCandyWeight);
                    //Console.WriteLine(candyList.ToArray().Min(x => (x as Candy).Weight));
                    //Console.WriteLine(candyList.Cast<object>().Aggregate<object, double>(1000, (current, c) => ((c as Candy).Weight < current && (c as Candy).Weight > 0) ? (c as Candy).Weight : current));
                    //double minCandyWeight = candyList.Cast<object>().Aggregate<object, double>(1000, (current, c) => ((c as Candy).Weight < current && (c as Candy).Weight > 0) ? (c as Candy).Weight : current);
                    double minCandyWeight = candyList.ToArray().Min(x => (x as Candy).Weight);

                    //max weight 100 - набор в MaxCandySetWeight (100)г
                    int   restWeight = MaxCandySetWeight;
                    Candy candy;
                    do
                    {
                        do
                        {
                            int candyIndex = r.Next(CandyNames.Count() - 1);
                            candy = (Candy)candyList[candyIndex];                                                                                                                           //Candy.LoadFromFile(CandyNames[candyIndex]);
                        } while ((candy.Weight > restWeight) || CandySet.Any(n => n.Candy.CandyName == candy.CandyName));                                                                   // конфеты в наборе не должны повторяться

                        int         candyMaxAmount = (restWeight / (int)Math.Round(candy.Weight) > MaxCandyAmountInSet) ? MaxCandyAmountInSet : restWeight / (int)Math.Round(candy.Weight); // не больше MaxCandyAmountInSet (20) одинаковых
                        int         candyAmount    = r.Next(1, candyMaxAmount);
                        CandyForSet candyForSet    = new CandyForSet()
                        {
                            Amount = candyAmount, Candy = candy
                        };
                        CandySet.Add(candyForSet);
                        restWeight -= candyAmount * (int)candy.Weight;
                    } while (restWeight > minCandyWeight);
                }
                // в XML не сохраняет
                CandySet.CandySetName = string.Format("{0}{1:D3}", CandySetData[0], i);
                CandySet.SaveToFile();
                //Serializer.SaveListToBinnary(Path.Combine(AppPath, CandySetData[0], Path.ChangeExtension(string.Format("{0}{1:D3}", CandySetData[0], i), CandySetData[1])), CandySet);
            }
        }