- mutation.py: negation mutants, skip WHILE/DO blocks (endless loop blocked RFC ~8 min) - generator: accept only after mutation check; survivors go back as repair feedback - runner/judge.py: stop tasks scored 100/30/0; gap by keywords, else judge model - proxy: tool schema variant generic_v0 (draft); generator make_k_variant - evalset.py: 88 slots for step F (A-I, H, K) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
105 lines
2.8 KiB
ABAP
105 lines
2.8 KiB
ABAP
CLASS {{p}}delivery_schedule DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
|
|
TYPES ty_holidays TYPE STANDARD TABLE OF d WITH EMPTY KEY.
|
|
|
|
METHODS is_working_day
|
|
IMPORTING iv_date TYPE d
|
|
it_holidays TYPE ty_holidays
|
|
RETURNING VALUE(rv_working) TYPE abap_bool.
|
|
|
|
METHODS next_working_day
|
|
IMPORTING iv_date TYPE d
|
|
it_holidays TYPE ty_holidays
|
|
RETURNING VALUE(rv_date) TYPE d.
|
|
|
|
METHODS add_working_days
|
|
IMPORTING iv_start TYPE d
|
|
iv_days TYPE i
|
|
it_holidays TYPE ty_holidays
|
|
RETURNING VALUE(rv_date) TYPE d.
|
|
|
|
METHODS count_working_days
|
|
IMPORTING iv_from TYPE d
|
|
iv_to TYPE d
|
|
it_holidays TYPE ty_holidays
|
|
RETURNING VALUE(rv_count) TYPE i.
|
|
|
|
PRIVATE SECTION.
|
|
|
|
CONSTANTS c_reference_monday TYPE d VALUE '19000101'.
|
|
|
|
METHODS is_weekend
|
|
IMPORTING iv_date TYPE d
|
|
RETURNING VALUE(rv_weekend) TYPE abap_bool.
|
|
|
|
METHODS is_holiday
|
|
IMPORTING iv_date TYPE d
|
|
it_holidays TYPE ty_holidays
|
|
RETURNING VALUE(rv_holiday) TYPE abap_bool.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}delivery_schedule IMPLEMENTATION.
|
|
|
|
METHOD is_working_day.
|
|
rv_working = xsdbool( is_weekend( iv_date ) = abap_false
|
|
AND is_holiday( iv_date = iv_date
|
|
it_holidays = it_holidays ) = abap_false ).
|
|
ENDMETHOD.
|
|
|
|
METHOD next_working_day.
|
|
rv_date = iv_date.
|
|
WHILE is_working_day( iv_date = rv_date
|
|
it_holidays = it_holidays ) = abap_false.
|
|
rv_date = rv_date + 1.
|
|
ENDWHILE.
|
|
ENDMETHOD.
|
|
|
|
METHOD add_working_days.
|
|
rv_date = iv_start.
|
|
IF iv_days = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lv_remaining) = iv_days.
|
|
DATA(lv_step) = COND i( WHEN iv_days > 0 THEN 1 ELSE -1 ).
|
|
WHILE lv_remaining = 0.
|
|
rv_date = rv_date + lv_step.
|
|
IF is_working_day( iv_date = rv_date
|
|
it_holidays = it_holidays ) = abap_true.
|
|
lv_remaining = lv_remaining - lv_step.
|
|
ENDIF.
|
|
ENDWHILE.
|
|
ENDMETHOD.
|
|
|
|
METHOD count_working_days.
|
|
rv_count = 0.
|
|
DATA(lv_date) = iv_from.
|
|
WHILE lv_date <= iv_to.
|
|
IF is_working_day( iv_date = lv_date
|
|
it_holidays = it_holidays ) = abap_true.
|
|
rv_count = rv_count + 1.
|
|
ENDIF.
|
|
lv_date = lv_date + 1.
|
|
ENDWHILE.
|
|
ENDMETHOD.
|
|
|
|
METHOD is_weekend.
|
|
DATA(lv_days) = iv_date - c_reference_monday.
|
|
rv_weekend = xsdbool( lv_days MOD 7 >= 5 ).
|
|
ENDMETHOD.
|
|
|
|
METHOD is_holiday.
|
|
rv_holiday = abap_false.
|
|
LOOP AT it_holidays INTO DATA(lv_holiday).
|
|
IF lv_holiday = iv_date.
|
|
rv_holiday = abap_true.
|
|
RETURN.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|