diff --git a/Problems/NPComplete/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Class.cs b/Problems/NPComplete/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Class.cs index dda4f78..51a6063 100644 --- a/Problems/NPComplete/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Class.cs +++ b/Problems/NPComplete/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Class.cs @@ -1,5 +1,4 @@ using API.Interfaces; -using API.DummyClasses; using API.Problems.NPComplete.NPC_BERNSTEINVAZIRANI.Solvers; using API.Problems.NPComplete.NPC_BERNSTEINVAZIRANI.Verifiers; using SPADE; @@ -11,13 +10,13 @@ class BERNSTEINVAZIRANI : IProblem 0 && (n & (n - 1)) == 0) + return (int)Math.Log2(n); + throw new ArithmeticException("not a power of two"); + } + public bool Func(int x) { if (x < 0 || x >= funcValues.Count) { @@ -64,11 +70,10 @@ public bool Func(int x) public BERNSTEINVAZIRANI(string input) { instance = input; - StringParser parser = new("{(n, S) | n is int, S is list}"); + StringParser parser = new("{f | f is list}"); parser.parse(instance); - int n = int.Parse(parser["n"].ToString()); - UtilCollection bitslist = parser["S"]; + UtilCollection bitslist = parser["f"]; var fvalues = new List(); bitslist.ToList().ForEach(x => { @@ -78,17 +83,10 @@ public BERNSTEINVAZIRANI(string input) { fvalues.Add(true); } else { Console.WriteLine($"{this.GetType().Name}:{MethodBase.GetCurrentMethod()?.Name}: encountered non-bit value {x.ToString()} in function values list"); - // XXX how do deal with error? } }); - if (fvalues.Count != Math.Pow(2, n)) { - Console.WriteLine($"{this.GetType().Name}:{MethodBase.GetCurrentMethod()?.Name}: wrong length of function value list (should be {Math.Pow(2, n)}, got {fvalues.Count})"); - // XXX the array is the wrong size... how to deal with error? - return; - } - - nbits = n; + nbits = PowerOfTwo(fvalues.Count); funcValues = fvalues; } } diff --git a/redux-tests/Problems/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Tests.cs b/redux-tests/Problems/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Tests.cs index adf3286..a541197 100644 --- a/redux-tests/Problems/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Tests.cs +++ b/redux-tests/Problems/NPC_BERNSTEINVAZIRANI/BERNSTEINVAZIRANI_Tests.cs @@ -9,22 +9,22 @@ public class BERNSTEINVAZIRANI_tests { [Fact] public void BERNSTEINVAZIRANI_Default_Instantiation() { var problem = new BERNSTEINVAZIRANI(); - Assert.Equal("(3,(0,1,0,1,1,0,1,0))", problem.instance); - Assert.Equal("(3,(0,1,0,1,1,0,1,0))", problem.defaultInstance); + Assert.Equal("(0,1,0,1,1,0,1,0)", problem.instance); + Assert.Equal("(0,1,0,1,1,0,1,0)", problem.defaultInstance); } [Fact] public void BERNSTEINVAZIRANI_Custom_Instantiation() { - string instance = "(3,(0,1,0,1,0,1,0,1))"; + string instance = "(0,1,0,1,0,1,0,1)"; var problem = new BERNSTEINVAZIRANI(instance); Assert.Equal(instance, problem.instance); } [Theory] //tests verifier - [InlineData("(3,(0,1,0,1,1,0,1,0))", "101", true)] - [InlineData("(3,(0,1,1,0,1,0,0,1))", "111", true)] - [InlineData("(3,(0,1,0,1,0,1,0,1))", "001", true)] - [InlineData("(3,(0,0,0,0,0,0,0,0))", "000", true)] + [InlineData("(0,1,0,1,1,0,1,0)", "101", true)] + [InlineData("(0,1,1,0,1,0,0,1)", "111", true)] + [InlineData("(0,1,0,1,0,1,0,1)", "001", true)] + [InlineData("(0,0,0,0,0,0,0,0)", "000", true)] public void BERNSTEINVAZIRANI_verifier(string instance, string certificate, bool expected) { var problem = new BERNSTEINVAZIRANI(instance); var verifier = new BernsteinVaziraniClassicalVerifier(); @@ -34,10 +34,10 @@ public void BERNSTEINVAZIRANI_verifier(string instance, string certificate, bool } [Theory] //tests solver - [InlineData("(3,(0,1,0,1,1,0,1,0))", "101")] - [InlineData("(3,(0,1,1,0,1,0,0,1))", "111")] - [InlineData("(3,(0,0,0,0,0,0,0,0))", "000")] - [InlineData("(3,(0,1,0,1,0,1,0,1))", "001")] + [InlineData("(0,1,0,1,1,0,1,0)", "101")] + [InlineData("(0,1,1,0,1,0,0,1)", "111")] + [InlineData("(0,0,0,0,0,0,0,0)", "000")] + [InlineData("(0,1,0,1,0,1,0,1)", "001")] public void BERNSTEINVAZIRANI_solver(string instance, string certificate) { var problem = new BERNSTEINVAZIRANI(instance); var solver = problem.defaultSolver;