Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
116
tasks_gen/train/G1053/faulty/m2_rack_billing.clas.abap
Normal file
116
tasks_gen/train/G1053/faulty/m2_rack_billing.clas.abap
Normal file
@@ -0,0 +1,116 @@
|
||||
CLASS {{p}}rack_billing DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_size TYPE c LENGTH 1.
|
||||
TYPES ty_power TYPE c LENGTH 1.
|
||||
TYPES ty_customer TYPE c LENGTH 10.
|
||||
TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_rack,
|
||||
rack_id TYPE c LENGTH 10,
|
||||
customer TYPE ty_customer,
|
||||
size_class TYPE ty_size,
|
||||
power_class TYPE ty_power,
|
||||
END OF ty_rack.
|
||||
TYPES tt_racks TYPE STANDARD TABLE OF ty_rack WITH EMPTY KEY.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_bill,
|
||||
customer TYPE ty_customer,
|
||||
rack_count TYPE i,
|
||||
total_fee TYPE ty_fee,
|
||||
END OF ty_bill.
|
||||
TYPES tt_bills TYPE STANDARD TABLE OF ty_bill WITH EMPTY KEY.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING it_racks TYPE tt_racks
|
||||
RETURNING VALUE(rt_bills) TYPE tt_bills.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_price,
|
||||
size_class TYPE ty_size,
|
||||
power_class TYPE ty_power,
|
||||
fee TYPE ty_fee,
|
||||
END OF ty_price.
|
||||
TYPES tt_prices TYPE HASHED TABLE OF ty_price WITH UNIQUE KEY size_class power_class.
|
||||
TYPES tt_seen TYPE HASHED TABLE OF ty_rack WITH UNIQUE KEY rack_id.
|
||||
TYPES tt_bill_hash TYPE HASHED TABLE OF ty_bill WITH UNIQUE KEY customer.
|
||||
|
||||
METHODS price_list
|
||||
RETURNING VALUE(rt_prices) TYPE tt_prices.
|
||||
METHODS rack_fee
|
||||
IMPORTING is_rack TYPE ty_rack
|
||||
it_prices TYPE tt_prices
|
||||
RETURNING VALUE(rv_fee) TYPE ty_fee.
|
||||
METHODS discount_percent
|
||||
IMPORTING iv_count TYPE i
|
||||
RETURNING VALUE(rv_percent) TYPE i.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}rack_billing IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
DATA(lt_prices) = price_list( ).
|
||||
DATA lt_seen TYPE tt_seen.
|
||||
DATA lt_bills TYPE tt_bill_hash.
|
||||
|
||||
LOOP AT it_racks INTO DATA(ls_rack).
|
||||
INSERT ls_rack INTO TABLE lt_seen.
|
||||
IF sy-subrc <> 0.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
DATA(lv_fee) = rack_fee( is_rack = ls_rack it_prices = lt_prices ).
|
||||
IF lv_fee IS INITIAL.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
ASSIGN lt_bills[ customer = ls_rack-customer ] TO FIELD-SYMBOL(<ls_bill>).
|
||||
IF sy-subrc <> 0.
|
||||
INSERT VALUE #( customer = ls_rack-customer ) INTO TABLE lt_bills ASSIGNING <ls_bill>.
|
||||
ENDIF.
|
||||
<ls_bill>-rack_count = <ls_bill>-rack_count + 1.
|
||||
<ls_bill>-total_fee = <ls_bill>-total_fee + lv_fee.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_bills ASSIGNING <ls_bill>.
|
||||
DATA(lv_percent) = discount_percent( <ls_bill>-rack_count ).
|
||||
<ls_bill>-total_fee = <ls_bill>-total_fee * ( 101 - lv_percent ) / 100.
|
||||
INSERT VALUE #( customer = <ls_bill>-customer
|
||||
rack_count = <ls_bill>-rack_count
|
||||
total_fee = <ls_bill>-total_fee ) INTO TABLE rt_bills.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_bills BY customer.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD price_list.
|
||||
rt_prices = VALUE #(
|
||||
( size_class = 'S' power_class = 'A' fee = '50.00' )
|
||||
( size_class = 'S' power_class = 'B' fee = '80.00' )
|
||||
( size_class = 'S' power_class = 'C' fee = '120.00' )
|
||||
( size_class = 'M' power_class = 'A' fee = '120.00' )
|
||||
( size_class = 'M' power_class = 'B' fee = '150.00' )
|
||||
( size_class = 'M' power_class = 'C' fee = '190.00' )
|
||||
( size_class = 'L' power_class = 'A' fee = '250.00' )
|
||||
( size_class = 'L' power_class = 'B' fee = '280.00' )
|
||||
( size_class = 'L' power_class = 'C' fee = '320.00' ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rack_fee.
|
||||
ASSIGN it_prices[ size_class = is_rack-size_class power_class = is_rack-power_class ]
|
||||
TO FIELD-SYMBOL(<ls_price>).
|
||||
IF sy-subrc = 0.
|
||||
rv_fee = <ls_price>-fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discount_percent.
|
||||
IF iv_count >= 20.
|
||||
rv_percent = 20.
|
||||
ELSEIF iv_count >= 10.
|
||||
rv_percent = 10.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user