룰렛 (Rullete)

시간 제한2초메모리 제한512 MB

요약
카드 다섯 장이 주어질 때, 무늬와 순위, 약수, 소인수, 비트 수를 이용해 값을 바꾸는 열네 가지 규칙을 순서대로 적용한 뒤 최종 값을 출력한다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현, 수학, 정수론
정답자
아직 제출이 없습니다

문제

Binary Casino는 어린이 동반 가족을 유치하기 위한 새 부서를 만들었다. 그 부서의 첫 업무 중 하나는 어린이가 하기 어렵지 않은 게임을 설계하는 것이다. 일주일간의 작업 끝에 나온 결과물이 Rullete라는 게임이다(철자는 이렇게 쓴다!).

각 플레이어는 5장의 카드를 받는다. 손에 든 카드는 첫 번째, 두 번째, ..., 다섯 번째 순서로 정렬된다. 각 카드는 랭크와 슈트로 표현된다. 카드의 랭크는 2, 3, ..., 10, J, Q, K, A 중 하나이고 슈트는 D, H, C, S(Diamonds, Hearts, Clubs, Spades) 중 하나다. 2부터 10까지의 카드는 랭크와 같은 점수를 갖고, J, Q, K, A는 모두 10점이다. 처음에 플레이어의 손 가치는 손에 든 카드 점수의 합으로 주어진다. 그다음 게임 규칙에 따라 손 가치가 바뀐다. 크루피에의 수고를 덜기 위해, 다음 열네 가지 규칙을 주어진 순서대로 모두 적용한 뒤 손의 최종 가치를 계산하는 것이 여러분의 과제다.

  1. 손에 카드가 4장 이상 있으면 가치에 1을 더한다. 그리고 손에 있는 J의 개수와 첫 번째 카드의 점수를 곱한 값을 가치에 더한다.
  2. 손에 같은 슈트의 카드가 2장 이상 있으면 가치에 2를 곱한다.
  3. 손에 모든 슈트의 카드가 각각 1장 이상 있으면 가치에 2를 곱한다.
  4. 손에 있는 검은색(Clubs, Spades) 카드 수와 빨간색(Hearts, Diamonds) 카드 수가 다르면 그 수의 차의 절댓값을 가치에 더한다.
  5. 현재 가치가 짝수이면 가치의 모든 양의 정수 약수(1과 가치 자신 포함)를 가치에 더한다.
  6. 손에 랭크 7인 카드가 정확히 4장 있으면 가치에서 112를 뺀다.
  7. 현재 가치가 음수가 아니면 손에서 가장 낮은 점수의 카드 점수를 가치에 더한다.
  8. 현재 가치가 음수이면 가치에 −1을 곱한다.
  9. 손에 Diamond 슈트 카드가 3장 이상 있으면 가치에 1을 더한 뒤, 손에 있는 모든 6의 랭크를 9로, 모든 9를 6으로, 모든 2를 5로, 모든 5를 2로 동시에 바꾼다.
  10. 손에 스트레이트가 있으면 손에 있는 A의 개수에 5를 곱한 값을 가치에 더한다.
  11. 지금까지 가치가 8개보다 많은 규칙에 의해 변경되었으면 가치의 이진 표현에서 1인 비트 수를 가치에 더한다.
  12. 손에 랭크 2인 카드가 1장 이상 있으면 가치를 마지막으로 바꾼 규칙을 한 번 더 적용한다(그 후 규칙 13으로 넘어간다).
  13. 손에 랭크 2인 카드가 1장 이상 있으면 가치의 모든 서로 다른 슈퍼팩터의 곱을 가치에 더한다. 슈퍼팩터란 가치를 나누어떨어지게 하는 가장 높은 정수 거듭제곱의 소수다.
  14. 가치가 674이면 승리한다!

스트레이트는 다음 순서에서 연속한 5장의 카드 집합이다: 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A.

입력

입력은 공백으로 구분된 다섯 개의 카드 설명이 있는 한 줄로 이루어진다. 각 카드 설명은 랭크 바로 뒤에 슈트가 온다.

출력

모든 규칙을 적용한 뒤의 점수를 출력한다.

예제2

  1. 예제 1

    입력
    2D 5D JD KC AC
    
    예상 출력
    170
    
  2. 예제 2

    입력
    QC 8D JD 10S 9D
    
    예상 출력
    126