이 문제는 다음 퍼즐을 기반으로 : 당신은이 제공됩니다 n
에 의해 n
그리드 n
표시 세포. 당신의 임무는 n
각 부분 n
이 정확히 하나의 표시된 셀을 포함하는 정확히 셀로 구성된 부분으로 그리드를 분할 하는 것입니다.
예
왼쪽에 퍼즐이 있고 오른쪽에 (독특한) 솔루션이 있습니다.
도전
당신은 세트를 받게 될 것입니다 n
합리적인 형식으로 인덱스 0 개의 좌표 제공됩니다.
[(0,0), (0,3), (1,0), (1,1), (2,2)]
그리고 당신의 임무는 유효한 분할을 반환하는 프로그램을 작성하는 것입니다.
[
[(0,0), (0,1), (0,2), (1,2), (1,3)],
[(0,3), (0,4), (1,4), (2,4), (3,4)],
[(1,0), (2,0), (3,0), (4,0), (4,1)],
[(1,1), (2,1), (3,1), (3,2), (4,2)],
[(2,2), (2,3), (3,3), (4,3), (4,4)]
]
퍼즐에 해결책이 없으면 프로그램은 오류를 던지거나 빈 해결책을 반환함으로써이를 표시해야합니다.
입력 / 출력 예
[(0,0)] => [[(0,0)]]
[(0,0), (1,1)] => [
[(0,0), (1,0)],
[(0,1), (1,1)]
]
[(0,0), (0,1), (1,0)] => [] (no solution)
[(0,0), (0,1), (0,2)] => [
[(0,0), (1,0), (2,0)],
[(0,1), (1,1), (2,1)],
[(0,2), (1,2), (2,2)],
]
[(0,0), (0,2), (1,2)] => [
[(0,0), (1,0), (2,0)],
[(0,1), (0,2), (1,1)],
[(1,2), (2,1), (2,2)],
]
채점
이것은 code-golf 이므로 가장 짧은 코드가 승리합니다.
이것은 이 Math Stack Exchange 질문 에서 영감을 받았습니다 .
—
Peter Kagey 2012 년
@Arnauld, 그것은 시카 쿠 퍼즐처럼 보인다. "목적은 사각형과 사각형 조각으로 격자를 나누는 것이다". 이 경우에는 그러한 제약이 없습니다.
—
Peter Kagey
혼란을 드려 죄송합니다. 샌드 박스 어딘가에 시카 쿠 챌린지가 있거나 어쩌면 어느 시점에서 직접 시카 쿠를 도전 할 계획이라고 생각합니다. 어느 쪽이든, 나는 그것이 언뜻 똑같은 것이라고 생각했다.
—
Arnauld
결과가 2 차원 좌표 배열 인 이유는 무엇입니까? 나는 거기에 표현되는 것을 이해하지 못한다 ... 배열의 인덱스의 2 차원 배열이 될 수 없습니까? 예를 들어 행 3, 열 2에는 인덱스 4에 좌표가있는 파티션이 있습니까?
—
Olivier Grégoire
예제에서 알 수 있듯이 기준 좌표에서 시작하여 각 영역을 그릴 수 있다고 가정 할 수 있습니까? 나는 무의식적으로 이것을 당연한 것으로 생각한다는 것을 깨달았습니다.
—
Arnauld 2012 년