소개
집이없고 빈 들판 만있는 작은 마을이 있습니다. 지방 관료들은 마을을 여러 개의 구획으로 나누고 싶어서 각 구획에는 정확히 하나의 집이 포함되어 있으며, 구획의 경계는 멋진 직선 격자를 형성합니다. 당신의 임무는 이것이 가능한지를 결정하는 것입니다.
작업
입력은 사각형의 2D 비트 배열입니다. 1은 집을 나타내고 0은 빈 필드를 나타냅니다. 크기는 1x1 이상 이며 1 이상 을 포함합니다. 적절한 형식 (정수 목록, 문자열 목록, 여러 줄 문자열 등)으로 입력을 취할 수 있습니다.
프로그램은 각각의 격자 셀이 정확히 1을 포함하도록 직선 수평 및 수직선을 사용하여 배열을 격자 셀로 분할 할 수 있는지 여부를 결정해야합니다. 선은 배열의 한쪽 가장자리에서 반대쪽 가장자리까지 이어져야합니다.
예를 들어, 다음은 유효한 배열 분할입니다.
00|0010|01|1
01|0000|00|0
--+----+--+-
00|0000|00|1
01|0010|01|0
--+----+--+-
01|1000|10|1
1 또는 1을 초과하지 않는 그리드 셀이 있으므로 다음 구분은 유효하지 않습니다.
00|0010|01|1
--+----+--+-
01|0000|00|0
00|0000|00|1
01|0010|01|0
--+----+--+-
00|1000|10|1
유효한 눈금이 존재하면 진실한 값을, 그렇지 않으면 거짓 값을 출력해야합니다.
규칙과 득점
전체 프로그램이나 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이깁니다.
테스트 사례
[[1]] -> True
[[0,1],[1,0]] -> True
[[1,1],[1,0]] -> False
[[1,0,1],[0,1,0]] -> True
[[1,0],[0,1],[0,1]] -> True
[[1,0,0],[0,0,1],[0,1,1]] -> True
[[1,1,1],[1,1,1],[1,1,1]] -> True
[[1,0,1],[0,1,0],[1,0,0]] -> True
[[1,0,0],[1,0,0],[0,1,1]] -> False
[[0,0,0,0,1],[1,0,0,1,0],[0,0,0,1,0]] -> False
[[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,0]] -> True
[[1,1,0,0,0],[0,0,0,0,0],[1,0,1,0,0]] -> True
[[1,1,0,1,1],[0,1,0,1,1],[1,0,0,0,0]] -> True
[[0,0,0,0,0,0,0],[0,1,1,1,0,1,0],[0,1,0,0,1,0,0],[0,0,0,0,0,0,1],[0,0,1,0,0,0,1],[1,1,0,1,1,0,0]] -> False
[[1,1,0,0,0,0,0],[1,0,1,1,0,1,0],[0,0,0,0,1,0,0],[0,1,0,1,1,0,0],[1,0,0,0,1,1,0],[0,0,0,0,0,1,0]] -> False
[[0,1,0,1,1,1,0],[0,0,0,0,1,0,0],[0,0,0,0,0,0,0],[1,0,0,1,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1]] -> True
[[0,1,0,0,1,0,1],[1,0,0,0,1,0,1],[0,0,1,0,1,0,1],[1,0,0,0,1,1,0],[0,0,0,1,1,1,0],[0,1,0,0,1,0,1]] -> True
[[0,1,0,0,1,0,0,1,0],[0,0,0,0,1,1,0,1,0],[1,1,0,0,1,0,0,0,0],[0,0,1,0,1,0,1,0,0],[0,0,1,0,1,0,1,0,0],[0,1,0,0,0,1,0,0,1],[0,1,0,0,0,0,1,0,0]] -> False
[[1,0,1,0,0,1,1,0,1],[0,1,1,0,0,1,1,0,1],[1,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,1,1],[0,1,1,0,1,0,1,0,1],[1,0,1,0,0,1,1,0,1]] -> True
[[1, 0, 1], [0, 1, 0], [1, 0, 0]]
이것이 나의 새로운 접근법이 실패한 유일한 3x3 매트릭스였습니다.