public static CompositionAlternatives NotDeadend(WordEquivalencyClassComposition el) { return(new CompositionAlternatives(el) { IsDeadend = false }); }
public CompositionAlternatives(WordEquivalencyClassComposition WordEquivalencyClassComposition) { IsDeadend = WordEquivalencyClassComposition.IsDeadend; CharPool = WordEquivalencyClassComposition.CharPool; _listOfCompositionAlternatives = new List <WordEquivalencyClassComposition> { WordEquivalencyClassComposition }; }
public void GenerateAndAddFullSolution_FromIncomplete(WordEquivalencyClassComposition inComplete) { try { Solutions.AddFromIncomplete(inComplete); } catch (Exception e) { throw new ArgumentException("I should not be here 3"); } }
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(); }
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); }
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); } }
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."); } } }
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); }
public void AddDeadEnd(WordEquivalencyClassComposition wordEquivalencyClassComposition) { _dict.Add(wordEquivalencyClassComposition.CharPool, null); }
public void AddFromIncomplete(WordEquivalencyClassComposition inComplete) { var overlainCompleteAlternatives = OverlayWithIncomplete(inComplete); _listOfCompositionAlternatives.AddRange(overlainCompleteAlternatives); }