Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
96
tasks_gen/train/G1073/reference/parking_eval.clas.abap
Normal file
96
tasks_gen/train/G1073/reference/parking_eval.clas.abap
Normal file
@@ -0,0 +1,96 @@
|
||||
CLASS {{p}}parking_eval DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_park_eval.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
ty_amount TYPE p LENGTH 8 DECIMALS 2,
|
||||
BEGIN OF ty_total,
|
||||
park_id TYPE {{p}}if_park_eval=>ty_park_id,
|
||||
session_cnt TYPE i,
|
||||
total_min TYPE i,
|
||||
total_fee TYPE ty_amount,
|
||||
END OF ty_total,
|
||||
tt_total TYPE HASHED TABLE OF ty_total WITH UNIQUE KEY park_id.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_tariff,
|
||||
a TYPE {{p}}if_park_eval=>ty_tariff VALUE 'A',
|
||||
b TYPE {{p}}if_park_eval=>ty_tariff VALUE 'B',
|
||||
c TYPE {{p}}if_park_eval=>ty_tariff VALUE 'C',
|
||||
END OF c_tariff.
|
||||
|
||||
CONSTANTS:
|
||||
c_free_min TYPE i VALUE 30,
|
||||
c_max_fee TYPE ty_amount VALUE '20.00',
|
||||
c_rate_a TYPE ty_amount VALUE '2.00',
|
||||
c_rate_b TYPE ty_amount VALUE '3.50',
|
||||
c_rate_c TYPE ty_amount VALUE '5.00'.
|
||||
|
||||
METHODS is_valid
|
||||
IMPORTING is_session TYPE {{p}}if_park_eval=>ty_session
|
||||
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
||||
METHODS fee
|
||||
IMPORTING is_session TYPE {{p}}if_park_eval=>ty_session
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS rate
|
||||
IMPORTING iv_tariff TYPE {{p}}if_park_eval=>ty_tariff
|
||||
RETURNING VALUE(rv_rate) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}parking_eval IMPLEMENTATION.
|
||||
METHOD {{p}}if_park_eval~summarize.
|
||||
DATA lt_total TYPE tt_total.
|
||||
|
||||
LOOP AT it_session INTO DATA(ls_session).
|
||||
IF is_valid( ls_session ) = abap_false.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_total WITH TABLE KEY park_id = ls_session-park_id
|
||||
ASSIGNING FIELD-SYMBOL(<ls_total>).
|
||||
IF sy-subrc <> 0.
|
||||
INSERT INITIAL LINE INTO TABLE lt_total ASSIGNING <ls_total>.
|
||||
<ls_total>-park_id = ls_session-park_id.
|
||||
ENDIF.
|
||||
|
||||
<ls_total>-session_cnt += 1.
|
||||
<ls_total>-total_min += ls_session-duration_min.
|
||||
<ls_total>-total_fee += fee( ls_session ).
|
||||
ENDLOOP.
|
||||
|
||||
rt_summary = CORRESPONDING #( lt_total ).
|
||||
SORT rt_summary BY park_id.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_valid.
|
||||
rv_valid = xsdbool( is_session-duration_min > 0 AND rate( is_session-tariff ) > 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fee.
|
||||
IF is_session-duration_min <= c_free_min.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
DATA(lv_hours) = ( is_session-duration_min - c_free_min + 59 ) DIV 60.
|
||||
rv_fee = lv_hours * rate( is_session-tariff ).
|
||||
|
||||
IF rv_fee > c_max_fee.
|
||||
rv_fee = c_max_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rate.
|
||||
CASE iv_tariff.
|
||||
WHEN c_tariff-a.
|
||||
rv_rate = c_rate_a.
|
||||
WHEN c_tariff-b.
|
||||
rv_rate = c_rate_b.
|
||||
WHEN c_tariff-c.
|
||||
rv_rate = c_rate_c.
|
||||
WHEN OTHERS.
|
||||
rv_rate = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user