Example #1
0
    public void StartRandom()
    {
        System.Random ran = new System.Random();
        ran.Shuffle(mainArray);
        ran.Shuffle(subArray);

        setText(MainText, mainArray, 6);
        setText(SubText, subArray, 1);
    }
        public List <CardData> GetCards()
        {
            if (cards.Count <= 8)
            {
                return(cards);
            }

            Random random = new Random();

            int[] targetNumbers = new int[numberOfItems];
            for (int i = 0; i < numberOfItems; i++)
            {
                targetNumbers[i] = random.Next(timeRanges.First().start, timeRanges.Last().end);
            }

            List <CardData> clampedCards = cards
                                           .Where(x => x.value >= timeRanges.First().start&&
                                                  x.value <= timeRanges.Last().end)
                                           .ToList();

            CardData[] returnCards = new CardData[numberOfItems];
            for (int i = 0; i < numberOfItems; i++)
            {
                CardData card = clampedCards.OrderBy(n => Math.Abs(n.value - targetNumbers[i])).First();
                returnCards[i] = card;
                clampedCards.Remove(card);                 // Make sure no duplicate cards happen
            }

            random.Shuffle(returnCards);

            return(returnCards.ToList().GetRange(0, numberOfItems));
        }
Example #3
0
    void Start()
    {
        int[] indices = new int[_size * _size - 1];
        for (int i = 0; i < indices.Length; i++)
        {
            indices[i] = i;
        }

        if (_randomize)
        {
            System.Random rng = new System.Random();
            rng.Shuffle(indices);
        }

        for (int row = 0; row < _size; row++)
        {
            for (int col = 0; col < _size; col++)
            {
                int i = row * _size + col;
                if (i < (_size * _size - 1))
                {
                    Tile tile = Instantiate(_tilePrefab).GetComponent <Tile>();
                    tile.Index = indices[i];
                    tile.Row   = row;
                    tile.Col   = col;

                    _tiles[tile.Index] = tile;
                    UpdateTile(tile);
                }
            }
        }
    }
Example #4
0
    public void Start()
    {
        Shelf[]       randomizedShelves = shelves;
        System.Random rng = new System.Random();
        rng.Shuffle(randomizedShelves);

        SpawnProduct(randomizedShelves);
        shelves = new Shelf[0];

        Transform[] randomizeStacks = stacks;
        rng = new System.Random();
        rng.Shuffle(randomizeStacks);
        for (int i = 0; i < stacks.Length; i++)
        {
            if (i < standsWithPaperCount)
            {
                SpawnStack(productPrefabs[0], 5, stacks[i].position);
            }
            else
            {
                Destroy(stacks[i].gameObject);
            }
        }
        stacks = new Transform[0];
    }
