Power set: Difference between revisions

Content added Content deleted
m (→‎Module: ntheory: add libheader)
No edit summary
Line 39: Line 39:
report z_powerset.
report z_powerset.


interface set.
class set definition.
methods:
public section.
methods:
add_element
constructor
importing
importing
i_element type any
exporting
i_elements type stringtab optional,
e_set type any table,


add_element
remove_element
importing
importing
i_element type string
i_element type any,
returning
value(r_set) type stringtab,


contains_element
remove_element
importing
importing
i_element type string,
i_element type any
returning
value(r_contains) type abap_bool,


get_size
contains_element
importing
returning
i_element type string
value(r_size) type int4,
returning
value(r_contains) type abap_bool,


get_size
is_equal
returning
importing
value(r_size) type int4,
i_set type ref to set
returning
value(r_is_equal) type abap_bool,


is_equal
get_elements
exporting
e_elements type any table,

stringify
returning
value(r_string) type string.
endinterface.


class string_set definition.
public section.
interfaces:
set.


methods:
constructor
importing
importing
i_set type ref to set
i_elements type stringtab optional,
returning
value(r_is_equal) type abap_bool,

get_elements
returning
value(r_elements) type stringtab,


stringify
build_powerset
returning
returning
value(r_string) type string.
value(r_powerset) type ref to string_set.




Line 86: Line 98:




class set implementation.
class string_set implementation.
method constructor.
method constructor.
loop at i_elements into data(element).
loop at i_elements into data(element).
me->add_element( element ).
me->set~add_element( element ).
endloop.
endloop.
endmethod.
endmethod.




method add_element.
method set~add_element.
if not line_exists( me->elements[ table_line = i_element ] ).
if not line_exists( me->elements[ table_line = i_element ] ).
append i_element to me->elements.
append i_element to me->elements.
Line 101: Line 113:




method remove_element.
method set~remove_element.
if line_exists( me->elements[ table_line = i_element ] ).
if line_exists( me->elements[ table_line = i_element ] ).
delete me->elements where table_line = i_element.
delete me->elements where table_line = i_element.
Line 108: Line 120:




method contains_element.
method set~contains_element.
r_contains = cond abap_bool(
r_contains = cond abap_bool(
when line_exists( me->elements[ table_line = i_element ] )
when line_exists( me->elements[ table_line = i_element ] )
Line 116: Line 128:




method get_size.
method set~get_size.
r_size = lines( me->elements ).
r_size = lines( me->elements ).
endmethod.
endmethod.




method is_equal.
method set~is_equal.
if i_set->get_size( ) ne me->get_size( ).
if i_set->get_size( ) ne me->set~get_size( ).
r_is_equal = abap_false.
r_is_equal = abap_false.
return.
return.
Line 138: Line 150:




method get_elements.
method set~get_elements.
r_elements = me->elements.
e_elements = me->elements.
endmethod.
endmethod.




method stringify.
method set~stringify.
r_string = cond string(
r_string = cond string(
when me->elements is initial
when me->elements is initial
Line 163: Line 175:
regex = `, $`
regex = `, $`
with = ` }`).
with = ` }`).
endmethod.


method build_powerset.
data(powerset_elements) = value stringtab( ( `` ) ).

loop at me->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.

r_powerset = new string_set( powerset_elements ).
endmethod.
endmethod.
endclass.
endclass.
Line 168: Line 197:


start-of-selection.
start-of-selection.
data(result_set) = new set( ).
data(result_set) = new string_set( ).
data(set1) = new set( ).
data(set1) = new string_set( ).
data(set2) = new set( value stringtab( ( `∅` ) ) ).
data(set2) = new string_set( value stringtab( ( `∅` ) ) ).
data(set3) = new set( value stringtab( ( `1` ) ( `2` ) ( `3` ) ( `3` ) ( `4` ) ( `4` ) ( `4` ) ) ).
data(set3) = new string_set( value stringtab( ( `1` ) ( `2` ) ( `3` ) ( `3` ) ( `4` ) ( `4` ) ( `4` ) ) ).


write |𝑷( { set1->stringify( ) } ) ->|.
write |𝑷( { set1->set~stringify( ) } ) ->|.
result_set = set1->build_powerset( ).
perform build_powerset using set1
changing result_set.


write result_set->stringify( ).
write result_set->set~stringify( ).
new-line.
new-line.


write |𝑷( { set2->stringify( ) } ) ->|.
write |𝑷( { set2->set~stringify( ) } ) ->|.
result_set = set2->build_powerset( ).
perform build_powerset using set2
changing result_set.


write result_set->stringify( ).
write result_set->set~stringify( ).
new-line.
new-line.


write |𝑷( { set3->stringify( ) } ) ->|.
write |𝑷( { set3->set~stringify( ) } ) ->|.
result_set = set3->build_powerset( ).
perform build_powerset using set3
changing result_set.


write result_set->stringify( ).
write result_set->set~stringify( ).
new-line.
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>
</lang>