Exemplo n.º 1
0
        public void IsSorted_CustomComparerWithNullEnumerable_ViolatesPrecondition()
        {
            // Arrange
            SCG.IEnumerable <int> enumerable = null;
            var comparer = ComparerFactory.CreateComparer <int>((x, y) => x.CompareTo(y));

            // Act & Assert
            // ReSharper disable once ExpressionIsAlwaysNull
            Assert.That(() => enumerable.IsSorted(comparer), Violates.PreconditionSaying(ArgumentMustBeNonNull));
        }
Exemplo n.º 2
0
        public void IsSorted_ReversedComparer_IsSortedInReverse(int[] array)
        {
            // Arrange
            var comparer = ComparerFactory.CreateComparer <int>((x, y) => y.CompareTo(x));

            // Act
            var isSorted = array.IsSorted(comparer);

            // Assert
            Assert.That(isSorted, Is.True);
        }
Exemplo n.º 3
0
        public void IsSorted_CustomComparer_IsNotSorted(int[] array)
        {
            // Arrange
            var comparer = ComparerFactory.CreateComparer <int>((x, y) => x.CompareTo(y));

            // Act
            var isSorted = array.IsSorted(comparer);

            // Assert
            Assert.That(isSorted, Is.False);
        }
Exemplo n.º 4
0
        // Fast for array lists and similar, but not stable; slow for linked lists

        public static ArrayList <int> GetPermutation1 <T>(IList <T> lst)
            where T : IComparable <T>
        {
            ArrayList <int> res = new ArrayList <int>(lst.Count);

            for (int i = 0; i < lst.Count; i++)
            {
                res.Add(i);
            }
            res.Sort(ComparerFactory <int> .CreateComparer((i, j) => lst[i].CompareTo(lst[j])));
            return(res);
        }
        public void Keys_returns_GuardedSorted()
        {
            var reverse = ComparerFactory <int> .CreateComparer((a, b) => a > b? -1 : 1);

            var source = new SortedArrayDictionary <int, string>(reverse)
            {
                [1] = "one",
                [2] = "two",
                [3] = "three"
            };

            var guarded = new GuardedSortedDictionary <int, string>(source);

            Assert.IsAssignableFrom <GuardedSorted <int> >(guarded.Keys);
        }
        public void Values_returns_Values()
        {
            var reverse = ComparerFactory <int> .CreateComparer((a, b) => a > b? -1 : 1);

            var source = new SortedArrayDictionary <int, string>(reverse)
            {
                [1] = "one",
                [2] = "two",
                [3] = "three"
            };

            var guarded = new GuardedSortedDictionary <int, string>(source);

            CollectionAssert.AreEquivalent(new[] { "one", "two", "three" }, guarded.Values);
        }
Exemplo n.º 7
0
        private IPriorityQueue <int> InitializePriorityQueue()
        {
            IComparer <int> weightComparer = ComparerFactory <int> .CreateComparer(
                (a, b) => _distance[a].CompareTo(_distance[b]));

            IPriorityQueue <int> priorityQueue =
                new IntervalHeap <int>(weightComparer);

            _queueItemHandles = new IPriorityQueueHandle <int> [_nodes.Count];
            for (var i = 0; i < _nodes.Count; i++)
            {
                IPriorityQueueHandle <int> itemHandle = null;
                priorityQueue.Add(ref itemHandle, i);

                _queueItemHandles[i] = itemHandle;
            }

            return(priorityQueue);
        }
Exemplo n.º 8
0
        public static void Main(String[] args)
        {
            // SortedArray<Object> sarr = new SortedArray<Object>();
            var lexico = ComparerFactory <Rec <string, int> > .CreateComparer(
                (r1, r2) =>
            {
                int order = r1.X1.CompareTo(r2.X1);
                return(order == 0 ? r1.X2.CompareTo(r2.X2) : order);
            }
                );

            SortedArray <Rec <string, int> > sarr = new SortedArray <Rec <string, int> >(lexico);

            sarr.Add(new Rec <string, int>("ole", 32));
            sarr.Add(new Rec <string, int>("hans", 77));
            sarr.Add(new Rec <string, int>("ole", 63));
            foreach (Rec <string, int> r in sarr)
            {
                Console.WriteLine(r);
            }
        }
Exemplo n.º 9
0
        public static void Main()
        {
            var lexico = ComparerFactory <Rec <string, int> > .CreateComparer(
                (r1, r2) =>
            {
                int order = r1.X1.CompareTo(r2.X1);
                return(order == 0 ? r1.X2.CompareTo(r2.X2) : order);
            }
                );

            SortedArray <Rec <string, int> > sarr = new SortedArray <Rec <string, int> >(lexico)
            {
                new Rec <string, int>("ole", 32),
                new Rec <string, int>("hans", 77),
                new Rec <string, int>("ole", 63)
            };

            foreach (var r in sarr)
            {
                Console.WriteLine(r);
            }
        }
