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

  PUBLIC SECTION.
    METHODS score
      IMPORTING
        input         TYPE string OPTIONAL
      RETURNING
        VALUE(result) TYPE i.
  PROTECTED SECTION.
  PRIVATE SECTION.

ENDCLASS.


CLASS zcl_scrabble_score IMPLEMENTATION.

  METHOD score.

    DO strlen( input ) TIMES.

      DATA(offset) = sy-index - 1.

      DATA(letter_to_assess) = input+offset(1).

      DATA(letter_score) = COND #(
                            WHEN letter_to_assess CA 'AEIOULNRSTaeioulnrst'  THEN 1
                            WHEN letter_to_assess CA 'DGdg'                  THEN 2
                            WHEN letter_to_assess CA 'BCMPbcmp'              THEN 3
                            WHEN letter_to_assess CA 'FHVWYfhvwy'            THEN 4
                            WHEN letter_to_assess CA 'Kk'                    THEN 5
                            WHEN letter_to_assess CA 'JXjx'                  THEN 8
                            WHEN letter_to_assess CA 'QZqz'                  THEN 10
                            ELSE 0
       ).

      result = result + letter_score.

    ENDDO.

*    result = count( val = input regex = '[aeioulnrst]' case = abap_false ) * 1 +
*                 count( val = input regex = '[dg]' case = abap_false ) * 2 +
*                 count( val = input regex = '[bcmp]' case = abap_false ) * 3 +
*                 count( val = input regex = '[fhvwy]' case = abap_false ) * 4 +
*                 count( val = input regex = '[k]' case = abap_false ) * 5 +
*                 count( val = input regex = '[jx]' case = abap_false ) * 8 +
*                 count( val = input regex = '[qz]' case = abap_false ) * 10.

*result =
*  REDUCE string( INIT s = 0
*                 FOR  i = 0 WHILE i < strlen( input )
*                 NEXT s += COND i( LET current_val = to_upper( input+i(1) ) IN
*                 WHEN contains( val = 'AEIOULNRST' sub = current_val ) THEN 1
*                 WHEN contains( val = 'DG' sub = current_val ) THEN 2
*                 WHEN contains( val = 'BCMP' sub = current_val ) THEN 3
*                 WHEN contains( val = 'FHVWY' sub = current_val ) THEN 4
*                 WHEN contains( val = 'K' sub = current_val ) THEN 5
*                 WHEN contains( val = 'JX' sub = current_val ) THEN 8
*                 WHEN contains( val = 'QZ' sub = current_val ) THEN 10
*                 ELSE 0
*                 ) ).

  ENDMETHOD.

ENDCLASS.