Beispiel #1
0
 public static ISorterEval ToSorterEval(this SorterEvalToJson sorterGenomeToJson)
 {
     return(SorterEval.Make
            (
                sorter: sorterGenomeToJson.SorterToJson.ToSorter(),
                switchableGroupGuid: sorterGenomeToJson.SwitchableGroupGuid,
                switchUseList: sorterGenomeToJson.SwitchUseList,
                success: sorterGenomeToJson.Success,
                coveringSet: sorterGenomeToJson.CoveringSet.ToSwitchableGroup()
            ));
 }
Beispiel #2
0
        public static ISorterEvalVm ToSorterEvalVm(this string reportString)
        {
            var     pcs = reportString.Split("\t".ToCharArray());
            ISorter sorter;
            var     switchableGuid = Guid.Empty;
            var     success        = false;
            var     useCount       = 0;

            if (pcs.Count() > 2)
            {
                sorter = pcs[0].ToSorter();
                bool.TryParse(pcs[1], out success);
                int.TryParse(pcs[2], out useCount);
            }
            else
            {
                return(new SorterEvalVmImpl(null));
            }

            if (pcs.Count() > 3)
            {
                Guid.TryParse(pcs[3], out switchableGuid);
            }
            else
            {
                return(new SorterEvalVmImpl
                       (
                           SorterEval.Make
                           (
                               sorter: sorter,
                               switchableGroupGuid: switchableGuid,
                               success: success,
                               switchUseCount: useCount,
                               coveringSet: null
                           )
                       ));
            }

            var useList = JsonConvert.DeserializeObject <List <double> >(pcs[4]);

            return(new SorterEvalVmImpl
                   (
                       SorterEval.Make
                       (
                           sorter: sorter,
                           switchableGroupGuid: switchableGuid,
                           success: success,
                           switchUseList: useList,
                           coveringSet: null
                       )
                   ));
        }
        public static ISorterEval Sort <T>
        (
            this ISorter sorter,
            ISwitchableGroup <T> switchableGroup
        )
        {
            var switchUseList = Enumerable.Repeat(0.0, sorter.KeyPairCount).ToList();
            var totalSuccess  = true;
            var switchSet     = KeyPairSwitchSet.Make <T>(switchableGroup.KeyCount);

            foreach (var switchable in switchableGroup.Switchables)
            {
                var current     = switchable.Item;
                var sortSuccess = false;

                for (var i = 0; i < sorter.KeyPairCount; i++)
                {
                    if (switchSet.IsSorted(current))
                    {
                        sortSuccess = true;
                        break;
                    }

                    var res = switchSet.SwitchFunction(sorter.KeyPair(i))(current);
                    current = res.Item1;
                    if (res.Item2)
                    {
                        switchUseList[i]++;
                        if (switchSet.IsSorted(current))
                        {
                            sortSuccess = true;
                            break;
                        }
                    }
                }

                totalSuccess &= sortSuccess;
            }

            return(SorterEval.Make(
                       sorter: sorter,
                       switchableGroupGuid: switchableGroup.Guid,
                       success: totalSuccess,
                       switchUseList: switchUseList,
                       coveringSet: null
                       ));
        }
Beispiel #4
0
        void SetUnstagedSwitchVms()
        {
            for (var i = 0; i < SorterEval.KeyPairCount; i++)
            {
                if ((SorterEval.SwitchEvals[i].UseCount == 0) && !ShowUnusedSwitches)
                {
                    continue;
                }

                var keyPair          = SorterEval.KeyPair(i);
                var switchBrushIndex = Math.Ceiling(
                    (SorterEval.SwitchEvals[i].UseCount * SwitchBrushes.Count)
                    /
                    SorterEval.SwitchableGroupCount
                    );

                SwitchVms.Add(new SwitchGraphicVm(keyPair, SorterEval.KeyCount, LineBrushes, Width)
                {
                    SwitchBrush = SwitchBrushes[(int)switchBrushIndex]
                });
            }
        }
