최근에 표준 전략으로는 해결할 수없는 정말 어려운 스도쿠를 생산하는 새로운 스도쿠 앱이 있습니다. 그래서 몇 가지 새로운 것을 배워야했습니다. 이러한 전략 중 하나는 Y-Wing 전략 입니다. 그것은 "엄격한 전략"에 속하지만 실제로 그렇게 어렵지는 않습니다.
예
이 전략에서는 4 개의 셀만 중요합니다. 따라서 이미지의 다른 모든 셀을 무시했습니다.
각 셀의 모든 후보를 살펴 봅니다. 다음 예에는 후보가있는 셀이 있습니다 3 7
(즉 , 같은 행에 같은 3x3 상자에 ... 1 2 4 5 6 8 9
가 있기 때문에 후보를 이미 거부했음을 의미합니다 ) . 후보와 셀 과 후보자 셀 . Y-Wing 전략은 올바른 셀의 후보에서 제거 할 수 있으며 후보로만 채울 수 있다고 제안합니다 . 따라서 올바른 수를 찾아 전체 스도쿠를 해결하는 데 한 걸음 더 다가갔습니다.1
2
6 7
3 6
2 6
6
2
왜 6
제거 할 수 있습니까?
설명
6
이것이 올바른 셀의 올바른 숫자 라고 가정 해 봅시다 . 이제이 6
열에가 있으므로 6
오른쪽 상단 셀의 후보에서을 제거하고 7
채울 수있는을 남겨두고 왼쪽 셀과 동일하게 수행 할 수 있습니다. 를 제거하고 6
를 채울 수 있습니다 3
. 이제 왼쪽 상단 셀을 보면 모순이 생깁니다. 지금은 이미 거기에 있기 때문에 7
같은 행에와 3
우리가 제거 할 수 있도록, 같은 열의 7
와 3
전혀 후보를 남기지 않고, 후보자의를. 분명히 불가능합니다. 따라서 6은 올바른 수의 올바른 셀이 될 수 없습니다.
더 정확하게 : 후보가있는 4 개의 셀 [A B] [A C] [C D] [B C]
(이 순서 또는 원형 회전)이 있고 셀이 원으로 연결된 경우 (같은 행, 동일한 열 또는 동일한 3x3 상자) 셀 1이 셀 2에 연결됩니다. 셀 1에 연결된 셀 4에 연결된 셀 3에 연결됨) C
는 [C D]
셀 에서 제거 할 수있는 것보다 큽니다 . 이 세 가지 세포는 것을, 중요하다 [A B]
, [A C]
그리고 [B C]
두 후보가 각각 포함되어 있습니다. 다르게는 셀 [C D]
이 많거나 적을 D
수 있습니다 (0, 하나 이상의 후보 일 수 있음).
나는 그것들이 어느 쪽이든 연결될 수 있다고 명시 적으로 언급했습니다. 다음 예에서는 전략이 다시 적용되는 것을 볼 수 있습니다. 그러나 이번에는 4 개의 셀이 직사각형을 형성하지 않습니다. 왼쪽 아래 및 오른쪽 아래 셀은 동일한 3x3 상자에 있기 때문에 간단히 연결됩니다. Y-Wing은 1
왼쪽 위 셀의 후보를 제거 할 수 있다고 말합니다 . 이번에는이 셀에 여전히 2 개의 후보자가 남아 있으므로 실제로 새로운 올바른 숫자를 찾지 못했습니다. 그럼에도 불구하고 제거 1
가 다른 전략에 문을 열 수 있습니다.
전략에 대한 자세한 정보를 원하거나 몇 가지 예를 더 보려면 sudokuwiki.org를 방문하십시오 .
도전 사양
셀 후보를 나타내는 4 개의 목록이 입력으로 수신됩니다. 4 개의 셀은 원처럼 연결됩니다 (셀 1은 셀 2에 연결되고 셀 3은 셀 4에 연결되고 셀 4에 연결됨). 각 목록이 오름차순으로 정렬되어 있다고 가정 할 수 있습니다.
당신의 임무는 (Y-Wing 전략을 적용하여) 하나의 후보를 제거하고 결과 후보 목록을 동일한 순서로 반환하는 것입니다. 전략을 적용 할 수없는 경우 동일한 후보 목록을 반환하십시오.
두 가지 가능한 솔루션이있는 경우 (셀 B의 A를 제거하거나 셀 D의 C를 제거 할 수 있음) 하나의 솔루션 만 반환하십시오. 어느 것이 중요하지 않습니다.
입력은 기본 목록 또는 배열 형식 일 수 있습니다. 목록 또는 이와 유사한 목록을 사용할 수도 있습니다. STDIN, 명령 행 인수, 프롬프트 또는 함수 인수를 통해 입력을 수신하고 리턴 값을 통해 또는 STDOUT에 인쇄하여 출력을 리턴 할 수 있습니다.
이것은 코드 골프입니다. 가장 짧은 코드 (바이트)가 이깁니다.
테스트 사례
[3 7] [6 7] [2 6] [3 6] => [3 7] [6 7] [2] [3 6] # Example 1
[6 7] [2 6] [3 6] [3 7] => [6 7] [2] [3 6] [3 7] # Example 1, different order
[2 6] [3 6] [3 7] [6 7] => [2] [3 6] [3 7] [6 7] # Example 1, different order
[3 6] [3 7] [6 7] [2 6] => [3 6] [3 7] [6 7] [2] # Example 1, different order
[1 2 8] [1 8] [8 9] [1 9] => [2 8] [1 8] [8 9] [1 9] # Example 2
[3 8] [4 8] [3 4 8] [3 4] => [3 8] [4 8] [3 8] [3 4]
[1 3 6 7 8] [3 8] [3 4] [4 8] => [1 3 6 7] [3 8] [3 4] [4 8]
[7 8] [7 8] [4 7] [4 8] => [7 8] [8] [4 7] [4 8] or [7] [7 8] [4 7] [4 8]
[4 7] [7 8] [4 8] [4] => [4 7] [7 8] [4 8] [] # Fictional example
[3 7] [2 6] [6 7] [3 6] => [3 7] [2 6] [6 7] [3 6] # Y-Wing can't be applied here
[4 7] [2 7 8] [4 8] [1 4] => [4 7] [2 7 8] [4 8] [1 4] # -||-
7 8
에서 첫 번째와 두 번째 셀의 후보입니다. Y-Wing 전략은 여전히 적용 할 수 있습니다.