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)); }
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); }
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); }
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); }
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); }
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); }
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)); }
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)); }
public RDBool IsSquareNumber(RDNumber number, object factPool) { return(new RDBool(((FactPool)factPool).isSquare[number.Data])); }