示例#1
0
        public IActionResult Calculate(string formula)
        {
            if (string.IsNullOrEmpty(formula))
            {
                return(RedirectToAction("Index"));
            }

            var model = new CalculateViewModel();


            var parser            = StringParser.Create(formula);
            var calculatedFormula = parser.GetOperator();

            model.OriginalFormula = calculatedFormula.ToString();
            model.Logic           = calculatedFormula.ToLogicString();
            model.Nandify         = calculatedFormula.ToNandify().ToString();
            model.HasResult       = calculatedFormula.HasResult();

            var json = JsonCreator.CreateFromBaseOpeator(calculatedFormula);

            model.JsonData = JsonConvert.SerializeObject(json);


            SemanticTableauxParser tableaux;

            if (calculatedFormula.HasResult())
            {
                var stable           = new SimplifiedTruthTableCreator(calculatedFormula);
                var table            = new TruthTableCreator(calculatedFormula);
                var normal           = new DisjunctiveNormalDecorator(table);
                var simplifiedNormal = new DisjunctiveNormalDecorator(stable);
                model.Normalize            = normal.GetOperator().ToString();
                model.NormalizeLogicFormat = normal.GetOperator().ToLogicString();
                model.TruthTable           = table.GetTable();
                model.SimplifiedTruthTable = stable.GetTable();
                model.Arguments            = calculatedFormula.GetArguments();

                model.SimplifiedNormalize            = simplifiedNormal.GetOperator().ToString();
                model.SimplifiedNormalizeLogicFormat = simplifiedNormal.GetOperator().ToLogicString();

                model.Hex = table.ToHex();
            }


            tableaux               = new SemanticTableauxParser(calculatedFormula);
            model.isTautology      = tableaux.IsTautology();
            model.tableauxJsonData =
                JsonConvert.SerializeObject(JsonCreator.CreateFromTableauxStep(tableaux.GetStep()));
            return(View(model));
        }
        private void CheckFullTable(string parse)
        {
            var parser  = StringParser.Create(parse);
            var table   = new TruthTableCreator(parser.GetOperator());
            var manager = parser.GetArgumentController();

            foreach (var data in table.GetTable())
            {
                var names = parser.GetOperator().GetArguments();
                for (var i = 0; i < names.Length; i++)
                {
                    manager.SetArgumentValue(names[i], data[i] == 1);
                }
                Assert.False(parser.GetOperator().Result() != (data[data.Length - 1] == 1));
            }
        }
        public void CompleteDisjunctveDecoratorTest()
        {
            var parser = StringParser.Create("|(|(a,b), c)");


            var table = new TruthTableCreator(parser.GetOperator());


            var decorator = new DisjunctiveNormalDecorator(table);


            var processed = new TruthTableCreator(decorator.GetOperator());

            var dataOriginal  = table.GetTable();
            var dataProcessed = processed.GetTable();

            for (var i = 0; i < dataOriginal.Length; i++)
            {
                for (var j = 0; j < dataOriginal[i].Length; j++)
                {
                    Assert.False(dataOriginal[i][j] != dataProcessed[i][j]);
                }
            }
        }