AcTools.Tests.Temporary.A580301 C# (CSharp) Метод

A580301() приватный Метод

private A580301 ( ) : void
Результат void
        public void A580301() {
            var size = 10;
            var maxDelta = 1;

            var iters = 100000;
            var counter = Enumerable.Range(0, size).Select(x => 0).ToList();

            var optimize = false;

            for (var z = 0; z < iters; z++) {
                var g = new int[size][];
                for (var i = 0; i < size; i++) {
                    var f = Math.Max(0, i - maxDelta);
                    var t = Math.Min(size - 1, i + maxDelta);
                    g[i] = new int[t - f + 1];
                    for (var j = f; j <= t; j++) {
                        g[i][j - f] = j;
                    }
                    Shuffle(g[i]);
                }

                var mt = new int[size];
                for (var i = 0; i < size; i++) {
                    mt[i] = -1;
                }

                if (optimize) {
                    var used1 = new bool[size];
                    for (var i = 0; i < size; i++) {
                        for (var j = 0; j < g[i].Length; j++) {
                            if (mt[g[i][j]] == -1) {
                                mt[g[i][j]] = i;
                                used1[i] = true;
                                break;
                            }
                        }
                    }

                    for (var i = 0; i < size; i++) {
                        if (used1[i]) continue;
                        TryKuhn(new bool[size], g, mt, i);
                    }
                } else {
                    for (var i = 0; i < size; i++) {
                        TryKuhn(new bool[size], g, mt, i);
                    }
                }

                var result = new int[size];
                for (var i = 0; i < size; i++)
                    if (mt[i] != -1) {
                        result[mt[i]] = i;
                    }

                for (var i = 0; i < size; i++) {
                    if (result[i] == 4) {
                        counter[i]++;
                    }
                }
            }

            Debug.WriteLine(counter.Select(x => $"{100d * x / iters:F1}%").JoinToString(", "));
        }
    }