Question: method BadNbr ( a: array ) returns ( bn: int ) ensures a . Length < 2 = = > bn = = - 1

method BadNbr(a: array) returns (bn: int)
ensures a.Length <2==> bn ==-1
ensures bn >=0==> bn < a.Length
ensures bn ==-1==> forall i :: 0<= i < a.Length ==> a[i]+ a[(i +1)% a.Length]>=0{:trigger a[i], a[(i +1)% a.Length]}
{
// Base case: if the array length is less than 2, no bad neighbours possible.
if a.Length <2{
return -1;
}
var n := a.Length;
// Check the wrap-around pair (last and first elements)
if a[n -1]+ a[0]<0{
return 0;
}
// Check for bad neighbours in consecutive pairs
var i :=0;
while i < n -1
invariant 0<= i <= n -1
invariant forall j :: 0<= j < i ==> a[j]+ a[j +1]>=0
decreases n - i
{
if a[i]+ a[i +1]<0{
return i +1;
}
i := i +1;
}
// Final check to ensure all pairs are non-negative before returning -1
assert forall i :: 0<= i < n ==> a[i]+ a[(i +1)% n]>=0{:trigger a[i], a[(i +1)% n]};
return -1;
}
method TestBadNbr()
{
// Test case 1: Empty array
var arr1 := new int[0];
var res1 := BadNbr(arr1);
assert res1==-1;
// Test case 2: Array with one element
var arr2 := new int[1];
arr2[0] :=5;
var res2 := BadNbr(arr2);
assert res2==-1;
// Test case 3: Array with two elements where sum is negative
var arr3 := new int[2];
arr3[0] :=1;
arr3[1] :=-2;
var res3 := BadNbr(arr3);
assert res3==1;
// Test case 4: Array with three elements and a bad neighbour pair
var arr4 := new int[3];
arr4[0] :=3;
arr4[1] :=-4;
arr4[2] :=1;
var res4 := BadNbr(arr4);
assert res4==1;
// Test case 5: Array with four elements and a wrap-around bad neighbour pair
var arr5 := new int[4];
arr5[0] :=2;
arr5[1] :=-1;
arr5[2] :=3;
arr5[3] :=-4;
var res5 := BadNbr(arr5);
assert res5==0;
// Test case 6: No bad neighbour
var arr6 := new int[3];
arr6[0] :=3;
arr6[1] :=2;
arr6[2] :=1;
var res6 := BadNbr(arr6);
assert res6==-1;
// Test case 7: Only wrap-around is a bad neighbour
var arr7 := new int[4];
arr7[0] :=-1;
arr7[1] :=2;
arr7[2] :=3;
arr7[3] :=-4;
var res7 := BadNbr(arr7);
assert res7==0;
}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!