랜덤 스도쿠 생성기


13

완전히 임의의 스도쿠 를 생성하고 싶습니다 .

스도쿠 그리드를 ~ 사이의 정수 그리드로 정의합니다. 여기서 일부 요소는 생략 할 수 있습니다. 그리드는 스도쿠 제약 조건 (각 라인, 열 및 정렬 된 정사각형에 반복 된 요소가 없음)과 일치하도록 완성 할 수 있는 고유 한 방법 이 있고 그 점에서 최소입니다 (즉, 더 이상 생략하는 경우). 퍼즐에는 여러 가지 솔루션이 있습니다).9×9193×3

모든 스도쿠 퍼즐이 동등하게되도록 임의의 스도쿠 퍼즐을 어떻게 생성 할 수 있습니까?


이것은 실용적인 솔루션처럼 보입니다 : dryicons.com/blog/2009/08/14/…
Joe

1
이제 이것에 관한 메타 질문 이 있습니다. 그곳에서 또는 채팅으로 토론하십시오.
Kevin

답변:


15

모든 스도쿠 퍼즐 의 정확한 균일 분포를 생성 하는 방법은 다음과 같습니다. 9x9 그리드를 무작위로 생성 한 다음 올바른 스도쿠 그리드 인 경우에만 유지하십시오.

이 무차별 접근 방식은 균일 한 분포를 보장하지만 임의의 8x8 그리드를 생성 한 다음 나머지 두 줄을 채우는 것만으로 그리드의 확률에 곱할 수 있기 때문에 효율적이지 않습니다 . 이것은 여전히 ​​무작위 분포이지만 여전히 너무 비효율적입니다.917

첫 번째 줄을 강제 한 다음 나머지 그리드를 임의로 생성 한 다음 모든 숫자의 순열을 임의로 선택합니다. 여전히 같은 확률로 모든 그리드를빨리.[1,2,..9]9!

어쩌면 내가 어디로 가고 있는지 알 수 있습니다.이 문제를 영리하게 대답하면 아마도 스도쿠 그리드의 기본 대칭에 대해 궁금해 할 것입니다. 많은 작업 (17) 단서의 최소 수 (스도쿠에 있다는 사실을 증명하기 위해이 방향으로 이루어졌다 이 문서 참조 ) 당신은 갈 수 있습니다 여기에 다음을 사용하여 3,359,232 유사한 그리드 5472730538 개 클래스의 정확한 목록을 볼 수 대칭 :

  1. 숫자의 순열
  2. 행의 순열 (밴드와 각 밴드 내부의 행)
  3. 열도 마찬가지
  4. 전치

이 프레임 워크를 사용하면 5,472,730,538 클래스 중 하나를 임의로 선택하고 (실제로 6GB로 압축 할 수 있음) 각 대칭의 대표자 중 하나를 각각 중에서 선택할 수 있습니다.9!,64,64,2

편집 : 이것을 불완전한 퍼즐에 적용하려면 그리드의 하위 집합을 임의로 선택하고 솔루션이 스도쿠 솔버에서 고유한지 확인하고 그렇지 않은 경우 다시 시도하십시오. 독특한 솔루션을 가진 불완전한 퍼즐의 수는 두 그리드에 대해 다를 수 있기 때문에 이것은 균일 한 분포 가 아닙니다 . (그렇지 않으면 매우 놀랐습니다)


그러나 Justin은 불완전한 퍼즐 을 생성하여 독창적 인 방법으로 완성 할 수있는 방법을 요구하고 있습니다. 스도쿠 제약 조건을 만족하는 9x9 그리드를 생성하더라도 셀의 특정 하위 집합을 제거하면 고유 한 방식으로 완료 할 수있는 퍼즐이 제공되는 이유가 확실하지 않습니다.
Janoma

1
@ Janoma : 오, 내 나쁜, 나는 편집 할 것이다. 그러나 적절한 퍼즐이 무엇인지 정의하지 않으면 그다지 의미가 없습니다. (빈 셀이 하나 뿐인 격자는 퍼즐입니까?). 최소한의 격자를 원합니까 (예 : 숫자를 제거하면 솔루션이 더 이상 고유하지 않습니까?) 흥미로운 질문입니다.
jmad

"일부 요소를 생략 할 수 있음"은 충분히 정확합니다 (즉, "하나 이상의"요소를 제거 할 수 있음). 예를 들어, 하나의 빈 셀이있는 유효한 퍼즐 은 고유 한 방식으로 완료 될 있지만 빈 퍼즐은 둘 이상의 유효한 퍼즐이 있기 때문에 불가능합니다. 또한 완성 된 유효한 퍼즐은 독특하고 (사소하고 비어있는) 방식으로 완성 될 수 있습니다. 최소 격자에 대한 질문도 흥미롭지 만 이것과는 다릅니다.
Janoma

@ Janoma, jmad : 유효한 퍼즐은 일반적으로 최소입니다.
Gilles 'SO- 악마 그만해'

@Gilles 정의입니까? 그것이 실제로 OP의 의도 된 의미인지 궁금합니다. 그것은 문제를 훨씬 더 어렵게 만듭니다 :-)
Janoma
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.