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