September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
62
Task/Set/Phix/set-1.phix
Normal file
62
Task/Set/Phix/set-1.phix
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
sequence set1 = {1,2,3},
|
||||
set2 = {3,4,5}
|
||||
|
||||
function element(object x, sequence set)
|
||||
return find(x,set)!=0
|
||||
end function
|
||||
|
||||
function union(sequence set1, sequence set2)
|
||||
for i=1 to length(set2) do
|
||||
if not element(set2[i],set1) then
|
||||
set1 = append(set1,set2[i])
|
||||
end if
|
||||
end for
|
||||
return set1
|
||||
end function
|
||||
|
||||
function intersection(sequence set1, sequence set2)
|
||||
sequence res = {}
|
||||
for i=1 to length(set1) do
|
||||
if element(set1[i],set2) then
|
||||
res = append(res,set1[i])
|
||||
end if
|
||||
end for
|
||||
return res
|
||||
end function
|
||||
|
||||
function difference(sequence set1, sequence set2)
|
||||
sequence res = {}
|
||||
for i=1 to length(set1) do
|
||||
if not element(set1[i],set2) then
|
||||
res = append(res,set1[i])
|
||||
end if
|
||||
end for
|
||||
return res
|
||||
end function
|
||||
|
||||
function subset(sequence set1, sequence set2)
|
||||
for i=1 to length(set1) do
|
||||
if not element(set1[i],set2) then
|
||||
return false
|
||||
end if
|
||||
end for
|
||||
return true
|
||||
end function
|
||||
|
||||
function equality(sequence set1, sequence set2)
|
||||
if length(set1)!=length(set2) then
|
||||
return false
|
||||
end if
|
||||
return subset(set1,set2)
|
||||
end function
|
||||
|
||||
--test code:
|
||||
?element(3,set1) -- 1
|
||||
?element(4,set1) -- 0
|
||||
?union(set1,set2) -- {1,2,3,4,5}
|
||||
?intersection(set1,set2) -- {3}
|
||||
?difference(set1,set2) -- {1,2}
|
||||
?subset(set1,set2) -- 0
|
||||
?subset({1,2},set1) -- 1
|
||||
?equality(set1,set2) -- 0
|
||||
?equality(set1,{3,1,2}) -- 1
|
||||
96
Task/Set/Phix/set-2.phix
Normal file
96
Task/Set/Phix/set-2.phix
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
integer set1 = new_dict(),
|
||||
set2 = new_dict()
|
||||
setd(3,0,set1)
|
||||
setd(1,0,set1)
|
||||
setd(2,0,set1)
|
||||
setd(5,0,set2)
|
||||
setd(3,0,set2)
|
||||
setd(4,0,set2)
|
||||
|
||||
function element(object x, integer set)
|
||||
return getd_index(x,set)!=0
|
||||
end function
|
||||
|
||||
function u_visitor(object key, object data, object user_data)
|
||||
integer {union_set,set2} = user_data
|
||||
if set2=0
|
||||
or not element(key,union_set) then
|
||||
setd(key,data,union_set)
|
||||
end if
|
||||
return 1
|
||||
end function
|
||||
|
||||
function union(integer set1, integer set2)
|
||||
integer union_set = new_dict()
|
||||
traverse_dict(routine_id("u_visitor"),{union_set,0},set1)
|
||||
traverse_dict(routine_id("u_visitor"),{union_set,set2},set2)
|
||||
return union_set
|
||||
end function
|
||||
|
||||
function i_visitor(object key, object data, object user_data)
|
||||
integer {union_set,set2} = user_data
|
||||
if element(key,set2) then
|
||||
setd(key,data,union_set)
|
||||
end if
|
||||
return 1
|
||||
end function
|
||||
|
||||
function intersection(integer set1, integer set2)
|
||||
integer union_set = new_dict()
|
||||
traverse_dict(routine_id("i_visitor"),{union_set,set2},set1)
|
||||
return union_set
|
||||
end function
|
||||
|
||||
function d_visitor(object key, object data, object user_data)
|
||||
integer {union_set,set2} = user_data
|
||||
if not element(key,set2) then
|
||||
setd(key,data,union_set)
|
||||
end if
|
||||
return 1
|
||||
end function
|
||||
|
||||
function difference(integer set1, integer set2)
|
||||
integer union_set = new_dict()
|
||||
traverse_dict(routine_id("d_visitor"),{union_set,set2},set1)
|
||||
return union_set
|
||||
end function
|
||||
|
||||
integer res
|
||||
function s_visitor(object key, object data, object user_data)
|
||||
integer set2 = user_data
|
||||
if not element(key,set2) then
|
||||
res = 0
|
||||
return 0 -- cease traversal
|
||||
end if
|
||||
return 1
|
||||
end function
|
||||
|
||||
function subset(integer set1, integer set2)
|
||||
res = 1
|
||||
traverse_dict(routine_id("s_visitor"),set2,set1)
|
||||
return res
|
||||
end function
|
||||
|
||||
function equality(integer set1, integer set2)
|
||||
if dict_size(set1)!=dict_size(set2) then
|
||||
return false
|
||||
end if
|
||||
return subset(set1,set2)
|
||||
end function
|
||||
|
||||
include builtins/map.e -- for keys()
|
||||
|
||||
-- matching test code:
|
||||
?element(3,set1) -- 1
|
||||
?element(4,set1) -- 0
|
||||
?keys(union(set1,set2)) -- {1,2,3,4,5}
|
||||
?keys(intersection(set1,set2)) -- {3}
|
||||
?keys(difference(set1,set2)) -- {1,2}
|
||||
?subset(set1,set2) -- 0
|
||||
integer set3 = new_dict()
|
||||
setd(2,0,set3)
|
||||
setd(1,0,set3)
|
||||
?subset(set3,set1) -- 1
|
||||
?equality(set1,set2) -- 0
|
||||
setd(3,0,set3)
|
||||
?equality(set1,set3) -- 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue