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]); } } }