Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View File

@@ -0,0 +1,96 @@
CLASS {{p}}keg_tour_merger DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_entry,
pub_id TYPE c LENGTH 8,
keg_type TYPE c LENGTH 4,
kegs TYPE i,
END OF ty_entry,
tt_entry TYPE STANDARD TABLE OF ty_entry WITH EMPTY KEY,
BEGIN OF ty_pub,
pub_id TYPE c LENGTH 8,
kegs TYPE i,
END OF ty_pub,
tt_pub TYPE STANDARD TABLE OF ty_pub WITH EMPTY KEY.
METHODS merge_tours
IMPORTING it_tour_a TYPE tt_entry
it_tour_b TYPE tt_entry
RETURNING VALUE(rt_tour) TYPE tt_entry.
METHODS top_pubs
IMPORTING it_tour TYPE tt_entry
iv_count TYPE i
RETURNING VALUE(rt_pubs) TYPE tt_pub.
PRIVATE SECTION.
TYPES tt_agg TYPE HASHED TABLE OF ty_entry WITH UNIQUE KEY pub_id keg_type.
TYPES tt_pub_agg TYPE HASHED TABLE OF ty_pub WITH UNIQUE KEY pub_id.
METHODS add_entries
IMPORTING it_tour TYPE tt_entry
CHANGING ct_agg TYPE tt_agg.
METHODS add_pubs
IMPORTING it_tour TYPE tt_entry
CHANGING ct_pub TYPE tt_pub_agg.
ENDCLASS.
CLASS {{p}}keg_tour_merger IMPLEMENTATION.
METHOD merge_tours.
DATA lt_agg TYPE tt_agg.
add_entries( EXPORTING it_tour = it_tour_a CHANGING ct_agg = lt_agg ).
add_entries( EXPORTING it_tour = it_tour_b CHANGING ct_agg = lt_agg ).
rt_tour = lt_agg.
SORT rt_tour BY pub_id keg_type.
ENDMETHOD.
METHOD top_pubs.
IF iv_count < 1.
RETURN.
ENDIF.
DATA lt_agg TYPE tt_pub_agg.
add_pubs( EXPORTING it_tour = it_tour CHANGING ct_pub = lt_agg ).
rt_pubs = lt_agg.
SORT rt_pubs BY kegs DESCENDING pub_id ASCENDING.
DATA(lv_from) = iv_count + 1.
IF lines( rt_pubs ) >= lv_from.
DELETE rt_pubs FROM lv_from.
ENDIF.
ENDMETHOD.
METHOD add_entries.
LOOP AT it_tour INTO DATA(ls_entry).
IF ls_entry-kegs < 1.
CONTINUE.
ENDIF.
DATA(ls_norm) = VALUE ty_entry( pub_id = to_upper( ls_entry-pub_id )
keg_type = to_upper( ls_entry-keg_type )
kegs = ls_entry-kegs ).
ASSIGN ct_agg[ pub_id = ls_norm-pub_id
keg_type = ls_norm-keg_type ] TO FIELD-SYMBOL(<ls_agg>).
IF sy-subrc = 0.
<ls_agg>-kegs = <ls_agg>-kegs + ls_norm-kegs.
ELSE.
INSERT ls_norm INTO TABLE ct_agg.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD add_pubs.
LOOP AT it_tour INTO DATA(ls_entry).
IF ls_entry-kegs < 1.
CONTINUE.
ENDIF.
DATA(lv_pub_id) = to_upper( ls_entry-pub_id ).
ASSIGN ct_pub[ pub_id = lv_pub_id ] TO FIELD-SYMBOL(<ls_pub>).
IF sy-subrc = 0.
<ls_pub>-kegs = <ls_pub>-kegs + ls_entry-kegs.
ELSE.
DATA(ls_new) = VALUE ty_pub( pub_id = lv_pub_id kegs = ls_entry-kegs ).
INSERT ls_new INTO TABLE ct_pub.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,87 @@
CLASS ltc_keg_tour_merger DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}keg_tour_merger.
METHODS setup.
METHODS merges_two_lists FOR TESTING.
METHODS adds_same_key FOR TESTING.
METHODS ignores_invalid_kegs FOR TESTING.
METHODS returns_empty_list FOR TESTING.
METHODS ranks_pubs FOR TESTING.
METHODS limits_ranked_pubs FOR TESTING.
ENDCLASS.
CLASS ltc_keg_tour_merger IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}keg_tour_merger( ).
ENDMETHOD.
METHOD merges_two_lists.
DATA(lt_a) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 10 ) ).
DATA(lt_b) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P02' keg_type = 'PIL' kegs = 7 ) ).
DATA(lt_exp) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 10 )
( pub_id = 'P02' keg_type = 'PIL' kegs = 7 ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->merge_tours( it_tour_a = lt_a it_tour_b = lt_b ) ).
ENDMETHOD.
METHOD adds_same_key.
DATA(lt_a) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'p01' keg_type = 'lag' kegs = 4 ) ).
DATA(lt_b) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 6 ) ).
DATA(lt_exp) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 10 ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->merge_tours( it_tour_a = lt_a it_tour_b = lt_b ) ).
ENDMETHOD.
METHOD ignores_invalid_kegs.
DATA(lt_a) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 0 )
( pub_id = 'P02' keg_type = 'LAG' kegs = -2 )
( pub_id = 'P03' keg_type = 'LAG' kegs = 8 ) ).
DATA(lt_exp) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P03' keg_type = 'LAG' kegs = 8 ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->merge_tours( it_tour_a = lt_a
it_tour_b = VALUE #( ) ) ).
ENDMETHOD.
METHOD returns_empty_list.
DATA(lt_act) = mo_cut->merge_tours( it_tour_a = VALUE #( )
it_tour_b = VALUE #( ) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_act ) ).
ENDMETHOD.
METHOD ranks_pubs.
DATA(lt_tour) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 5 )
( pub_id = 'P02' keg_type = 'LAG' kegs = 5 )
( pub_id = 'P03' keg_type = 'LAG' kegs = 11 ) ).
DATA(lt_exp) = VALUE {{p}}keg_tour_merger=>tt_pub(
( pub_id = 'P03' kegs = 11 )
( pub_id = 'P01' kegs = 5 )
( pub_id = 'P02' kegs = 5 ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->top_pubs( it_tour = lt_tour iv_count = 3 ) ).
ENDMETHOD.
METHOD limits_ranked_pubs.
DATA(lt_tour) = VALUE {{p}}keg_tour_merger=>tt_entry(
( pub_id = 'P01' keg_type = 'LAG' kegs = 5 )
( pub_id = 'P02' keg_type = 'LAG' kegs = 9 ) ).
DATA(lt_exp) = VALUE {{p}}keg_tour_merger=>tt_pub(
( pub_id = 'P02' kegs = 9 ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->top_pubs( it_tour = lt_tour iv_count = 1 ) ).
ENDMETHOD.
ENDCLASS.