Exemplo n.º 10
0
        static void PrintMostCommon(int maxWords, string filename)
        {
            var wordbag   = new HashBag <string>();
            var delimiter = new Regex("[^a-zA-Z0-9]+");

            using (var reader = File.OpenText(filename))
            {
                for (var line = reader.ReadLine(); line != null; line = reader.ReadLine())
                {
                    foreach (var s in delimiter.Split(line))
                    {
                        if (s != "")
                        {
                            wordbag.Add(s);
                        }
                    }
                }
            }
            var frequency = wordbag.ItemMultiplicities().ToArray();

            Sorting.IntroSort(frequency, 0, frequency.Length,
                              // Lexicographic ordering: decreasing frequency, then increasing string
                              ComparerFactory <KeyValuePair <string, int> > .CreateComparer(
                                  (p1, p2) =>
            {
                int major = p2.Value.CompareTo(p1.Value);
                return(major != 0 ? major : p1.Key.CompareTo(p2.Key));
            }));
            var stop = Math.Min(frequency.Length, maxWords);

            for (var i = 0; i < stop; i++)
            {
                var p = frequency[i];
                Console.WriteLine("{0,4} occurrences of {1}", p.Value, p.Key);
            }
        }
Exemplo n.º 11
0
 private static SCG.IComparer <T> ReverseComparer <T>(SCG.IComparer <T> cmp)
 {
     return(ComparerFactory <T> .CreateComparer((item1, item2) => cmp.Compare(item2, item1)));
 }
