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)); }
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)); }