룰렛 (Rullete)
시간 제한2초메모리 제한512 MB
카드 다섯 장이 주어질 때, 무늬와 순위, 약수, 소인수, 비트 수를 이용해 값을 바꾸는 열네 가지 규칙을 순서대로 적용한 뒤 최종 값을 출력한다.
문제
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점이다. 처음에 플레이어의 손 가치는 손에 든 카드 점수의 합으로 주어진다. 그다음 게임 규칙에 따라 손 가치가 바뀐다. 크루피에의 수고를 덜기 위해, 다음 열네 가지 규칙을 주어진 순서대로 모두 적용한 뒤 손의 최종 가치를 계산하는 것이 여러분의 과제다.
- 손에 카드가 4장 이상 있으면 가치에 1을 더한다. 그리고 손에 있는 J의 개수와 첫 번째 카드의 점수를 곱한 값을 가치에 더한다.
- 손에 같은 슈트의 카드가 2장 이상 있으면 가치에 2를 곱한다.
- 손에 모든 슈트의 카드가 각각 1장 이상 있으면 가치에 2를 곱한다.
- 손에 있는 검은색(Clubs, Spades) 카드 수와 빨간색(Hearts, Diamonds) 카드 수가 다르면 그 수의 차의 절댓값을 가치에 더한다.
- 현재 가치가 짝수이면 가치의 모든 양의 정수 약수(1과 가치 자신 포함)를 가치에 더한다.
- 손에 랭크 7인 카드가 정확히 4장 있으면 가치에서 112를 뺀다.
- 현재 가치가 음수가 아니면 손에서 가장 낮은 점수의 카드 점수를 가치에 더한다.
- 현재 가치가 음수이면 가치에 −1을 곱한다.
- 손에 Diamond 슈트 카드가 3장 이상 있으면 가치에 1을 더한 뒤, 손에 있는 모든 6의 랭크를 9로, 모든 9를 6으로, 모든 2를 5로, 모든 5를 2로 동시에 바꾼다.
- 손에 스트레이트가 있으면 손에 있는 A의 개수에 5를 곱한 값을 가치에 더한다.
- 지금까지 가치가 8개보다 많은 규칙에 의해 변경되었으면 가치의 이진 표현에서 1인 비트 수를 가치에 더한다.
- 손에 랭크 2인 카드가 1장 이상 있으면 가치를 마지막으로 바꾼 규칙을 한 번 더 적용한다(그 후 규칙 13으로 넘어간다).
- 손에 랭크 2인 카드가 1장 이상 있으면 가치의 모든 서로 다른 슈퍼팩터의 곱을 가치에 더한다. 슈퍼팩터란 가치를 나누어떨어지게 하는 가장 높은 정수 거듭제곱의 소수다.
- 가치가 674이면 승리한다!
스트레이트는 다음 순서에서 연속한 5장의 카드 집합이다: 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A.
입력
입력은 공백으로 구분된 다섯 개의 카드 설명이 있는 한 줄로 이루어진다. 각 카드 설명은 랭크 바로 뒤에 슈트가 온다.
출력
모든 규칙을 적용한 뒤의 점수를 출력한다.