학생들이 수학 유도 의 증명 기술에 대해 처음 배울 때 , 일반적인 예는 하나의 미리 결정된 그리드 공간을 비워 두는 L 자형 트로 미노 로 2 N × 2 N 그리드를 타일링하는 문제입니다 . (N은 음이 아닌 정수입니다.)
증거를 아직 모르는 경우이를 증명하기 위해 귀하에게 맡기겠습니다. 그것을 논의하는 많은 자료가 있습니다.
여기서는 N 값과 그리드 공간의 좌표를 비워두고 프로그램 된 트로 미노 타일 그리드의 ASCII 표현을 인쇄하는 프로그램을 작성해야합니다.
캐릭터 O
는 빈 공간을 채우고 트로 미노의 4 회전은 다음과 같습니다.
|
+-
|
-+
-+
|
+-
|
(예,은 모호 할 수 +
있는 이동 -
및 |
특정 조치에 대한,하지만 괜찮아요.)
프로그램은 N = 0 (1 × 1 그리드의 경우)에서 N = 8 (256 × 256 그리드의 경우)까지 작동해야합니다. 다음에 대한 좌표 인 x 및 y 값이 제공됩니다 O
.
- x는 가로 축입니다. x = 1은 왼쪽 격자 가장자리이고 x = 2 N 은 오른쪽 격자 가장자리입니다.
- y는 세로 축입니다. y = 1은 상단 그리드 가장자리이고, y = 2 N 은 하단 그리드 가장자리입니다.
x와 y는 항상 [1, 2 N ] 범위에 있습니다.
따라서 주어진 N, x 및 y의 경우, 프로그램은 x, y 그리드 좌표를 제외하고 L 자형 트로 미노로 완전히 바둑판 식으로 배열 된 2 N × 2 N 그리드를 인쇄해야합니다 O
.
예
N = 0이면 x와 y는 모두 1이어야합니다. 출력은 단순히
O
N = 1, x = 1 및 y = 2이면 출력은
-+
O|
N = 2, x = 3, y = 2 :
+--+
||O|
|+-|
+--+
N = 2, x = 4, y = 1 :
+-|O
||+-
|+-|
+--+
N = 3, x = 3, y = 6 (예 : 이 페이지 의 이미지 ) :
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
세부
- 전체 프로그램을 작성하는 대신 3 개의 정수를 사용하는 함수를 작성할 수 있습니다. 그리드 문자열을 인쇄하거나 반환해야합니다.
- stdin, 명령 행 또는 함수를 작성할 경우 함수 인수에서 입력을 가져옵니다.
- 출력에는 선택적으로 단일 훈련 줄 바꿈이 포함될 수 있습니다.
- 증거가 일반적으로 제안하는 바둑판 식 배열 방법을 사용할 필요 는 없습니다 . 그리드는
O
. (트로 미노는 자르거나 그리드 경계를 벗어날 수 없습니다.)
바이트 단위의 가장 짧은 코드가 이깁니다. Tiebreaker는 이전 게시물입니다. ( 핸디 바이트 카운터 )
if p!=i
; 내부 목록.join()
은 필요하지 않습니다[]
.(1-i%2)
로 수행 할 수 있습니다~i%2
; iterable unpacking을 사용하여 다음t,l,a=[],...
과 같이 쓸 수 있습니다*t,l,a=...
. 음수가 될 수 없기 때문에if n==0
확인할 수 있습니다 . 최종 규칙은 각 요소를 인쇄하여 수행 할 수 있습니다. 일반 규칙은 반환 대신 인쇄를 허용하므로; 0이 아닌 값이 Truthy이기 때문일 수 있습니다 .if n<1
n
"\n".join
if p!=i
if p-i