public static void PrintRepresentBinariesInF(int n, bool noLookBack) { bool[] functionClasses = PostClosedClasses.GetFunctionClasses(new BooleanFunction((byte)n)); var availableExpressions = new List <BooleanExpression> { new VarExpression(BooleanVariable.A), new VarExpression(BooleanVariable.B), }; foreach (var t in BinariesAndClasses) { bool representable = true; for (int i = 0; i < 5; i++) { if (functionClasses[i] && !t.Item2[i]) { representable = false; break; } } if (!representable) { continue; } try { var targetExpression = new OpExpression(t.Item1, BooleanVariable.A, BooleanVariable.B); Console.WriteLine(targetExpression.ToString() + " = " + TertiaryOpExpression.FindMininalExpressionForBinary(targetExpression, new BooleanFunction((byte)n), availableExpressions)); if (!noLookBack) { availableExpressions.Add(targetExpression); } } catch (CouldntFindExpressionException) { } } }
public static void PrintRepresentBinariesInF(int n, bool noLookBack) { bool[] functionClasses = PostClosedClasses.GetFunctionClasses(new BooleanFunction((byte)n)); var availableExpressions = new List<BooleanExpression> { new VarExpression(BooleanVariable.A), new VarExpression(BooleanVariable.B), }; foreach(var t in BinariesAndClasses) { bool representable = true; for(int i = 0; i < 5; i++) { if(functionClasses[i] && !t.Item2[i]) { representable = false; break; } } if(!representable) continue; try { var targetExpression = new OpExpression(t.Item1, BooleanVariable.A, BooleanVariable.B); Console.WriteLine(targetExpression.ToString() + " = " + TertiaryOpExpression.FindMininalExpressionForBinary(targetExpression, new BooleanFunction((byte)n), availableExpressions)); if(!noLookBack) availableExpressions.Add(targetExpression); } catch(CouldntFindExpressionException) { } } }