September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

62
Task/Set/Phix/set-1.phix Normal file
View 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
View 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