login as:
~/abapcraft.dev — code, crafted in SAP
florin@abapcraft:~/abap/posts/exercism-abap/src/zcl_high_scores.clas.abap $ cat zcl_high_scores.clas.abap
exercism-abap / src / zcl_high_scores.clas.abap
ABAP 65 lines
CLASS zcl_high_scores DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    TYPES integertab TYPE STANDARD TABLE OF i WITH EMPTY KEY.
    METHODS constructor
      IMPORTING
        scores TYPE integertab.

    METHODS list_scores
      RETURNING
        VALUE(result) TYPE integertab.

    METHODS latest
      RETURNING
        VALUE(result) TYPE i.

    METHODS personalbest
      RETURNING
        VALUE(result) TYPE i.

    METHODS personaltopthree
      RETURNING
        VALUE(result) TYPE integertab.
  PROTECTED SECTION.
  PRIVATE SECTION.
    DATA scores_list TYPE integertab.

ENDCLASS.


CLASS zcl_high_scores IMPLEMENTATION.

  METHOD constructor.
    me->scores_list = scores.
  ENDMETHOD.

  METHOD list_scores.
    result = me->scores_list.
  ENDMETHOD.

  METHOD latest.
    result = VALUE #( me->scores_list[ lines( me->scores_list ) ] DEFAULT 0 ).
  ENDMETHOD.

  METHOD personalbest.
    result = REDUCE #( INIT best = 0 FOR scores_iterator IN me->scores_list
                       NEXT best = COND #( WHEN scores_iterator > best
                                           THEN scores_iterator
                                           ELSE best ) ).
  ENDMETHOD.

  METHOD personaltopthree.
    SORT me->scores_list BY table_line DESCENDING.

    result = VALUE #( FOR score_iterator IN me->scores_list
                      FROM 1 TO 3 ( score_iterator ) ).

  ENDMETHOD.

ENDCLASS.