public override bool IsConstant(Formula formula, out RDElement result)
 {
     if (formula.Parameters == null)
     {
         if (formula.OperationName == "BLACK")
         {
             result = new RDNumber(1);
             return(true);
         }
         if (formula.OperationName == "WHITE")
         {
             result = new RDNumber(2);
             return(true);
         }
         if (formula.OperationName == "DIFFERENT")
         {
             result = new RDNumber(1);
             return(true);
         }
         if (formula.OperationName == "SAME")
         {
             result = new RDNumber(2);
             return(true);
         }
         if (formula.OperationName == "UNDECIDED")
         {
             result = new RDNumber(0);
             return(true);
         }
     }
     return(base.IsConstant(formula, out result));
 }
예제 #2
0
 public void Number(string name, Dictionary <string, RDElement> dict, object factPool, Rule rule, Action <int> callBack, int callBackID)
 {
     for (int i = 0; i <= 1000; ++i)
     {
         dict[name] = new RDNumber(i);
         callBack(callBackID);
     }
     dict.Remove(name);
 }
예제 #3
0
        public bool IsDiagonalNumber(RDNumber n, RDBool result, object factPool)
        {
            FactPool pool = (FactPool)factPool;

            if (pool.isDiagnal[n.Data] == result.Data)
            {
                return(false);
            }
            pool.isDiagnal[n.Data] = result.Data;
            return(true);
        }
예제 #4
0
        public void SquareNumber(string name, Dictionary <string, RDElement> dict, object factPool, Rule rule, Action <int> callBack, int callBackID)
        {
            FactPool pool = (FactPool)factPool;

            for (int i = 0; i <= 1000; ++i)
            {
                if (pool.isSquare[i])
                {
                    dict[name] = new RDNumber(i);
                    callBack(callBackID);
                }
            }
            dict.Remove(name);
        }
예제 #5
0
        public bool ColorOf(RDCell cell, RDNumber result, object factPool)
        {
            //Console.WriteLine(edge.X + "::" + edge.Y);
            FactPool pool = (FactPool)factPool;

            if (pool.Result[cell.X, cell.Y] != 0)
            {
                if (pool.Result[cell.X, cell.Y] != result.Data)
                {
                    throw new Exception("结果冲突!");
                }
                return(false);
            }
            pool.Result[cell.X, cell.Y] = result.Data;
            return(true);
        }
예제 #6
0
        public bool ColorOf(RDEdge edge, RDNumber result, object factPool)
        {
            //Console.WriteLine(edge.X + "::" + edge.Y);
            FactPool pool = (FactPool)factPool;

            int[,] arr = edge.Direction ? pool.VLine : pool.HLine;
            if (arr[edge.X, edge.Y] != 0)
            {
                if (arr[edge.X, edge.Y] != result.Data)
                {
                    throw new Exception("结果冲突!");
                }
                return(false);
            }
            arr[edge.X, edge.Y] = result.Data;
            return(true);
        }
예제 #7
0
        public bool AllColorOf(RDList edges, RDNumber result, object factPool)
        {
            var resultGroup = edges.Data.Select(edge => ColorOf(edge as RDEdge, result, factPool)).ToArray();

            return(resultGroup.Contains(true));
        }
예제 #8
0
        public bool AllColorOf(RDList cells, RDNumber result, object factPool)
        {
            var resultGroup = cells.Data.Select(cell => ColorOf(cell as RDCell, result, factPool)).ToArray();

            return(resultGroup.Contains(true));
        }
예제 #9
0
 public RDBool IsSquareNumber(RDNumber number, object factPool)
 {
     return(new RDBool(((FactPool)factPool).isSquare[number.Data]));
 }