Beispiel #1
0
 public static StageBits Mutate(this StageBits stageBits, IRando randy, double mutationRate)
 {
     return(new StageBits(
                order: stageBits.Order,
                mask: stageBits.Mask.AsEnumerable().Mutate(randy, mutationRate).First(),
                bits: stageBits.Bits.Mutate(randy, mutationRate)
                ));
 }
Beispiel #2
0
        public static SbScratchPad ToSbScratchPad(this StageBits stageBits)
        {
            var overlaps = stageBits.Order.SquareArrayCoords()
                           .Select(t =>
                                   new SbSpItem(row: t.Item1,
                                                col: t.Item2,
                                                overlap: stageBits.Overlap(row: t.Item1, col: t.Item2)));

            var scratchPad = new SbScratchPad(
                overlaps: overlaps,
                order: stageBits.Order);

            return(scratchPad);
        }
Beispiel #3
0
        public static IPermutation ToPermutation(this StageBits stageBits)
        {
            var permArray    = 0u.CountUp(stageBits.Order).ToArray();
            var sbScratchPad = stageBits.ToSbScratchPad();

            //System.Diagnostics.Debug.WriteLine(sbScratchPad.PrintOverlaps());
            //System.Diagnostics.Debug.WriteLine(sbScratchPad.PrintUsed());

            while (!sbScratchPad.IsSpent())
            {
                var dSbSp = sbScratchPad.BestOnDiag();
                dSbSp.IsUsed = true;
                var bSpSp = sbScratchPad.BestOnCol(dSbSp.Col);
                permArray[bSpSp.Col] = bSpSp.Row;
                permArray[bSpSp.Row] = bSpSp.Col;
                sbScratchPad.Mark(bSpSp, stageBits.Order);

                //  System.Diagnostics.Debug.WriteLine(sbScratchPad.PrintUsed());
            }

            return(PermutationEx.MakePermutation(permArray));
        }
Beispiel #4
0
 public static ISorterStage ToSorterStage(this StageBits stageBits, uint stageNumber)
 {
     return(stageBits.ToPermutation().ToSorterStage(stageNumber));
 }