private int filterDomain(JolkaVariable variable) { int valuesRemoved = 0; variable.ResetDomain();//Domain = GetWordsWithLength(variable.EndIndex - variable.BeginIndex + 1); if (variable.Horizontal) { foreach (JolkaConstraint cons in Constraints[variable]) { if (!cons.VerticalVariable.IsEmpty()) { valuesRemoved += variable.Domain.RemoveAll(word => word[cons.PosHorizontal] != cons.VerticalVariable.Word[cons.PosVertical]); } } } else { foreach (JolkaConstraint cons in Constraints[variable]) { if (!cons.HorizontalVariable.IsEmpty()) { valuesRemoved += variable.Domain.RemoveAll(word => word[cons.PosVertical] != cons.HorizontalVariable.Word[cons.PosHorizontal]); } } } return(valuesRemoved); }
private void OrderDomain(JolkaVariable variable) { int valuesRemoved = 0; Dictionary <string, int> valuesRemovedByEachWord = new Dictionary <string, int>(); foreach (string word in variable.Domain) { variable.Word = word; valuesRemoved = FilterDomainsOfAllRelatedVariables(variable); variable.Word = ""; ResetDomainsOfAllRelatedVariables(variable); //if (Variables.Any(v => v.Word == word)) // valuesRemoved += 1000; valuesRemovedByEachWord.Add(word, valuesRemoved); } variable.OrderedDomain = variable.OrderedDomain.OrderBy(w => valuesRemovedByEachWord[w]).ToList(); variable.ResetDomain(); }