Exemplo n.º 12
0
        public static void Main()
        {
            //var eq = new C6.ComparerFactory.EqualityComparer<string>(ReferenceEquals,
            //    SCG.EqualityComparer<string>.Default.GetHashCode);

            //var items = new[] { "-8", "Ab", "6", "-4", "5", "-2", "-1", "1", "10", "8" };
            //var al = new ArrayList<string>(items);
            //var v1 = al.View(al.Count - 2, 2);
            //var v2 = al.View(al.Count - 2, 2);

            var items      = new[] { "-8", "Ab", "6", "-4", "5", "-2", "-1", "1", "10", "8" };
            var collection = new HashedArrayList <string>(items);

            Console.WriteLine(collection.Contains("10"));
            Console.WriteLine(collection.Add("10"));



            // BUG: Sorting
            //var items = new[] { "-8", "Ab", "6", "-4", "5", "-2", "-1", "1", "10", "8" };
            //var collection = new HashedLinkedList<string>(items);

            //var v0 = collection.View(0, 2);
            //var v2 = collection.View(1, 2);
            //var v4 = collection.View(4, 2);
            //var v6 = collection.View(7, 1);
            //var vCount2 = collection.View(collection.Count - 2, 2);

            //Console.WriteLine("Views before calling Sort()");
            //Console.WriteLine($"v0 = {v0}");
            //Console.WriteLine($"v2 = {v2}");
            //Console.WriteLine($"v4 = {v4}");
            //Console.WriteLine($"v6 = {v6}");
            //Console.WriteLine($"vCount2 = {vCount2}");

            //v4.Sort();

            //Console.WriteLine("Views after calling Sort()");
            //Console.WriteLine($"v0 = {v0}");
            //Console.WriteLine($"v2 = {v2}");
            //Console.WriteLine($"v4 = {v4}");
            //Console.WriteLine($"v6 = {v6}");
            //Console.WriteLine($"vCount2 = {vCount2}");



            // ==============================
            // RemoveRange
            //var items = new[] { "8", "Ab", "3", "4", "5", "6", "7", "9" };
            //var collection = new ArrayList<string>(items);
            //var view1 = collection.View(0, 1); // longer
            //var view2 = collection.View(0, 2);
            //var item = view1.Choose();
            //var itms = new ArrayList<string>(new[] { item });

            //view1.RemoveRange(itms);
            //Console.WriteLine(view2);


            //var items = new[] { "8", "Ab", "3", "4", "5", "6", "7", "9" };
            // HLL.Reverse
            //var items = new[] { "a", "b", "c", "d", "e" };
            //var linkedList = new ArrayList<string>(items);
            //var v1 = linkedList.View(0, linkedList.Count);
            //var v2 = linkedList.View(0, 2);
            //v1.Reverse();
            //v1.Reverse();
            //Console.WriteLine(v2);

            // HLL.Sort
            //var items = new[] { "b", "a", "c", "e", "d" };
            //var linkedList = new HashedLinkedList<string>(items);
            //var v1 = linkedList.View(0, 3);
            //var v2 = linkedList.View(3, 2);
            //v1.Sort();
            //Console.WriteLine(v1);
            //Console.WriteLine(v2);

            // HAL.Add()
            //var items = new[] { "8", "Ab", "3", "4", "5", "6", "7", "9" };
            //var arrayList = new LinkedList<string>(items);
            //var v1 = arrayList.View(0, 7);
            //var v2 = arrayList.View(0, 7);
            //v1.Add("333333333");
            //Console.WriteLine(v1);
            //Console.WriteLine(v2);


            //Console.WriteLine(view1.IsValid);
            //Console.WriteLine(view);
            //Console.WriteLine(collection);



            return;

            // Construct list using collection initializer
            //var list = new ArrayList<int>() { 2, 3, 5, 5, 7, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33};
            var list = new ArrayList <int>()
            {
                2, 3
            };
            var backList = list.Backwards();

            backList.ToList().ForEach(x => Console.Write(x + ", "));
            Console.WriteLine(backList.IsValid);

            list.Add(10);
            Console.WriteLine(backList.IsValid);
            //backList.ToList().ForEach(x => Console.Write(x));


            //var list = list1.View(2, list1.Count-2);
            //var v = list.View(3,4);
            //var v2 = v.View(1, 2);
            //var items = new ArrayList<int>() { 3, 13, 7, 17};
            //Console.WriteLine(ArrayList<int>.EmptyArray);



            var dupl = list.FindDuplicates(5);

            Console.WriteLine(dupl);
            list.Add(-100);
            var arr = dupl.ToArray();

            list.Dispose();



            //en.ToList().ForEach(x => Console.WriteLine(x));


            //Console.WriteLine(v);
            //Console.WriteLine(v2);
            //Console.WriteLine(list);

            return;

            // Get index of item
            var index = list.IndexOf(23);

            // Get an index range
            var range = list.GetIndexRange(index, 4);

            // Print range in reverse order
            foreach (var prime in range.Backwards())
            {
                Console.WriteLine(prime);
            }

            // Remove items within index range
            list.RemoveIndexRange(10, 3);

            // Remove item at index
            var second = list.RemoveAt(1);

            // Remove first item
            var first = list.RemoveFirst();

            // Remove last item
            var last = list.RemoveLast();

            // Create array with items in list
            var array = list.ToArray();

            // Clear list
            list.Clear();

            // Check if list is empty
            var isEmpty = list.IsEmpty;

            // Add item
            list.Add(first);

            // Add items from enumerable
            list.AddRange(array);

            // Insert item into list
            list.Insert(1, second);

            // Add item to the end
            list.Add(last);

            // Check if list is sorted
            var isSorted = list.IsSorted();

            // Reverse list
            list.Reverse();

            // Check if list is sorted
            var reverseComparer = ComparerFactory.CreateComparer <int>((x, y) => y.CompareTo(x));

            isSorted = list.IsSorted(reverseComparer);

            // Shuffle list
            var random = new Random(0);

            list.Shuffle(random);

            // Print list using indexer
            for (var i = 0; i < list.Count; i++)
            {
                Console.WriteLine($"{i,2}: {list[i],2}");
            }

            // Check if list contains all items in enumerable
            var containsRange = list.ContainsRange(array);

            // Construct list using enumerable
            var otherList = new ArrayList <int>(array);

            // Add every third items from list
            otherList.AddRange(list.Where((x, i) => i % 3 == 0));

            containsRange = list.ContainsRange(otherList);

            // Remove all items not in enumerable
            otherList.RetainRange(list);

            // Remove all items in enumerable from list
            list.RemoveRange(array);

            // Sort list
            list.Sort();

            // Copy to array
            list.CopyTo(array, 2);

            return;
        }