Example #5
0
 private void RandomGenerator()
 {
     GameObject[] nextBag = random.Shuffle(tetriminos);
     for (int i = 0; i < nextBag.Length; i++)
     {
         generatedQueue.Enqueue(nextBag[i]);
     }
 }
        //shuffles the choices, but ensuring the answer is at answer index (between 0 and 4[exclusive])
        public List <String> ShuffleChoicesAndAnswer(int answerIndex)
        {
            List <string> temp = new List <string>(choices);

            System.Random rng = new System.Random();
            rng.Shuffle(temp);
            temp.Insert(answerIndex, answer);
            return(temp);
        }
        public void FromHexString()
        {
            Random random = new Random();

            string value;

            {
                byte[] buffer = new byte[32];
                random.NextBytes(buffer);

                value = NetworkConverter.ToHexString(buffer);
            }

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            for (int i = 0; i < 1024 * 1024 * 2; i++)
            {
                byte[] result1 = null;
                byte[] result2 = null;

                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        result1 = NetworkConverter.FromHexString(value);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        result2 = NetworkConverter.FromHexString_2(value);
                        sw2.Stop();
                    }
                }

                Assert.IsTrue(Unsafe.Equals(result1, result2));
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("FromHexString: " + sw1.Elapsed.ToString());
            sb.AppendLine("FromHexString_2: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
        public void Copy()
        {
            Random random = new Random();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            var length = 1024 * 256;
            byte[] x1 = new byte[length];
            byte[] y1 = new byte[length];
            byte[] x2 = new byte[length];
            byte[] y2 = new byte[length];

            random.NextBytes(x1);
            random.NextBytes(x2);

            for (int i = 0; i < 1024 * 256; i++)
            {
                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        Unsafe.Copy(x1, 0, y1, 0, length);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        Array.Copy(x2, 0, y2, 0, length);
                        sw2.Stop();
                    }
                }

                Assert.IsTrue(Unsafe.Equals(x1, y1));
                Assert.IsTrue(Unsafe.Equals(x2, y2));
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Native Copy: " + sw1.Elapsed.ToString());
            sb.AppendLine("Array Copy: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
Example #9
0
        public List <int> PrepareSampleSpace(List <int> space, SampleMethod samplemethod)
        {
            switch (samplemethod)
            {
            case SampleMethod.Descending:
                space.Reverse();
                break;

            case SampleMethod.UniformWithoutReplacement:
                space = rng.Shuffle(space);
                break;

            default:
                break;
            }
            return(space);
        }
        public void ToHexString()
        {
            Random random = new Random();

            byte[] value = new byte[32];
            random.NextBytes(value);

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            for (int i = 0; i < 1024 * 1024 * 2; i++)
            {
                string result1 = null;
                string result2 = null;

                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        result1 = NetworkConverter.ToHexString(value, 0, value.Length);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        result2 = NetworkConverter.ToHexString_2(value, 0, value.Length);
                        sw2.Stop();
                    }
                }

                Assert.IsTrue(result1 == result2);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("ToHexString: " + sw1.Elapsed.ToString());
            sb.AppendLine("ToHexString_2: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
        public void Crc32_Castagnoli()
        {
            Random random = new Random();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            var length = 1024;
            byte[] value = new byte[length];

            for (int i = 0; i < 1024 * 1024; i++)
            {
                byte[] result1 = null;
                byte[] result2 = null;

                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        result1 = Library.Security.Crc32_Castagnoli.ComputeHash(value, 0, length);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        result2 = T_Crc32_Castagnoli.ComputeHash(value, 0, length);
                        sw2.Stop();
                    }
                }

                Assert.IsTrue(Unsafe.Equals(result1, result2));
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Unsafe Crc32_Castagnoli: " + sw1.Elapsed.ToString());
            sb.AppendLine("Managed Crc32_Castagnoli: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
Example #12
0
    private void Awake()
    {
        var      playerName         = string.IsNullOrWhiteSpace(GetName.PlayerName) ? "Quandary" : GetName.PlayerName;
        JsonData json               = JsonMapper.ToObject(contentJson.text);
        var      characterModelList = new List <CharacterModel>();

        foreach (JsonData characterJson in json)
        {
            var characterModel = new CharacterModel();
            characterModel.ParseJson(characterJson, playerName);
            characterModelList.Add(characterModel);
        }

        characterModels = characterModelList.ToArray();
        characters      = GetComponentsInChildren <Character>();
        rnd             = new Random(GetName.NameSeed);
        rnd.Shuffle(characterModels);
        menuDialog.SetActive(false);
    }
Example #13
0
        public static void Main(string[] args)
        {
            System.Random TempRand = new System.Random();
            Configuration Config = new Configuration(args);
            using (var Bootstrapper = Utilities.IoC.Manager.Bootstrapper)
            {
                IEnumerable<IDataFormatter> Formatters = Bootstrapper.ResolveAll<IDataFormatter>();
                if (Formatters.Count() == 0)
                {
                    Console.WriteLine("No formatters found.");
                    return;
                }
                IEnumerable<ITimedTask> TimedTasks = TempRand.Shuffle(Bootstrapper.ResolveAll<ITimedTask>());
                if (TimedTasks.Count() == 0)
                {
                    Console.WriteLine("No tasks found.");
                    return;
                }

                using (var Profiler = Manager.StartProfiling())
                {
                    foreach (ITimedTask Task in TimedTasks)
                    {
                        for (int x = 0; x < Config.NumberIterations; ++x)
                        {
                            using (var Timer = Manager.Profile(Task.Name))
                            {
                                Task.Run();
                            }
                        }
                    }
                }
                var Result = Manager.StopProfiling(false);
                var Results = Result.Children
                                    .ForEach(x => new Result(x.Value.Entries, x.Key))
                                    .ToLookup(x => TimedTasks.FirstOrDefault(y => string.Equals(y.Name, x.Name, StringComparison.Ordinal))
                                                             .GetType()
                                                             .Attribute<SeriesAttribute>() as ISeries ?? new SeriesAttribute(""),
                                              x => x);
                Formatters.ForEach(x => x.Format(Results, Config.OutputDirectory));
            }
        }
        public override bool RunProcess()
        {
            bool moved = false;

            isVisited[currCellX, currCellY, 0] = true;

            // Set the order to check for moving forward
            //TODO: Maybe have different ways to randomize the dirs
            //      Such as weighting toward straight movement, left turns, etc
            rand.Shuffle(dirs);

            // Attempt to move forward
            for (int i = 0; i < dirs.Length; i++)
            {
                // If valid forward move
                if (CanMoveInDir(dirs[i], map, isVisited))
                {
                    // Move forward
#if LOG_DEBUG
                    Debug.Log("Moving forward with dir: " + dirs[i].ToString());
#endif
                    MoveInDir(dirs[i], map);
                    previousPath.Push(dirs[i]);
                    moved = true;
                    break;
                }
            }

            // Could not move forward, attempt to move backward
            if (!moved && previousPath.Count > 0)
            {
#if LOG_DEBUG
                Debug.Log("Moving backward with dir opposite of: " + previousPath.Peek().ToString());
#endif
                MoveInReverseDir(previousPath.Pop());
                moved = true;
            }

            return(moved);
        }
        public void Equals()
        {
            Random random = new Random();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            for (int i = 0; i < 1024; i++)
            {
                byte[] x;
                byte[] y;

                if (random.Next(0, 2) == 0)
                {
                    var length = random.Next(0, 1024 * 256);
                    x = new byte[length];
                    y = new byte[length];
                }
                else
                {
                    x = new byte[random.Next(0, 1024 * 256)];
                    y = new byte[random.Next(0, 1024 * 256)];
                }

                if (random.Next(0, 3) == 0)
                {
                    random.NextBytes(x);
                    random.NextBytes(y);
                }

                for (int j = 0; j < 32; j++)
                {
                    bool result1 = false;
                    bool result2 = false;

                    random.Shuffle(flags);
                    foreach (var index in flags)
                    {
                        if (index == 0)
                        {
                            sw1.Start();
                            result1 = Unsafe.Equals(x, y);
                            sw1.Stop();
                        }
                        else if (index == 1)
                        {
                            sw2.Start();
                            result2 = Benchmark.Equals(x, y);
                            sw2.Stop();
                        }
                    }

                    Assert.IsTrue(result1 == result2);
                }
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Native Equals: " + sw1.Elapsed.ToString());
            sb.AppendLine("Unsafe Equals: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
Example #16
0
 public static void Shuffle <T>(this Random self, List <T> list)
 {
     self.Shuffle(list, list.Count);
 }
            internal WriteThreadsTest(int num_values=10, int checkpoint_interval_rowcount=50, bool withMerge=false)
            {
                System.GC.Collect();
                db = new LayerManager(InitMode.NEW_REGION, "c:\\BENDtst\\11");
                // db.startMaintThread();
                this.checkpoint_interval = checkpoint_interval_rowcount;
                this.withMerge = withMerge;

                // init sequential data-values...
                datavalues = new int[num_values];
                for (int i = 0; i < num_values; i++) {
                    datavalues[i] = i;
                }

                // then shuffle them..
                Random rnd = new Random();
                rnd.Shuffle(datavalues);
            }
Example #18
0
    private void PlaceWifiPoints()
    {
        //Debug.Log("Starting placing wifi points");
        int childCount = transform.childCount;

        for (int i = 1; i < childCount; i++)
        {
            DestroyImmediate(transform.GetChild(1).gameObject);
        }

        int totalAmount = mSquareAmount * mSquareAmount;

        //Random IDs for random masking
        float[]      ids      = new float[totalAmount];
        List <float> test     = new List <float>(5);
        float        fraction = 1f / (totalAmount - 1);

        for (int i = 0; i < totalAmount; i++)
        {
            ids[i] = fraction * i;
        }
        System.Random rnd = new System.Random();
        rnd.Shuffle <float>(ids);
        //Debug.Log("IDs after randomization:" + ids.ToString());

        List <WifiPoint> wifiPoints = new List <WifiPoint>(totalAmount);

        #region Random Placing
        float   singleDistance = 1f / (mSquareAmount - 1) * mDistance * 2;
        Vector3 startingPoint  = transform.position - mDistance * Vector3.right - mDistance * Vector3.forward;
        for (int i = 0; i < mSquareAmount; i++)
        {
            for (int j = 0; j < mSquareAmount; j++)
            {
                float randomX = mOffsetIntensityCurve.Evaluate(Random.value) * mRandomMaxOffset * (Random.value < 0.5 ? -1 : 1);
                float randomZ = mOffsetIntensityCurve.Evaluate(Random.value) * mRandomMaxOffset * (Random.value < 0.5 ? -1 : 1);

                Vector3   actualPosition = startingPoint + Vector3.right * (singleDistance * (j + randomX)) + Vector3.forward * (singleDistance * (i + randomZ));
                WifiPoint newPoint       = Instantiate(mPrefab, actualPosition, Quaternion.identity, transform).GetComponent <WifiPoint>();
                newPoint.mIDMask    = ids[i * mSquareAmount + j];
                newPoint.mIDCounter = i * mSquareAmount + j;
                wifiPoints.Add(newPoint);
                //Debug.LogFormat("Placed a new point at {0} with ID {1}, actual number {2}", actualPosition, newPoint.mIDMask, i * mSquareAmount + j);
            }
        }
        #endregion

        #region Random Masking
        for (int i = 0; i < wifiPoints.Count; i++)
        {
            if (wifiPoints[i].mIDMask < mRandomMask)
            {
                //Debug.LogFormat("Destroying the point number {0} with an ID of {1}", i, wifiPoints[i].mIDMask);
                DestroyImmediate(wifiPoints[i].gameObject);
                wifiPoints.RemoveAt(i);
                i--;
            }
        }

        #endregion

        #region Removing points too close one another
        RaycastHit[] hitInfos;
        for (int i = 0; i < wifiPoints.Count; i++)
        {
            hitInfos = Physics.SphereCastAll(wifiPoints[i].transform.position, mMinDistanceBetweenPoints, Vector3.up, 0.1f, _WifiLayerMask);
            foreach (RaycastHit hit in hitInfos)
            {
                WifiPoint wifiRef = hit.collider.GetComponent <WifiPoint>();
                int       ID      = wifiRef.mIDCounter;
                //Debug.LogFormat("Point {0} was too close so it's been removed", ID);
                DestroyImmediate(hit.collider.gameObject);
                wifiPoints.Remove(wifiRef);
            }
        }
        #endregion

        #region Removing pounts out of range distance
        Vector2 maxXranges = Vector2.one * transform.position.x - Vector2.right * mDistance + Vector2.up * mDistance;
        Vector2 maxZranges = Vector2.one * transform.position.z - Vector2.right * mDistance + Vector2.up * mDistance;
        for (int i = 0; i < wifiPoints.Count; i++)
        {
            if (!maxXranges.WithinRange(wifiPoints[i].transform.position.x) || !maxZranges.WithinRange(wifiPoints[i].transform.position.z))
            {
                int ID = wifiPoints[i].mIDCounter;
                DestroyImmediate(wifiPoints[i].gameObject);
                wifiPoints.RemoveAt(i);
                i--;
                //Debug.LogFormat("Removed point {0} because it was out of range", ID);
            }
        }
        #endregion

        #region Link points
        float     closestDistance = Vector3.Distance(wifiPoints[0].transform.position, transform.position);
        WifiPoint closestPoint    = wifiPoints[0];
        for (int i = 0; i < wifiPoints.Count; i++)
        {
            WifiPoint currentPoint = wifiPoints[i];
            if (i != 0)
            {
                float currentDistance = Vector3.Distance(wifiPoints[i].transform.position, transform.position);
                if (currentDistance < closestDistance)
                {
                    closestDistance = currentDistance;
                    closestPoint    = wifiPoints[i];
                }
            }
            List <WifiPoint> currentLinkedPoints = new List <WifiPoint>();
            for (int j = 0; j < wifiPoints.Count; j++)
            {
                WifiPoint currentSubPoint = wifiPoints[j];
                if (j != i && Vector3.Distance(currentSubPoint.transform.position, currentPoint.transform.position) < mMaxDistanceLinkBetweenPoints)
                {
                    currentLinkedPoints.Add(currentSubPoint);
                }
            }
            currentPoint.mWifiPoints = currentLinkedPoints;
        }

        sClosestWifiPoint = closestPoint;
        #endregion
    }
Example #19
0
        public void Xor()
        {
            Random random = new Random();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            for (int i = 0; i < 1024 * 4; i++)
            {
                byte[] x;
                byte[] y;

                if (random.Next(0, 2) == 0)
                {
                    var length = random.Next(0, 1024 * 256);
                    x = new byte[length];
                    y = new byte[length];
                }
                else
                {
                    x = new byte[random.Next(0, 1024 * 256)];
                    y = new byte[random.Next(0, 1024 * 256)];
                }

                random.NextBytes(x);
                random.NextBytes(y);

                byte[] result1 = new byte[Math.Min(x.Length, y.Length)];
                byte[] result2 = new byte[Math.Min(x.Length, y.Length)];

                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        Unsafe.Xor(x, y, result1);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        Benchmark.Xor(x, y, result2);
                        sw2.Stop();
                    }
                }

                Assert.IsTrue(Unsafe.Equals(result1, result2));
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Unsafe Xor: " + sw1.Elapsed.ToString());
            sb.AppendLine("Managed Xor: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
Example #20
0
 public static void Shuffle <T>(this Random self, T[] array)
 {
     self.Shuffle(array, array.Length);
 }
        public void Compare()
        {
            Random random = new Random();

            Stopwatch totalStopwatch = new Stopwatch();
            totalStopwatch.Start();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();
            Stopwatch sw3 = new Stopwatch();
            Stopwatch sw4 = new Stopwatch();

            var flags = new int[] { 0, 1, 2, 3 };

            for (int i = 0; i < 1024 * 256 * 32; i++)
            {
                byte[] x;
                byte[] y;

                if (random.Next(0, 2) == 0)
                {
                    var length = random.Next(0, 1024);
                    x = new byte[length];
                    y = new byte[length];
                }
                else
                {
                    x = new byte[random.Next(0, 1024)];
                    y = new byte[random.Next(0, 1024)];
                }

                if (random.Next(0, 2) == 0)
                {
                    random.NextBytes(x);
                    random.NextBytes(y);
                }

                int result1 = 0;
                int result2 = 0;
                int result3 = 0;
                int result4 = 0;

                var maxLength = Math.Min(x.Length, y.Length);

                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        result1 = Unsafe.Compare(x, y);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        result2 = Unsafe.Compare2(x, y);
                        sw2.Stop();
                    }
                    else if (index == 2)
                    {
                        sw3.Start();
                        result3 = Unsafe.Compare(x, 0, y, 0, maxLength);
                        sw3.Stop();
                    }
                    else if (index == 3)
                    {
                        sw4.Start();
                        result4 = Unsafe.Compare2(x, 0, y, 0, maxLength);
                        sw4.Stop();
                    }
                }

                Assert.IsTrue(result1 == result2);
                Assert.IsTrue(result3 == result4);

                if (totalStopwatch.ElapsedMilliseconds > 1000 * 60) break;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Native Compare: " + sw1.Elapsed.ToString());
            sb.AppendLine("Native Compare2: " + sw2.Elapsed.ToString());
            sb.AppendLine("Native Compare: " + sw3.Elapsed.ToString());
            sb.AppendLine("Native Compare2: " + sw4.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
        private void DownloadManagerThread()
        {
            Random random = new Random();
            int round = 0;

            for (; ; )
            {
                Thread.Sleep(1000 * 3);
                if (this.State == ManagerState.Stop) return;

                BackgroundDownloadItem item = null;

                try
                {
                    lock (this.ThisLock)
                    {
                        if (_settings.BackgroundDownloadItems.Count > 0)
                        {
                            {
                                var items = _settings.BackgroundDownloadItems
                                   .Where(n => n.State == BackgroundDownloadState.Downloading)
                                   .Where(x =>
                                   {
                                       if (x.Rank == 1) return 0 == (!_cacheManager.Contains(x.Seed.Key) ? 1 : 0);
                                       else return 0 == (x.Index.Groups.Sum(n => n.InformationLength) - x.Index.Groups.Sum(n => Math.Min(n.InformationLength, _existManager.GetCount(n))));
                                   })
                                   .ToList();

                                item = items.FirstOrDefault();
                            }

                            if (item == null)
                            {
                                var items = _settings.BackgroundDownloadItems
                                    .Where(n => n.State == BackgroundDownloadState.Downloading)
                                    .ToList();

                                if (items.Count > 0)
                                {
                                    round = (round >= items.Count) ? 0 : round;
                                    item = items[round++];
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    return;
                }

                if (item == null) continue;

                try
                {
                    if (item.Rank == 1)
                    {
                        if (!_cacheManager.Contains(item.Seed.Key))
                        {
                            item.State = BackgroundDownloadState.Downloading;

                            _connectionsManager.Download(item.Seed.Key);
                        }
                        else
                        {
                            item.State = BackgroundDownloadState.Decoding;
                        }
                    }
                    else
                    {
                        if (!item.Index.Groups.All(n => _existManager.GetCount(n) >= n.InformationLength))
                        {
                            item.State = BackgroundDownloadState.Downloading;

                            int limitCount = 256;

                            foreach (var group in item.Index.Groups.ToArray().Randomize())
                            {
                                if (_existManager.GetCount(group) >= group.InformationLength) continue;

                                foreach (var key in _existManager.GetKeys(group, false))
                                {
                                    if (_connectionsManager.IsDownloadWaiting(key))
                                    {
                                        limitCount--;

                                        if (limitCount <= 0) goto End;
                                    }
                                }
                            }

                            List<Key> keyList = new List<Key>();

                            foreach (var group in item.Index.Groups.ToArray().Randomize())
                            {
                                if (_existManager.GetCount(group) >= group.InformationLength) continue;

                                List<Key> tempKeys = new List<Key>();

                                foreach (var key in _existManager.GetKeys(group, false))
                                {
                                    if (!_connectionsManager.IsDownloadWaiting(key))
                                    {
                                        tempKeys.Add(key);
                                    }
                                }

                                random.Shuffle(tempKeys);
                                foreach (var key in tempKeys)
                                {
                                    _connectionsManager.Download(key);

                                    limitCount--;
                                }

                                if (limitCount <= 0) goto End;
                            }

                        End: ;
                        }
                        else
                        {
                            item.State = BackgroundDownloadState.Decoding;
                        }
                    }
                }
                catch (Exception e)
                {
                    item.State = BackgroundDownloadState.Error;

                    Log.Error(e);

                    this.Remove(item);
                }
            }
        }
Example #23
0
 public static void Shuffle <T>(this Random self, List <T> list, int end)
 {
     self.Shuffle(list, 0, end);
 }
 public void Shuffle()
 {
     System.Random Rand = new System.Random(1231415);
     Assert.Equal(new int[] { 3, 1, 4, 5, 2 }, Rand.Shuffle(new int[] { 1, 2, 3, 4, 5 }));
 }
        public NormalRoom(NormalRoom prev, Random rand, bool noEvil)
        {
            var indexes = Enumerable.Range(0, roomTemplates.Length).ToList();
            rand.Shuffle(indexes);
            foreach (var index in indexes) {
                if (prev != null && index == prev.currentId)
                    continue;

                if ((roomTemplates[index].Flags & RoomFlags.Evil) != 0 && noEvil)
                    continue;

                if (prev != null) {
                    bool ok = false;
                    foreach (var conn in prev.ConnectionPoints) {
                        var d = conn.Item1.Reverse();
                        if (roomTemplates[index].Connections.Any(targetConn => targetConn.Item1 == d)) {
                            ok = true;
                            break;
                        }
                    }
                    if (!ok)
                        continue;
                }

                currentId = index;
            }
            current = roomTemplates[currentId];
        }
        private void DownloadThread()
        {
            var random = new Random();
            int round = 0;

            for (;;)
            {
                Thread.Sleep(1000 * 1);
                if (this.State == ManagerState.Stop) return;

                DownloadItem item = null;

                try
                {
                    lock (_thisLock)
                    {
                        if (_settings.DownloadItems.Count > 0)
                        {
                            {
                                var items = _settings.DownloadItems
                                   .Where(n => n.State == DownloadState.Downloading)
                                   .Where(n => n.Priority != 0)
                                   .Where(x =>
                                   {
                                       if (x.Depth == 1) return 0 == (!_cacheManager.Contains(x.Seed.Metadata.Key) ? 1 : 0);
                                       else return 0 == (x.Index.Groups.Sum(n => n.InformationLength) - x.Index.Groups.Sum(n => Math.Min(n.InformationLength, _existManager.GetCount(n))));
                                   })
                                   .ToList();

                                item = items.FirstOrDefault();
                            }

                            if (item == null)
                            {
                                var items = _settings.DownloadItems
                                    .Where(n => n.State == DownloadState.Downloading)
                                    .Where(n => n.Priority != 0)
                                    .OrderBy(n => -n.Priority)
                                    .ToList();

                                if (items.Count > 0)
                                {
                                    round = (round >= items.Count) ? 0 : round;
                                    item = items[round++];
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    return;
                }

                if (item == null) continue;

                try
                {
                    if (item.Depth == 1)
                    {
                        if (!_cacheManager.Contains(item.Seed.Metadata.Key))
                        {
                            item.State = DownloadState.Downloading;

                            _connectionsManager.Download(item.Seed.Metadata.Key);
                        }
                        else
                        {
                            item.State = DownloadState.Decoding;
                        }
                    }
                    else
                    {
                        if (!item.Index.Groups.All(n => _existManager.GetCount(n) >= n.InformationLength))
                        {
                            item.State = DownloadState.Downloading;

                            var limitCount = (int)(256 * Math.Pow(item.Priority, 3));

                            foreach (var group in item.Index.Groups.ToArray().Randomize())
                            {
                                if (_existManager.GetCount(group) >= group.InformationLength) continue;

                                foreach (var key in _existManager.GetKeys(group, false))
                                {
                                    if (_connectionsManager.IsDownloadWaiting(key))
                                    {
                                        limitCount--;

                                        if (limitCount <= 0) goto End;
                                    }
                                }
                            }

                            foreach (var group in item.Index.Groups.ToArray().Randomize())
                            {
                                if (_existManager.GetCount(group) >= group.InformationLength) continue;

                                var tempKeys = new List<Key>();

                                foreach (var key in _existManager.GetKeys(group, false))
                                {
                                    if (!_connectionsManager.IsDownloadWaiting(key))
                                    {
                                        tempKeys.Add(key);
                                    }
                                }

                                random.Shuffle(tempKeys);
                                foreach (var key in tempKeys)
                                {
                                    _connectionsManager.Download(key);

                                    limitCount--;
                                }

                                if (limitCount <= 0) goto End;
                            }

                            End:;
                        }
                        else
                        {
                            item.State = DownloadState.ParityDecoding;
                        }
                    }
                }
                catch (Exception e)
                {
                    item.State = DownloadState.Error;

                    Log.Error(e);
                }
            }
        }
        public void Shuffle()
        {
            var Rand = new System.Random(1231415);

            Assert.Equal(new int[] { 3, 1, 4, 5, 2 }, Rand.Shuffle(new int[] { 1, 2, 3, 4, 5 }));
        }
Example #28
0
 public static void Shuffle <T>(this Random self, T[] array, int end)
 {
     self.Shuffle(array, 0, end);
 }