예제 #1
0
파일: Solver.cs 프로젝트: rotemtzaban/ghc17
        private ProblemOutput ReorderLibraries(ProblemOutput output)
        {
            Parser parser        = new Parser();
            var    originalInput = parser.ParseFromData(Resources.e_so_many_books);
            // var librariesToImprove = output.libaries.Where(_ => originalInput.Libraries[_.Index].Books.Count > _.SelectedBooks.Count).ToList();
            int            notImproved          = 0;
            Calculator     calculator           = new Calculator();
            List <Library> orderedLibraries     = new List <Library>(output.libaries.Select(_ => originalInput.Libraries.FirstOrDefault(__ => __.Index == _.Index)));
            var            bestOrderedLibraries = orderedLibraries.ToList();
            var            bestScore            = GetScore(orderedLibraries, originalInput);
            Stopwatch      time = Stopwatch.StartNew();

            while (notImproved != 10000 && time.ElapsedMilliseconds < 20 * 1000)
            {
                var libraryToTop = orderedLibraries[NumbersGenerator.Next(orderedLibraries.Count)];
                orderedLibraries.Remove(libraryToTop);
                orderedLibraries.Insert(NumbersGenerator.Next(orderedLibraries.Count), libraryToTop);
                int score = GetScore(orderedLibraries, originalInput);
                if (bestScore < score)
                {
                    bestScore            = score;
                    bestOrderedLibraries = orderedLibraries.ToList();
                    notImproved          = 0;
                }
                else
                {
                    orderedLibraries = bestOrderedLibraries.ToList();
                    notImproved++;
                }
            }

            return(GenerateOutput(originalInput, bestOrderedLibraries));
        }
예제 #2
0
파일: Solver.cs 프로젝트: rotemtzaban/ghc17
        protected override ProblemOutput Solve(ProblemInput input)
        {
            var dictionary = input.Photos.GroupBy(photo => photo.IsVertical).ToDictionary(photos => photos.Key);
            IEnumerable <Photo> vertical   = dictionary.ContainsKey(true) ? dictionary[true] : (IEnumerable <Photo>)Array.Empty <Photo>();
            IEnumerable <Photo> horizontal = dictionary.ContainsKey(false) ? dictionary[false] : (IEnumerable <Photo>)Array.Empty <Photo>();

            var slides = horizontal.Select(photo => new Slide(new List <Photo> {
                photo
            }))
                         .Concat(VerticalUnifier.GetUnified(vertical.ToList(), NumbersGenerator)).ToList();
            ProblemOutput res = new ProblemOutput();

            res.Slides = new List <Slide>();

            HashSet <int> notPaired = new HashSet <int>(Enumerable.Range(0, slides.Count));
            //List<int> notPairedList = new List<int>(input.Photos.Select(x => x.Index).ToList());

            var last = NumbersGenerator.Next(slides.Count);

            notPaired.Remove(last);
            res.Slides.Add(slides[last]);

            bool[] lastTags = new bool[input.TagCount];

            for (int i = 0; i < slides.Count - 1; i++)
            {
                long bestScore = 0;
                int  pairId    = 0;
                foreach (var tagIndex in slides[last].TagsIndexes)
                {
                    lastTags[tagIndex] = true;
                }

                for (int j = 0; j < 10; j++)
                {
                    int nextId = this.NumbersGenerator.Next(0, slides.Count);

                    while (!notPaired.Contains(nextId) || nextId == last)
                    {
                        nextId = this.NumbersGenerator.Next(0, slides.Count);
                    }

                    long myScore = Calcutaor.CalculatePhotosScore(slides[last], slides[nextId]);

                    if (bestScore < myScore || pairId == 0)
                    {
                        bestScore = myScore;
                        pairId    = nextId;
                    }
                }

                last = pairId;
                Array.Clear(lastTags, 0, lastTags.Length);
                notPaired.Remove(pairId);
                res.Slides.Add(slides[pairId]);
            }

            return(res);
            // TODO: add consideration for (1) vertical slides, (2) order between pairs.
        }
예제 #3
0
        public static void Main()
        {
            var initialNumbers = NumbersGenerator.GenerateNumberArray(50);

            NumbersGenerator.ShuffleNumbers(initialNumbers);

            Console.WriteLine("Unsorted numbers\n" + string.Join(" ", initialNumbers) + Environment.NewLine);

            SelectionSorter.Sort(initialNumbers);

            Console.WriteLine("Sorted numbers\n" + string.Join(" ", initialNumbers));
        }
예제 #4
0
파일: Startup.cs 프로젝트: ekov1/Homeworks
        public static void Main()
        {
            var numbers = NumbersGenerator.GenerateNumberArray(50);

            NumbersGenerator.ShuffleNumbers(numbers);

            Console.WriteLine(string.Join(" ", numbers));

            var sortedNumbers = Utils.MergeSorter.Sort(numbers);

            Console.WriteLine(string.Join(" ", sortedNumbers));
        }
예제 #5
0
        public static void Main()
        {
            var numbers = NumbersGenerator.GenerateNumberArray(50);

            NumbersGenerator.ShuffleNumbers(numbers);

            Console.WriteLine(string.Join(" ", numbers));

            var sortedNumbers = QuickSorter.Sort(numbers);

            Console.WriteLine(string.Join(" ", sortedNumbers));

            //InsertionSorter.Sort(numbers);
            //Console.WriteLine(string.Join(" ", numbers));
        }
예제 #6
0
        public static void Main()
        {
            var numbers   = NumbersGenerator.GenerateNumberArray(1000);
            var testCount = 100;

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            for (int i = 0; i < testCount; i++)
            {
                NumbersGenerator.ShuffleNumbers(numbers);
                QuickSorter.Sort(numbers, true);
            }

            Console.WriteLine(stopwatch.Elapsed);
        }