Beispiel #5
0
        public UnstagedSorterVmImpl
        (
            ISorterEval sorterEval,
            List <Brush> lineBrushes,
            List <Brush> switchBrushes,
            int width,
            int height,
            bool showUnusedSwitches
        )
        {
            _sorterEval         = sorterEval;
            _lineBrushes        = lineBrushes;
            _switchBrushes      = switchBrushes;
            _showUnusedSwitches = showUnusedSwitches;
            _height             = height;
            _width = width;

            for (var i = 0; i < SorterEval.KeyPairCount; i++)
            {
                if ((SorterEval.SwitchEvals[i].UseCount < 1) && !ShowUnusedSwitches)
                {
                    continue;
                }

                var keyPair          = SorterEval.KeyPair(i);
                var switchBrushIndex = Math.Ceiling(
                    (SorterEval.SwitchEvals[i].UseCount * (SwitchBrushes.Count - 1))
                    /
                    SorterEval.SwitchableGroupCount
                    );

                SwitchVms.Add(new SwitchGraphicVm(keyPair, SorterEval.KeyCount, LineBrushes, Width)
                {
                    SwitchBrush = SwitchBrushes[(int)switchBrushIndex]
                });
            }
        }
Beispiel #6
0
        public static ISorterGenomeEvalVm ToSorterGenomeEvalVm(this string reportString)
        {
            var           pcs = reportString.Split("\t".ToCharArray());
            ISorterEval   sorterEval;
            ISorterGenome sorterGenome;
            ISorter       sorter;
            var           switchableGuid = Guid.Empty;
            var           success        = false;
            var           useCount       = 0;
            var           generation     = 0;
            var           ancestors      = ImmutableStack <int> .Empty;

            if (pcs.Count() > 2)
            {
                sorterGenome = pcs[0].ToSorterGenome();
                sorter       = sorterGenome.ToSorter();
                bool.TryParse(pcs[1], out success);
                int.TryParse(pcs[2], out useCount);
            }
            else
            {
                return(new SorterGenomeEvalVmImpl(null));
            }

            if (pcs.Count() > 3)
            {
                ancestors = JsonConvert.DeserializeObject <ImmutableStack <int> >(pcs[3]);
            }
            else
            {
                sorterEval = SorterEval.Make
                             (
                    sorter: sorter,
                    switchableGroupGuid: switchableGuid,
                    success: success,
                    switchUseCount: useCount,
                    coveringSet: null
                             );

                return(new SorterGenomeEvalVmImpl
                       (
                           SorterGenomeEval.Make
                           (
                               sorterGenome: sorterGenome,
                               ancestors: ancestors,
                               sorterEval: sorterEval,
                               generation: generation,
                               success: true
                           )
                       ));
            }

            if (pcs.Count() > 4)
            {
                Guid.TryParse(pcs[4], out switchableGuid);
            }
            else
            {
                sorterEval = SorterEval.Make
                             (
                    sorter: sorter,
                    switchableGroupGuid: switchableGuid,
                    success: success,
                    switchUseCount: useCount,
                    coveringSet: null
                             );

                return(new SorterGenomeEvalVmImpl
                       (
                           SorterGenomeEval.Make
                           (
                               sorterGenome: sorterGenome,
                               ancestors: ancestors,
                               sorterEval: sorterEval,
                               generation: generation,
                               success: true
                           )
                       ));
            }

            var useList = JsonConvert.DeserializeObject <List <double> >(pcs[5]);

            sorterEval = SorterEval.Make
                         (
                sorter: sorter,
                switchableGroupGuid: switchableGuid,
                success: success,
                switchUseList: useList,
                coveringSet: null
                         );

            return(new SorterGenomeEvalVmImpl
                   (
                       SorterGenomeEval.Make
                       (
                           sorterGenome: sorterGenome,
                           ancestors: ancestors,
                           sorterEval: sorterEval,
                           generation: generation,
                           success: true
                       )
                   ));
        }