Пример #1
0
        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);
        }
Пример #2
0
        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();
        }