참고 : 이것은 게임 Rummikub 의 변형과 관련이 있습니다
배경 및 규칙
Rummikub 는 타일 기반 게임입니다. 빨강, 주황, 파랑 및 검정의 네 가지 색상이 있습니다. 각 색상에는 13 개의 타일 (1에서 13까지 레이블이 있음)이 있으며 색상에 독립적 인 2 개의 조커가 있으므로 총 54 개의 조각이 있습니다. Rummikub의이 변형에서 각 플레이어는 14 개의 타일을 받고 타일 수를 일정하게 유지하기 위해 각 타일을 하나 더 가져와 한 라운드마다 다른 타일을 떨어 뜨려야합니다. 플레이어는 서로의 타일을 볼 수 없습니다. 모든 조각이 하나 이상의 그룹에 속하도록 타일을 그룹화하는 것이 목표입니다 (아래 참조). 플레이어가 모든 조각을 그룹화하면 타일 보드를 떨어 뜨리고 조각을 공개합니다. 그런 다음 다른 조합은 모든 조합이 유효한지 확인하고, 유효한 경우 플레이어가 라운드에서 승리합니다.
타일은 어떻게 그룹화 할 수 있습니까?
두 가지 유형의 그룹 만 있습니다.
다색 그룹 :
- 타일은 3 개 또는 4 개의 타일로 구성됩니다.
- 그들은 같은 번호의 타일 만 포함합니다.
- 모든 타일은 다른 색상입니다.
- 예 :
RED 9, BLUE 9, BLACK 9
.
단색 그룹 :
- 최소 3 개의 타일로 구성됩니다.
- 타일은 13 개를 초과 할 수 없습니다.
- 오름차순으로 연속 된 번호가 다른 타일 만 포함합니다.
- 모든 타일의 색상이 동일합니다.
- 레이블이 붙은 타일은 레이블이 붙은 타일 뒤의 장소
1
가 아닐 수 있습니다13
. - 예 :
RED 5, RED 6, RED 7
.
잠깐, 조커는 무엇을합니까?
조커는 게임의 모든 부분을 대체 할 수 있습니다. 예를 들어, 우리의 첫 번째 예는 될 수있다 JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
또는 RED 9, BLUE 9, JOKER
. 다른 예에서도 마찬가지입니다. 그러나 같은 그룹에 두 명의 조커를 배치 하지 못할 수도 있으므로 JOKER, ORANGE 8, JOKER
금지되어 있습니다.
직무
Rummikub 타일 그룹이 주어 졌는지 확인하십시오. 2 개의 조커를 제외하고 중복 타일이 표시되지 않으며 입력으로받은 타일이 유효 함을 보장합니다 (예 : 60
표시되지 않음).
입출력
표준 방법으로 입력하고 출력 할 수 있습니다.
유효한 입력 형식 : 문자열 목록, 튜플 목록, 중첩 목록, 문자열 또는 기타 적합한 것으로 입력 된 형식. 색상은 문자열 (예 :) "Blue","Red", etc.
, 문자열 약어 (파란색 및 검은 색 타일을 구별 가능하게 함) 또는 색상에 대응하는 정수로 사용할 수 있습니다. 조커와 관련하여 프로그램이 입력을받는 방식을 언급해야합니다. Strings를 선택 RED 9, JOKER, ...
하면 튜플을 선택 (9,"RED"), ("JOKER")
하거나 이와 동등한 것을 선택할 수 있습니다 . 도움이되는 경우 해당 조커에 대한 색상을받을 수 있습니다 (프로그램 출력에 영향을 미치지 않아야 함). 예를 들어, 당신은 할 수 있습니다 ("JOKER","RED")
또는 ("JOKER","BLUE")
, 그러나 그것은 어떤 식 으로든 출력에 영향을주지해야한다.
출력과 관련하여 의사 결정 문제에 대한 표준 규칙이 적용됩니다.
작동 예
이해하기 쉽도록 예를 들어 봅시다. 다음과 같이 그룹이 주어지면 각 튜플은 타일을 나타냅니다.
[(9, "RED"), (9, "ORANGE"), ( "JOKER"), (9, "BLACK")]
입력이 유효하기 때문에 정확한 값을 반환해야합니다. 이 경우 Joker는를 대체 (9, "BLUE")
하고 여러 가지 색상 그룹을 형성합니다.
다음과 같은 그룹이 주어진다면 :
[(9, "BLUE"), (9, "ORANGE"), (9, "RED"), (9, "BLACK"), ( "JOKER")]
유효하지 않으므로 다중 색상 그룹의 최대 카드 수가 4 개이므로 조커가 대체 할 항목이 없기 때문에 프로그램이 잘못된 값을 반환해야합니다.
추가 테스트 사례
다음은 가능한 모든 상황을 다루는 확장 테스트 스위트를위한 것입니다.
입력-> 출력 [(1, "BLUE"), (2, "BLUE"), (3, "BLUE"), (4, "BLUE"), (5, "BLUE"), (6, "BLUE")]- > 진실 [(6, "BLUE"), (6, "RED"), (6, "BLACK)]-> 진실 [(5, "BLACK"), (6, "BLACK"), (7, "BLACK"), (8, "BLACK"), (9, "BLACK"), (10, "BLACK"), ( "JOKER"), (12, "BLACK")]-> 진실 [( "JOKER"), (3, "BLUE"), (3, "RED")]-> 진실 [(8, "BLACK"), (2, "RED"), (13, "BLUE")]-> 거짓 [(4, "RED"), (3, "RED"), (5, "RED")]-> 거짓 [(5, "BLACK"), (6, "BLACK)]-> 거짓 [( "JOKER"), (5, "RED"), ( "JOKER")]-> 거짓 [(4, "RED"), (5, "RED"), (6, BLUE ")]-> 거짓 [(4, "RED"), ( "JOKER"), (5, "RED")]-> 거짓 [(12, "BLACK"), (13, "BLACK), (1,"BLACK ")]-> 거짓
이것은 code-golf 이므로 모든 언어에서 가장 짧은 바이트 단위의 코드가 이깁니다!