스도쿠의 Y- 윙 전략


11

최근에 표준 전략으로는 해결할 수없는 정말 어려운 스도쿠를 생산하는 새로운 스도쿠 앱이 있습니다. 그래서 몇 가지 새로운 것을 배워야했습니다. 이러한 전략 중 하나는 Y-Wing 전략 입니다. 그것은 "엄격한 전략"에 속하지만 실제로 그렇게 어렵지는 않습니다.

이 전략에서는 4 개의 셀만 중요합니다. 따라서 이미지의 다른 모든 셀을 무시했습니다.

각 셀의 모든 후보를 살펴 봅니다. 다음 예에는 후보가있는 셀이 있습니다 3 7(즉 , 같은 행에 같은 3x3 상자에 ... 1 2 4 5 6 8 9가 있기 때문에 후보를 이미 거부했음을 의미합니다 ) . 후보와 셀 과 후보자 셀 . Y-Wing 전략은 올바른 셀의 후보에서 제거 할 수 있으며 후보로만 채울 수 있다고 제안합니다 . 따라서 올바른 수를 찾아 전체 스도쿠를 해결하는 데 한 걸음 더 다가갔습니다.126 73 62 662

첫 번째 예

6제거 할 수 있습니까?

설명

6이것이 올바른 셀의 올바른 숫자 라고 가정 해 봅시다 . 이제이 6열에가 있으므로 6오른쪽 상단 셀의 후보에서을 제거하고 7채울 수있는을 남겨두고 왼쪽 셀과 동일하게 수행 할 수 있습니다. 를 제거하고 6를 채울 수 있습니다 3. 이제 왼쪽 상단 셀을 보면 모순이 생깁니다. 지금은 이미 거기에 있기 때문에 7같은 행에와 3우리가 제거 할 수 있도록, 같은 열의 73전혀 후보를 남기지 않고, 후보자의를. 분명히 불가능합니다. 따라서 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] # -||-

단일 입력의 여러 세트가 정확히 동일 할 수 있습니까?
Optimizer

@Optimizer 예, 예를 들어 8 번째 테스트 사례 7 8에서 첫 번째와 두 번째 셀의 후보입니다. Y-Wing 전략은 여전히 ​​적용 할 수 있습니다.
Jakube

@Jakube 아 알았어.
Optimizer

둘 이상의 솔루션이 가능한 경우 그 중 하나를 출력 할 수 있습니까?
Optimizer

예, 나는 그것을 질문에서 명확히했습니다.
Jakube

답변:


3

CJam, 90 바이트

다른 3 개의 셀에는 2 개의 후보 만 있어야한다는 제약 때문에 너무 길다.

l~_:_(a+2/::&_{,}$2>:&:Y;{:PY&Y{P1<}?~}%:X,3>1${,}$W=_,2>\Y&,1?*{X:_(+2/{~:I=}#)_2$=I-t}&p

CJam 형식의 목록으로 입력해야합니다. 예를 들어 :

[[2 6] [3 6] [3 7] [6 7]]

CJam 목록 형식의 목록으로 출력을 제공합니다.

[[2] [3 6] [3 7] [6 7]]

골프를 마치면 설명을 추가하겠습니다 ..

여기에서 온라인으로 시도 하거나 여기 에서 전체 테스트 스위트를 사용해보십시오 .


3

Mathematica, 124110 바이트

Cases[e@n_:>n]/@(Plus@@e/@#&/@#/.NestList[RotateLeft/@#&,{x:a_+b_,y:b_+c_,z:c_+a_,w:a_+_.}->{x,y,z,w-a+1},3])&

예 :

In[1]:= yWing = Cases[e@n_:>n]/@(Plus@@e/@#&/@#/.NestList[RotateLeft/@#&,{x:a_+b_,y:b_+c_,z:c_+a_,w:a_+_.}->{x,y,z,w-a+1},3])& ;

In[2]:= yWing[{{3, 7}, {6, 7}, {2, 6}, {3, 6}}]

Out[2]= {{3, 7}, {6, 7}, {2}, {3, 6}}

In[3]:= yWing[{{4, 7}, {7, 8}, {4, 8}, {4}}]

Out[3]= {{4, 7}, {7, 8}, {4, 8}, {}}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.