Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
123
tasks_gen/train/G1069/faulty/m4_league_table.clas.abap
Normal file
123
tasks_gen/train/G1069/faulty/m4_league_table.clas.abap
Normal file
@@ -0,0 +1,123 @@
|
||||
CLASS {{p}}league_table DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_team TYPE c LENGTH 10.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_match,
|
||||
home_team TYPE ty_team,
|
||||
away_team TYPE ty_team,
|
||||
home_goals TYPE i,
|
||||
away_goals TYPE i,
|
||||
END OF ty_match.
|
||||
TYPES tt_match TYPE STANDARD TABLE OF ty_match WITH EMPTY KEY.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_row,
|
||||
rank TYPE i,
|
||||
team TYPE ty_team,
|
||||
played TYPE i,
|
||||
won TYPE i,
|
||||
drawn TYPE i,
|
||||
lost TYPE i,
|
||||
goals_for TYPE i,
|
||||
goals_against TYPE i,
|
||||
goal_diff TYPE i,
|
||||
points TYPE i,
|
||||
END OF ty_row.
|
||||
TYPES tt_row TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
|
||||
|
||||
METHODS evaluate
|
||||
IMPORTING it_matches TYPE tt_match
|
||||
RETURNING VALUE(rt_table) TYPE tt_row.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES tt_work TYPE HASHED TABLE OF ty_row WITH UNIQUE KEY team.
|
||||
|
||||
METHODS is_invalid
|
||||
IMPORTING is_match TYPE ty_match
|
||||
RETURNING VALUE(rv_bad) TYPE abap_bool.
|
||||
|
||||
METHODS add_result
|
||||
IMPORTING iv_team TYPE ty_team
|
||||
iv_goals_for TYPE i
|
||||
iv_goals_against TYPE i
|
||||
CHANGING ct_work TYPE tt_work.
|
||||
|
||||
METHODS assign_rank
|
||||
CHANGING ct_table TYPE tt_row.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}league_table IMPLEMENTATION.
|
||||
METHOD evaluate.
|
||||
DATA lt_work TYPE tt_work.
|
||||
|
||||
LOOP AT it_matches INTO DATA(ls_match).
|
||||
IF is_invalid( ls_match ) = abap_false.
|
||||
add_result( EXPORTING iv_team = ls_match-home_team
|
||||
iv_goals_for = ls_match-home_goals
|
||||
iv_goals_against = ls_match-away_goals
|
||||
CHANGING ct_work = lt_work ).
|
||||
add_result( EXPORTING iv_team = ls_match-away_team
|
||||
iv_goals_for = ls_match-away_goals
|
||||
iv_goals_against = ls_match-home_goals
|
||||
CHANGING ct_work = lt_work ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
rt_table = lt_work.
|
||||
SORT rt_table BY points DESCENDING
|
||||
goal_diff DESCENDING
|
||||
goals_for DESCENDING
|
||||
team ASCENDING.
|
||||
assign_rank( CHANGING ct_table = rt_table ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_invalid.
|
||||
rv_bad = xsdbool( is_match-home_team IS INITIAL
|
||||
OR is_match-away_team IS INITIAL
|
||||
OR is_match-home_team = is_match-away_team
|
||||
OR is_match-home_goals < 0
|
||||
OR is_match-away_goals < 0 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_result.
|
||||
ASSIGN ct_work[ team = iv_team ] TO FIELD-SYMBOL(<ls_row>).
|
||||
IF sy-subrc <> 0.
|
||||
INSERT VALUE ty_row( team = iv_team ) INTO TABLE ct_work ASSIGNING <ls_row>.
|
||||
ENDIF.
|
||||
|
||||
<ls_row>-played = <ls_row>-played + 1.
|
||||
<ls_row>-goals_for = <ls_row>-goals_for + iv_goals_for.
|
||||
<ls_row>-goals_against = <ls_row>-goals_against + iv_goals_against.
|
||||
<ls_row>-goal_diff = <ls_row>-goals_for - <ls_row>-goals_against.
|
||||
|
||||
IF iv_goals_for > iv_goals_against.
|
||||
<ls_row>-won = <ls_row>-won + 1.
|
||||
<ls_row>-points = <ls_row>-points + 3.
|
||||
ELSEIF iv_goals_for = iv_goals_against.
|
||||
<ls_row>-drawn = <ls_row>-drawn + 1.
|
||||
<ls_row>-points = <ls_row>-points + 1.
|
||||
ELSE.
|
||||
<ls_row>-lost = <ls_row>-lost + 1.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assign_rank.
|
||||
DATA lv_rank TYPE i.
|
||||
DATA lv_position TYPE i.
|
||||
DATA ls_previous TYPE ty_row.
|
||||
|
||||
LOOP AT ct_table ASSIGNING FIELD-SYMBOL(<ls_row>).
|
||||
lv_position = lv_position + 1.
|
||||
IF lv_position = 1
|
||||
OR <ls_row>-points <> ls_previous-points
|
||||
OR <ls_row>-goal_diff <> ls_previous-goal_diff
|
||||
OR <ls_row>-goals_for = ls_previous-goals_for.
|
||||
lv_rank = lv_position.
|
||||
ENDIF.
|
||||
<ls_row>-rank = lv_rank.
|
||||
ls_previous = <ls_row>.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user