Exemplo n.º 1
0
 public static CompositionAlternatives NotDeadend(WordEquivalencyClassComposition el)
 {
     return(new CompositionAlternatives(el)
     {
         IsDeadend = false
     });
 }
Exemplo n.º 2
0
 public CompositionAlternatives(WordEquivalencyClassComposition WordEquivalencyClassComposition)
 {
     IsDeadend = WordEquivalencyClassComposition.IsDeadend;
     CharPool  = WordEquivalencyClassComposition.CharPool;
     _listOfCompositionAlternatives = new List <WordEquivalencyClassComposition> {
         WordEquivalencyClassComposition
     };
 }
Exemplo n.º 3
0
 public void GenerateAndAddFullSolution_FromIncomplete(WordEquivalencyClassComposition inComplete)
 {
     try
     {
         Solutions.AddFromIncomplete(inComplete);
     }
     catch (Exception e)
     {
         throw new ArgumentException("I should not be here 3");
     }
 }
Exemplo n.º 4
0
        public WordEquivalencyClassComposition(WordEquivalencyClassComposition wordEquivalencyClassComposition, WordEquivalencyClass wordEquivalencyClass)
        {
            IsDeadend = true;

            var tempList = new List <WordEquivalencyClass>();

            tempList.AddRange(wordEquivalencyClassComposition.OrderedListOfWordEquivalencyClasses);
            tempList.Add(wordEquivalencyClass);
            OrderedListOfWordEquivalencyClasses = new ReadOnlyCollection <WordEquivalencyClass>(tempList);

            CharPool = string.Concat(wordEquivalencyClassComposition.CharPool, wordEquivalencyClass.CharPool).Alphabetize();
        }
Exemplo n.º 5
0
        public void AddSolvable(WordEquivalencyClassComposition wordEquivalencyClassComposition)
        {
            var charPool = wordEquivalencyClassComposition.CharPool;

            if (ContainsKey(charPool))
            {
                throw new ArgumentException("I should not be here.");
                return;
            }

            var compositionAlternatives = CompositionAlternatives.NotDeadend(wordEquivalencyClassComposition);

            _dict.Add(charPool, compositionAlternatives);
        }
Exemplo n.º 6
0
        public void AddSolution(WordEquivalencyClassComposition wordEquivalencyClassComposition)
        {
            var charPool = wordEquivalencyClassComposition.CharPool;

            if (!ContainsKey(charPool))
            {
                var compositionAlternatives = new CompositionAlternatives(wordEquivalencyClassComposition);
                _dict.Add(charPool, compositionAlternatives);
            }
            else
            {
                //todo must check if this is duplicate structure that i am adding (optimisation)
                _dict[charPool].AddAlternative(wordEquivalencyClassComposition);
            }
        }
Exemplo n.º 7
0
        public void AddAlternative(WordEquivalencyClassComposition alternative)
        {
            _listOfCompositionAlternatives.Add(alternative);

            // with validation?
            if (true)
            {
                if (_listOfCompositionAlternatives.Any(x => x.IsDeadend != alternative.IsDeadend))
                {
                    throw new ArgumentException("Composition BlobCompositions have do not agree on their DeadEnd status.");
                }

                if (_listOfCompositionAlternatives.Any(x => x.CharPool != alternative.CharPool))
                {
                    throw new ArgumentException("Composition BlobCompositions have do not agree on their CharPool.");
                }
            }
        }
Exemplo n.º 8
0
        private IEnumerable <WordEquivalencyClassComposition> OverlayWithIncomplete(
            WordEquivalencyClassComposition inComplete)
        {
            var sequenceOfClassesOfIncomplete = inComplete.OrderedListOfWordEquivalencyClasses.ToList();

            var result = _listOfCompositionAlternatives.Select(alternative =>
            {
                List <WordEquivalencyClass> newList = sequenceOfClassesOfIncomplete.ToList();

                var compositionClassSequence = alternative.OrderedListOfWordEquivalencyClasses.ToList();

                //todo optimize this loop
                var allowAdding = false;
                for (int i = 0; i < compositionClassSequence.Count; i++)
                {
                    var incrementalCharPool = compositionClassSequence.Take(i + 1).Select(x => x.CharPool).Aggregate(string.Concat);
                    if (inComplete.CharPool.SubtractChars(incrementalCharPool) == null)
                    {
                        if (allowAdding)
                        {
                            newList.Add(compositionClassSequence[i]);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    if (inComplete.CharPool.SubtractChars(incrementalCharPool) == string.Empty)
                    {
                        allowAdding = true;
                    }
                }


                return(new WordEquivalencyClassComposition(newList)
                {
                    IsDeadend = false
                });
            }).Where(x => x != null).ToList();

            return(result);
        }
Exemplo n.º 9
0
 public void AddDeadEnd(WordEquivalencyClassComposition wordEquivalencyClassComposition)
 {
     _dict.Add(wordEquivalencyClassComposition.CharPool, null);
 }
Exemplo n.º 10
0
        public void AddFromIncomplete(WordEquivalencyClassComposition inComplete)
        {
            var overlainCompleteAlternatives = OverlayWithIncomplete(inComplete);

            _listOfCompositionAlternatives.AddRange(overlainCompleteAlternatives);
        }