상세 컨텐츠

본문 제목

CLASS TEST #2 : Scrabble Score

ABAP

by Kiroc 2024. 1. 12. 14:32

본문

 

https://exercism.org/tracks/abap/exercises/scrabble-score/solutions

 

 

Community solutions for Scrabble Score in ABAP on Exercism

Explore other people's solutions to Scrabble Score in ABAP, and learn how others have solved the exercise.

exercism.org

 

문자열에서 특정 알파벳을 포함할 시

점수를 계산해서 return 하는 메소드 작성을 하는 퀴즈.

주의할 점은 대소문자를 고려해서 작성해야 한다는 점.

코드 테스트시 다양한 input문을 집어넣어 적절히 계산하는지 보는 듯 하다.

 

내가 작성한 답변은

 

CLASS zcl_scrabble_score DEFINITION PUBLIC .
  PUBLIC SECTION.
        DATA : gs_str TYPE string,
           gv_len TYPE I,
           gv_1   TYPE I,
           gv_2   TYPE I,
           gv_3   TYPE I,
           gv_4   TYPE I,
           gv_5   TYPE I,
           gv_8   TYPE I,
           gv_10  TYPE I,
           INPUT TYPE STRING.


    METHODS score
      IMPORTING
        input         TYPE string OPTIONAL
      RETURNING
        VALUE(result) TYPE i.


  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.


CLASS zcl_scrabble_score IMPLEMENTATION.


  METHOD score.
    " add solution here
    CLEAR gs_str.
    gv_len = strlen( input ).


    DO gv_len TIMES.
      gv_len = gv_len - 1.
      gs_str = input+0(1).


      IF gs_str CA 'AaEeIiOoUuLlNnRrSsTt'.
        ADD 1 TO gv_1.
      ELSEIF gs_str CA 'DdGg'.
        ADD 1 TO gv_2.
      ELSEIF gs_str CA 'BbCcMmPp'.
        ADD 1 TO gv_3.
      ELSEIF gs_str CA 'FfHhVvWwYy'.
        ADD 1 TO gv_4.
      ELSEIF gs_str CA 'Kk'.
        ADD 1 TO gv_5.
      ELSEIF gs_str CA 'JjXx'.
        ADD 1 TO gv_8.
      ELSEIF gs_str CA 'QqZz'.
        ADD 1 TO gv_10.
      ENDIF.
      input = input+1(gv_len).
    ENDDO.


    result = gv_1 + ( 2 * gv_2 ) + ( 3 * gv_3 ) + ( 4 * gv_4 ) + ( 5 * gv_5 ) + ( 8 * gv_8 ) + ( 10 * gv_10 ).
  ENDMETHOD.


ENDCLASS.

 

다른 사람의 답변 중 괜찮았던 것은 

 

  METHOD score.
    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. "false인 경우 대소문자 구분 x
  ENDMETHOD.

 

관련글 더보기