public void EnqueueDequeue_StableCheck_01()
        {
            var person1 = new Person()
            {
                Name = "p1", Age = 1
            };
            var person2 = new Person()
            {
                Name = "p1", Age = 2
            };

            Assert.AreEqual(person1.GetHashCode(), person2.GetHashCode());
            Assert.AreNotEqual(person1, person2);
            var hashq = new HashQueue <Person>();

            hashq.Enqueue(person1);
            hashq.Enqueue(person2);
            Assert.AreEqual(2, hashq.Count());
            Person temp;

            temp = hashq.Dequeue();
            Assert.AreSame(person1, temp);
            Assert.AreNotSame(person2, temp);
            Assert.AreEqual(1, hashq.Count());
            temp = hashq.Dequeue();
            Assert.AreSame(person2, temp);
            Assert.AreNotSame(person1, temp);
            Assert.AreEqual(0, hashq.Count());
        }
        public void IsEmpty01()
        {
            var hashq = new HashQueue <int>();

            Assert.IsTrue(hashq.IsEmpty());
            hashq.Enqueue(1);
            Assert.IsFalse(hashq.IsEmpty());
            hashq.Dequeue();
            Assert.IsTrue(hashq.IsEmpty());
            Assert.Throws <EmptyException>(() => hashq.Dequeue());
        }
        public void Dequeue01()
        {
            var hashq = new HashQueue <int>();

            hashq.Enqueue(1);
            hashq.Enqueue(1);
            Assert.AreEqual(2, hashq.Count());
            Assert.AreEqual(1, hashq.Dequeue());
            Assert.AreEqual(1, hashq.Count());
            Assert.AreEqual(1, hashq.Dequeue());
            Assert.AreEqual(0, hashq.Count());
        }
        public void EnqueueDequeue_StableCheck_02()
        {
            var hashq   = new HashQueue <Person>();
            var person1 = new Person()
            {
                Name = "p1", Age = 1
            };

            hashq.Enqueue(person1);
            hashq.Enqueue(person1);
            Assert.AreEqual(2, hashq.Count());
            Assert.AreSame(person1, hashq.Dequeue());
            Assert.AreEqual(1, hashq.Count());
            Assert.AreSame(person1, hashq.Dequeue());
            Assert.AreEqual(0, hashq.Count());
        }
示例#5
0
    private (int winner, long score) PlayRecursiveCombat_WithHashing(IEnumerable <int> deck1cards,
                                                                     IEnumerable <int> deck2cards)
    {
        var deck1 = new HashQueue(deck1cards);
        var deck2 = new HashQueue(deck2cards);
        var cache = new HashSet <(long, long)>();

        int GetRoundWinner(int card1, int card2)
        {
            if (card1 <= deck1.Count && card2 <= deck2.Count)
            {
                return(PlayRecursiveCombat_WithHashing(deck1.Take(card1), deck2.Take(card2)).winner);
            }
            return(card1 > card2 ? 1 : 2);
        }

        while (deck1.Any() && deck2.Any())
        {
            var state = (deck1.Hash, deck2.Hash);
            if (!cache.Add(state))
            {
                return(1, GetWinnerScore(deck1, deck2));
            }
            var card1      = deck1.Dequeue();
            var card2      = deck2.Dequeue();
            var winner     = GetRoundWinner(card1, card2);
            var winnerDeck = winner == 1 ? deck1 : deck2;
            winnerDeck.Enqueue(winner == 1 ? card1 : card2);
            winnerDeck.Enqueue(winner == 1 ? card2 : card1);
        }

        return(winner: deck1.Any() ? 1 : 2, GetWinnerScore(deck1, deck2));
    }
示例#6
0
    public override void _Process(float delta)
    {
        //Update visible chunks only when the player has moved a certain distance
        Vector3 playerPos = player.GetTranslation();

        if ((playerPos - playerPosLastUpdate).LengthSquared() > UPDATE_DISTANCE * UPDATE_DISTANCE)
        {
            playerPosLastUpdate = playerPos;
            UpdateVisibleChunks();
        }

        if (chunksToUpdate.Count > 0)
        {
            loadedChunks[chunksToUpdate.RemoveFirst()].Item1.UpdateMesh();
        }
        else if (chunksToRemove.Count > 0)
        {
            RemoveChunk(chunksToRemove.Dequeue());
        }
    }