public static IEnumerable <bool> Execute(string function, int variables) { var fun = new LogicFunction(function, variables); var values = new List <bool>(fun.MaxValue); return(Enumerable.Range(0, fun.MaxValue).Select(i => fun.Test(i))); }
private void toolStripRun_Click(object sender, EventArgs e) { dataGridView1.EndEdit(); var functions = new List <string>(); for (int c = VariablesNumber; c < dataGridView1.Columns.Count; c++) { int?[] m = new int?[TermsNumber]; int?[] d = new int?[TermsNumber]; int k = 0, j = 0; for (int r = 0; r < TermsNumber; r++) { var value = dataGridView1.Rows[r].Cells[c].Value; if ("1".Equals(value)) { m[k++] = r; } else if (!("0".Equals(value))) { d[j++] = r; } } var terms = m.Where(t => t.HasValue).Select(t => t.Value).ToArray(); var dontCare = d.Where(t => t.HasValue).Select(t => t.Value).ToArray(); var solver = new Solver(VariablesNumber, terms, dontCare); var function = solver.Solve(); // Test the result function var result = LogicFunction.Execute(function, VariablesNumber).ToArray(); var test = Enumerable.Range(0, TermsNumber) .Select(i => { var value = dataGridView1.Rows[i].Cells[c].Value; var bit = "1".Equals(value) ? true : "0".Equals(value) ? false : (bool?)null; return(new { Idx = i, Bit = bit }); }) .Where(t => t.Bit.HasValue) .All(t => result[t.Idx] == t.Bit); functions.Add(dataGridView1.Columns[c].HeaderText + " = " + function + (test ? "": " >>> Test FAIL! <<<")); } textBox1.Text = string.Join("\r\n", functions.ToArray()); }