Exemplo n.º 13
0
        public IPath AStar(Graph graph, INode start, INode destination)
        {
            // this is more or less copy pasted from wikipedia, this is definitely not optimized
            //
            // now there's actually a PriorityQueue used, however I doubt it to be actually performant.
            //
            // reference:
            // https://en.wikipedia.org/wiki/A*_search_algorithm#Pseudocode

            var closedList = new List <INode>();

            // var openList = new List<INode> {start};

            // openList.Comparer = null;

            var cameFrom = new Dictionary <INode, INode>();

            var gScore = new Dictionary <INode, float>();

            var fScore = new Dictionary <INode, float>();

            // ReSharper disable once ConvertToLocalFunction
            // converting to local function does not work
            Func <INode, INode, int> compareFunc = (a, b) => (int)fScore[a] > (int)fScore[b] ? 1 : (int)fScore[a] < (int)fScore[b] ? -1 : 0;

            var openList = new IntervalHeap <INode>(ComparerFactory <INode> .CreateComparer(compareFunc))
            {
                start
            };

            foreach (var node in graph.GetNodes())
            {
                gScore[node] = int.MaxValue;
                fScore[node] = int.MaxValue;
            }

            gScore[start] = 0f;

            fScore[start] = HeuristicCostEstimate(start, destination);

            while (openList.Count > 0)
            {
                var current = openList.DeleteMin();

                // current can never be null from my short amount of thinking about it (if actual arguments are given)

                Debug.Assert(current != null, "pathFinding failed.");
                if (current.Equals(destination))
                {
                    return(ReconstructPath(cameFrom, current));
                }

                closedList.Add(current);
                foreach (var outgoing in current.GetOutwardsEdges())
                {
                    var neighbor = outgoing.GetChild();

                    if (neighbor == null || ((Road)outgoing).Blueprint)
                    {
                        continue;
                    }

                    if (closedList.Contains(neighbor))
                    {
                        continue;
                    }

                    if (!openList.Contains(neighbor))
                    {
                        openList.Add(neighbor);
                    }

                    var tentativeGScore = gScore[current] + outgoing.GetCost();

                    if (tentativeGScore >= gScore[neighbor])
                    {
                        continue;
                    }

                    cameFrom[neighbor] = current;
                    gScore[neighbor]   = tentativeGScore;
                    fScore[neighbor]   = gScore[neighbor] + HeuristicCostEstimate(neighbor, destination);
                }
                foreach (var outgoing in current.GetInwardsEdges())
                {
                    var neighbor = outgoing.GetParent();

                    if (neighbor == null || ((PlatformBlank)neighbor).mBlueprint)
                    {
                        continue;
                    }

                    if (closedList.Contains(neighbor))
                    {
                        continue;
                    }

                    if (!openList.Contains(neighbor))
                    {
                        openList.Add(neighbor);
                    }

                    var tentativeGScore = gScore[current] + outgoing.GetCost();

                    if (tentativeGScore >= gScore[neighbor])
                    {
                        continue;
                    }

                    cameFrom[neighbor] = current;
                    gScore[neighbor]   = tentativeGScore;
                    fScore[neighbor]   = gScore[neighbor] + HeuristicCostEstimate(neighbor, destination);
                }
            }
            return(null);
        }
Exemplo n.º 14
0
 public bool Satisfies(Task task)
 {
     return(ComparerFactory.CreateComparer(OperatorType).Compare(Value, ValueSelector(task)));
 }
Exemplo n.º 15
0
 static SCG.IComparer <Rec <string, int> > Lexico2() => ComparerFactory <Rec <string, int> > .CreateComparer((item1, item2) =>
 {
     var major = item1.X1.CompareTo(item2.X1);
     return(major != 0 ? major : item1.X2.CompareTo(item2.X2));
 });
Exemplo n.º 16
0
 static SCG.IComparer <T> ReverseComparer <T>(SCG.IComparer <T> cmp) => ComparerFactory <T> .CreateComparer((item1, item2) => cmp.Compare(item2, item1));
Exemplo n.º 17
0
        public void Main()
        {
            // Construct list using collection initializer
            var list = new ArrayList <int> {
                2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
            };

            // Get index of item
            var index = list.IndexOf(23);

            // Get an index range
            var range = list.GetIndexRange(index, 4);

            // Print range in reverse order
            foreach (var prime in range.Backwards())
            {
                Console.WriteLine(prime);
            }

            // Remove items within index range
            list.RemoveIndexRange(10, 3);

            // Remove item at index
            var second = list.RemoveAt(1);

            // Remove first item
            var first = list.RemoveFirst();

            // Remove last item
            var last = list.RemoveLast();

            // Create array with items in list
            var array = list.ToArray();

            // Clear list
            list.Clear();

            // Check if list is empty
            var isEmpty = list.IsEmpty;

            // Add item
            list.Add(first);

            // Add items from enumerable
            list.AddRange(array);

            // Insert item into list
            list.Insert(1, second);

            // Add item to the end
            list.Add(last);

            // Check if list is sorted
            var isSorted = list.IsSorted();

            // Reverse list
            list.Reverse();

            // Check if list is sorted
            var reverseComparer = ComparerFactory.CreateComparer <int>((x, y) => y.CompareTo(x));

            isSorted = list.IsSorted(reverseComparer);

            // Shuffle list
            var random = new Random(0);

            list.Shuffle(random);

            // Print list using indexer
            for (var i = 0; i < list.Count; i++)
            {
                Console.WriteLine($"{i,2}: {list[i],2}");
            }

            // Check if list contains all items in enumerable
            var containsRange = list.ContainsRange(array);

            // Construct list using enumerable
            var otherList = new ArrayList <int>(array);

            // Add every third items from list
            otherList.AddRange(list.Where((x, i) => i % 3 == 0));

            containsRange = list.ContainsRange(otherList);

            // Remove all items not in enumerable
            otherList.RetainRange(list);

            // Remove all items in enumerable from list
            list.RemoveRange(array);

            // Sort list
            list.Sort();

            // Copy to array
            list.CopyTo(array, 2);

            return;
        }