Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
180
Task/Power-set/ABAP/power-set.abap
Normal file
180
Task/Power-set/ABAP/power-set.abap
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
report z_powerset.
|
||||
|
||||
interface set.
|
||||
methods:
|
||||
add_element
|
||||
importing
|
||||
element_to_be_added type any
|
||||
returning
|
||||
value(new_set) type ref to set,
|
||||
|
||||
remove_element
|
||||
importing
|
||||
element_to_be_removed type any
|
||||
returning
|
||||
value(new_set) type ref to set,
|
||||
|
||||
contains_element
|
||||
importing
|
||||
element_to_be_found type any
|
||||
returning
|
||||
value(contains) type abap_bool,
|
||||
|
||||
get_size
|
||||
returning
|
||||
value(size) type int4,
|
||||
|
||||
is_equal
|
||||
importing
|
||||
set_to_be_compared_with type ref to set
|
||||
returning
|
||||
value(equal) type abap_bool,
|
||||
|
||||
get_elements
|
||||
exporting
|
||||
elements type any table,
|
||||
|
||||
stringify
|
||||
returning
|
||||
value(stringified_set) type string.
|
||||
endinterface.
|
||||
|
||||
|
||||
class string_set definition.
|
||||
public section.
|
||||
interfaces:
|
||||
set.
|
||||
|
||||
|
||||
methods:
|
||||
constructor
|
||||
importing
|
||||
elements type stringtab optional,
|
||||
|
||||
build_powerset
|
||||
returning
|
||||
value(powerset) type ref to string_set.
|
||||
|
||||
|
||||
private section.
|
||||
data elements type stringtab.
|
||||
endclass.
|
||||
|
||||
|
||||
class string_set implementation.
|
||||
method constructor.
|
||||
loop at elements into data(element).
|
||||
me->set~add_element( element ).
|
||||
endloop.
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~add_element.
|
||||
if not line_exists( me->elements[ table_line = element_to_be_added ] ).
|
||||
append element_to_be_added to me->elements.
|
||||
endif.
|
||||
|
||||
new_set = me.
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~remove_element.
|
||||
if line_exists( me->elements[ table_line = element_to_be_removed ] ).
|
||||
delete me->elements where table_line = element_to_be_removed.
|
||||
endif.
|
||||
|
||||
new_set = me.
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~contains_element.
|
||||
contains = cond abap_bool(
|
||||
when line_exists( me->elements[ table_line = element_to_be_found ] )
|
||||
then abap_true
|
||||
else abap_false ).
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~get_size.
|
||||
size = lines( me->elements ).
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~is_equal.
|
||||
if set_to_be_compared_with->get_size( ) ne me->set~get_size( ).
|
||||
equal = abap_false.
|
||||
|
||||
return.
|
||||
endif.
|
||||
|
||||
loop at me->elements into data(element).
|
||||
if not set_to_be_compared_with->contains_element( element ).
|
||||
equal = abap_false.
|
||||
|
||||
return.
|
||||
endif.
|
||||
endloop.
|
||||
|
||||
equal = abap_true.
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~get_elements.
|
||||
elements = me->elements.
|
||||
endmethod.
|
||||
|
||||
|
||||
method set~stringify.
|
||||
stringified_set = cond string(
|
||||
when me->elements is initial
|
||||
then `∅`
|
||||
when me->elements eq value stringtab( ( `∅` ) )
|
||||
then `{ ∅ }`
|
||||
else reduce string(
|
||||
init result = `{ `
|
||||
for element in me->elements
|
||||
next result = cond string(
|
||||
when element eq ``
|
||||
then |{ result }∅, |
|
||||
when strlen( element ) eq 1 and element ne `∅`
|
||||
then |{ result }{ element }, |
|
||||
else |{ result }\{{ element }\}, | ) ) ).
|
||||
|
||||
stringified_set = replace(
|
||||
val = stringified_set
|
||||
regex = `, $`
|
||||
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.
|
||||
|
||||
powerset = new string_set( powerset_elements ).
|
||||
endmethod.
|
||||
endclass.
|
||||
|
||||
|
||||
start-of-selection.
|
||||
data(set1) = new string_set( ).
|
||||
data(set2) = new string_set( ).
|
||||
data(set3) = new string_set( ).
|
||||
|
||||
write: |𝑷( { set1->set~stringify( ) } ) -> { set1->build_powerset( )->set~stringify( ) }|, /.
|
||||
|
||||
set2->set~add_element( `∅` ).
|
||||
write: |𝑷( { set2->set~stringify( ) } ) -> { set2->build_powerset( )->set~stringify( ) }|, /.
|
||||
|
||||
set3->set~add_element( `1` )->add_element( `2` )->add_element( `3` )->add_element( `3` )->add_element( `4`
|
||||
)->add_element( `4` )->add_element( `4` ).
|
||||
write: |𝑷( { set3->set~stringify( ) } ) -> { set3->build_powerset( )->set~stringify( ) }|, /.
|
||||
Loading…
Add table
Add a link
Reference in a new issue