Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
45
Task/Binary-search/Picat/binary-search-1.picat
Normal file
45
Task/Binary-search/Picat/binary-search-1.picat
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
go =>
|
||||
A = [2, 4, 6, 8, 9],
|
||||
TestValues = [2,1,8,10,9,5],
|
||||
|
||||
foreach(Value in TestValues)
|
||||
test(binary_search,A, Value)
|
||||
end,
|
||||
test(binary_search,[1,20,3,4], 5),
|
||||
nl.
|
||||
|
||||
% Test with binary search predicate Search
|
||||
test(Search,A,Value) =>
|
||||
Ret = apply(Search,A,Value),
|
||||
printf("A: %w Value:%d Ret: %d: ", A, Value, Ret),
|
||||
if Ret == -1 then
|
||||
println("The array is not sorted.")
|
||||
elseif Ret == 0 then
|
||||
printf("The value %d is not in the array.\n", Value)
|
||||
else
|
||||
printf("The value %d is found at position %d.\n", Value, Ret)
|
||||
end.
|
||||
|
||||
binary_search(A, Value) = V =>
|
||||
V1 = 0,
|
||||
% we want a sorted array
|
||||
if not sort(A) == A then
|
||||
V1 := -1
|
||||
else
|
||||
Low = 1,
|
||||
High = A.length,
|
||||
Mid = 1,
|
||||
Found = 0,
|
||||
while (Found == 0, Low <= High)
|
||||
Mid := (Low + High) // 2,
|
||||
if A[Mid] > Value then
|
||||
High := Mid - 1
|
||||
elseif A[Mid] < Value then
|
||||
Low := Mid + 1
|
||||
else
|
||||
V1 := Mid,
|
||||
Found := 1
|
||||
end
|
||||
end
|
||||
end,
|
||||
V = V1.
|
||||
13
Task/Binary-search/Picat/binary-search-2.picat
Normal file
13
Task/Binary-search/Picat/binary-search-2.picat
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
binary_search_rec(A, Value) = Ret =>
|
||||
Ret = binary_search_rec(A,Value, 1, A.length).
|
||||
|
||||
binary_search_rec(A, _Value, _Low, _High) = -1, sort(A) != A => true.
|
||||
binary_search_rec(_A, _Value, Low, High) = 0, High < Low => true.
|
||||
binary_search_rec(A, Value, Low, High) = Mid =>
|
||||
Mid1 = (Low + High) // 2,
|
||||
if A[Mid1] > Value then
|
||||
Mid1 := binary_search_rec(A, Value, Low, Mid1-1)
|
||||
elseif A[Mid1] < Value then
|
||||
Mid1 := binary_search_rec(A, Value, Mid1+1, High)
|
||||
end,
|
||||
Mid = Mid1.
|
||||
Loading…
Add table
Add a link
Reference in a new issue