Power set: Difference between revisions

no edit summary
m (→‎Module: ntheory: add libheader)
No edit summary
Line 39:
report z_powerset.
 
interface set.
class set definition.
methods:
public section.
methods:add_element
constructorimporting
importingi_element type any
exporting
i_elements type stringtab optional,
e_set type any table,
 
add_elementremove_element
importing
i_element type stringany,
returning
value(r_set) type stringtab,
 
contains_element
remove_element
importing
i_element i_element type string,any
returning
value(r_contains) type abap_bool,
 
get_size
contains_element
importingreturning
i_element value(r_size) type stringint4,
returning
value(r_contains) type abap_bool,
 
get_sizeis_equal
returningimporting
i_set value(r_size) type int4,ref to set
returning
value(r_is_equal) type abap_bool,
 
is_equalget_elements
exporting
e_elements type any table,
 
stringify
returning
value(r_setr_string) type stringtab,string.
endinterface.
 
 
class setstring_set definition.
public section.
interfaces:
elseset.
 
 
methods:
constructor
importing
i_set i_elements type ref tostringtab setoptional,
returning
value(r_is_equal) type abap_bool,
 
get_elements
returning
value(r_elements) type stringtab,
 
stringifybuild_powerset
returning
value(r_stringr_powerset) type stringref to string_set.
 
 
Line 86 ⟶ 98:
 
 
class setstring_set implementation.
method constructor.
loop at i_elements into data(element).
me->set~add_element( element ).
endloop.
endmethod.
 
 
method set~add_element.
if not line_exists( me->elements[ table_line = i_element ] ).
append i_element to me->elements.
Line 101 ⟶ 113:
 
 
method set~remove_element.
if line_exists( me->elements[ table_line = i_element ] ).
delete me->elements where table_line = i_element.
Line 108 ⟶ 120:
 
 
method set~contains_element.
r_contains = cond abap_bool(
when line_exists( me->elements[ table_line = i_element ] )
Line 116 ⟶ 128:
 
 
method set~get_size.
r_size = lines( me->elements ).
endmethod.
 
 
method set~is_equal.
if i_set->get_size( ) ne me->set~get_size( ).
r_is_equal = abap_false.
return.
Line 138 ⟶ 150:
 
 
method set~get_elements.
r_elementse_elements = me->elements.
endmethod.
 
 
method set~stringify.
r_string = cond string(
when me->elements is initial
Line 163 ⟶ 175:
regex = `, $`
with = ` }`).
endmethod.
 
 
performmethod build_powerset using set1.
data(powerset_elements) = value stringtab( ( `` ) ).
 
loop at setme->get_elements( )elements into data(element).
do lines( powerset_elements ) times.
if powerset_elements[ sy-index ] ne `∅`.
append |{ powerset_elements[ sy-index ] }{ element }| to powerset_elements.
returningelse.
append element to powerset_elements.
endif.
enddo.
endloop.
 
powerset r_powerset = new setstring_set( powerset_elements ).
endmethod.
endclass.
Line 168 ⟶ 197:
 
start-of-selection.
data(result_set) = new setstring_set( ).
data(set1) = new setstring_set( ).
data(set2) = new setstring_set( value stringtab( ( `∅` ) ) ).
data(set3) = new setstring_set( value stringtab( ( `1` ) ( `2` ) ( `3` ) ( `3` ) ( `4` ) ( `4` ) ( `4` ) ) ).
 
write |𝑷( { set1->set~stringify( ) } ) ->|.
result_set = set1->build_powerset( ).
perform build_powerset using set1
changing result_set.
 
write result_set->set~stringify( ).
new-line.
 
write |𝑷( { set2->set~stringify( ) } ) ->|.
result_set = set2->build_powerset( ).
perform build_powerset using set2
changing result_set.
 
write result_set->set~stringify( ).
new-line.
 
write |𝑷( { set3->set~stringify( ) } ) ->|.
result_set = set3->build_powerset( ).
perform build_powerset using set3
changing result_set.
 
write result_set->set~stringify( ).
new-line.
 
 
form build_powerset using set type ref to set
changing powerset type ref to set.
 
data(powerset_elements) = value stringtab( ( `` ) ).
 
loop at set->get_elements( ) into data(element).
do lines( powerset_elements ) times.
if powerset_elements[ sy-index ] ne `∅`.
append |{ powerset_elements[ sy-index ] }{ element }| to powerset_elements.
else.
append element to powerset_elements.
endif.
enddo.
endloop.
 
powerset = new set( powerset_elements ).
endform.
</lang>
 
Anonymous user