Beispiel #1
0
        static ISorterStage MutateSorterStageOdd(this IRando rando, ISorterStage sorterStage)
        {
            var map  = sorterStage.GetMap();
            var fv   = map.FixedValue();
            var rems = map.Select(i => true).ToArray();

            rems[fv] = false;
            var lv = rando.SelectFromRemaining(map, rems);
            var hv = sorterStage[lv];

            map[lv] = fv;
            map[fv] = lv;
            map[hv] = hv;

            return(new SorterStage(
                       order: sorterStage.Order,
                       terms: map,
                       stageNumber: sorterStage.StageNumber));
        }
Beispiel #2
0
        static ISorterStage MutateSorterStageEven(this IRando rando, ISorterStage sorterStage)
        {
            var map  = sorterStage.GetMap();
            var rems = map.Select(i => true).ToArray();
            var aX   = rando.SelectFromRemaining(map, rems);
            var aY   = map[aX];

            rems[aY] = false;

            var bX = rando.SelectFromRemaining(map, rems);
            var bY = map[bX];

            rems[bY] = false;

            map[aX] = bY;
            map[aY] = bX;
            map[bX] = aY;
            map[bY] = aX;

            return(new SorterStage(
                       order: sorterStage.Order,
                       terms: map,
                       stageNumber: sorterStage.StageNumber));
        }