각 셀이 비어 있거나 ( .
) 가득 찬 ( 0
) 직사각형 2 차원 그리드를 고려하십시오 .
예 :
..00....
0000....
.00000..
000...00
..000000
000.00..
격자는 무한대로 간주되며 묘사 된 영역 외부의 모든 셀은 비어 있습니다.
목표는 채워진 공간을 덮고 각각 그리드의 4 셀 (2 × 2)을 차지하는 7 개의 뚜렷한 모양의 벽돌 세트를 사용하여 빈 공간을 열어 두는 것입니다.
이들은 7 개의 벽돌입니다 :
블록-1 변형
11 11
석판-2 변형
.. 22
33 ..
계단-4 변형
.4 44
5. 55
66 .6
77 7.
이 브릭은 항상 입력 그리드의 셀보다 두 배 넓고 키가 큰 그리드에 맞춰야합니다. 각 브릭은이 더 큰 그리드에서 하나의 셀만 차지할 수 있지만 더 작은 그리드는 더 큰 그리드 아래로 이동 (위, 아래, 왼쪽, 오른쪽으로 이동)하여 더 많은 옵션을 제공 할 수 있습니다. 그리드 나 개별 브릭은 회전 할 수 없습니다.
따라서 위의 예를 다루는 한 가지 방법은 다음과 같습니다.
..11....
2211....
.47733..
447...22
..771133
227.11..
(동일한 인접 벽돌은 여전히 모호성을 유발할 수 있지만 더 큰 격자를 신중하게 식별하면 문제가 해결됩니다.)
에 대한 잘못된 솔루션
000000
000000
이다
566774
556744
벽돌이 모두 더 큰 격자에 정렬되지 않거나 하나의 셀만 차지하기 때문입니다.
여기에 유효한 솔루션은 3 블록입니다.
111111
111111
또 다른 유효한 솔루션에는 6 개의 슬래브가 포함됩니다.
......
222222
333333
......
따라서 일부 입력 그리드에는 여러 솔루션이 있습니다.
에 대한 잘못된 솔루션
00.00
00...
이다
11.33
11...
벽돌이 더 큰 격자에 정렬되지 않기 때문입니다. 슬래브는 왼쪽 또는 오른쪽으로 하나씩 움직여야하지만 물론 덮개는 불완전합니다. 이 입력 그리드에는 해결책 이 없습니다 .
도전
(표준 입력 / 명령 라인을 통해)에 걸리는 프로그램 텍스트의 직사각형 블록 쓰기 .
의 및 0
의 적용되는 격자를 나타내고있다.
유효한 커버링 솔루션이있는 경우 위와 동일한 방식으로 하나의 솔루션을 인쇄하여 (표준 표준을 통해) 모든 0
것을 적절한 1
스루 7
브릭으로 교체하십시오 .
해결책이 없으면 프로그램이 아무것도 출력하지 말고 정상적으로 종료하십시오.
노트
입력과 출력이 동일한 직사각형 치수를 가질 필요는 없습니다. 결과가
.
솔루션의 무효화되지 않는 한 외부 행 및 / 또는 모든 열을 가질 수 있습니다 ..
채워진 공간에 영향을 미치지 않으면 모든 행과 열을 자르는 것이 좋습니다. 예 :222222 333333
에 대한 유효한 솔루션입니다
000000 000000
반대로,
00..00
채워진 공간이 정렬되지 않기 때문에 두 개의 빈 열을 제거 할 수 없습니다.선택적으로 입력에 단일 후행 줄 바꿈이 있다고 가정 할 수 있습니다. 솔루션이없는 경우에도 출력의 단일 후행 줄 바꿈이 좋습니다.
완전히 비어있는 그리드 (모두
.
)와 사소한 0x0 그리드는 걱정할 필요가없는 입력 사례가 아닙니다. 그러나0
1x1 그리드는 적어도 하나를 포함하는 다른 모든 그리드와 마찬가지로0
입니다. (입력 그리드의 너비 나 높이가 고르지 않다고 가정 할 수 있습니다!)프로그램 대신 입력을 문자열 인수로 사용하여 출력을 정상적으로 인쇄하거나 문자열로 반환하는 함수를 작성할 수 있습니다. 모든 falsy 값은 해결책이없는 경우 반환 할 수 있습니다.
대신 9 개의 고유 한 인쇄 가능한 ASCII 문자를 사용할 수 있습니다
.
0
1
2
3
4
5
6
7
. 당신의 대체물이 무엇인지 말하십시오! 줄 바꿈은 그대로 유지해야합니다.
채점
바이트 단위의 가장 짧은 코드가 이깁니다. Tiebreaker는 최고 투표 게시물입니다.
이 과제는 여기에 설명 된 것과 동일한 규칙을 따르는 Minecraft의 블록 , 석판 및 계단 에서 영감을 얻었습니다 . PPCG 와 Minecraft 를 즐기는 경우 PPCG Minecraft Server 를 확인하십시오 .