양의 정수 목록을 취하는 프로그램이나 함수를 작성하십시오. 이러한 각 정수는 2D 평면에서 사각형의 측면 길이를 나타냅니다. 각 사각형은 평면의 정수 좌표로 이동할 수 있지만 회전 할 수 없으며 다른 사각형과 겹칠 수 없습니다.
각 사각형에 대해 다른 인쇄 가능한 ASCII 문자를 사용하여 (공백에 사용되는 공간 제외) 프로그램 / 기능은 가로 또는 세로의 반사 대칭 선이있는 사각형의 단일 배열을 인쇄해야합니다. 그러한 배열이 존재하지 않으면 아무것도 인쇄되지 않아야합니다.
사각형은 다른 문자이므로 구별 할 수 있습니다. 모든 사각형의 결합으로 만들어진 모양 만 대칭이어야합니다. 목록에 94 개 이상의 요소가 포함되어 있지 않다고 가정 할 수 있습니다 (94자가 있으므로).
예를 들어 입력이 [2, 1, 2, 2, 2]
인 경우 가능한 출력은 다음과 같습니다.
DD--
DD--
Z
FFPP
FFPP
이 모양은 수평선의 반사 대칭 선을 가지고 있습니다. 상단과 하단은 미러 이미지입니다. 다른 가능성은 다음과 같습니다. (사각형을 만질 필요가 없으며 두 개의 사각형이 동일한 문자로 구성되지 않는 한 모든 문자를 사용할 수 있습니다.)
55
55
%%
%%
@
HH
HH
((
((
G
11 33
11 33
22 44
22 44
대칭 선은 다음과 같이 문자 사이의 경계가 될 수도 있습니다 [2, 4]
.
!!!!
!!!! ++
!!!! ++
!!!!
일부 정사각형 집합은 대칭 적으로 배열 할 수 없습니다. 예 [1, 2, 3]
:
AAA BB C
AAA BB (these can't be vertically or horizontally symmetric => no output)
AAA
그리고 사각형 경계가 아닌 경우에도 전체 모양이 대칭 일 수 있습니다. 예를 들어 유효한 출력 [2, 1, 1, 1, 1, 4]
은 다음과 같습니다.
AA----
AA----
BC----
DE----
마찬가지로 유효한 출력 [1, 1, 2, 3, 5]
은 다음과 같습니다.
44444
44444
44444
44444
44444
33301
33322
33322
노트
- 입력 목록에는 항상 1에서 94 개의 요소가 있습니다.
- stdin, command line, text file, function arg와 같은 합리적인 방식으로 입력하십시오. 필요에 맞게 약간 형식을 지정할 수 있습니다 (예 :
{1, 2, 3, 4}
또는)[1 2 3 4]
. - stdout 또는 유사한 출력. 결과 모양에 대칭 선이있는 한 선행 / 트레일 공간 또는 줄 바꿈은 충분합니다.
- 대각선의 대칭 선은 포함되지 않습니다 (그렇지 않으면 매우 쉬울 것입니다). 또한 회전 또는 전이가 아닌 반사 대칭이어야합니다.
- 솔직히이 작업이 얼마나 어려운지 잘 모르겠습니다. 문제의 일부 하위 세트를 해결하는 부분 답변을 게시 할 수 있습니다 (특히 특히 영리한 알고리즘을 과시하려는 경우). 이들은 이길 수 없습니다.
- 예를 들어, 입력에 항상 하나 이상의 대칭 배열이 있다고 가정 할 수 있습니다 (따라서 같은 목록
[1, 2, 3]
은 입력되지 않습니다). - 또는 예를 들어 전체 모양뿐만 아니라 사각형 경계가 대칭 인 배열 만 고려할 수 있습니다. 이 경우
[1, 1, 2, 3, 5]
출력이 없습니다. - 미쳐 가고 싶다면 아이디어를 사각형이나 폴리 아미노 로 확장 할 수 있습니다 .
- 예를 들어, 입력에 항상 하나 이상의 대칭 배열이 있다고 가정 할 수 있습니다 (따라서 같은 목록
채점
점수는 프로그램의 크기 ( 바이트) 입니다. 가장 낮은 점수가 이깁니다. Tiebreaker는 먼저 게시 된 답변을 따릅니다.
[2, 4, 6, 7, 8, 9, 11, 15, 16, 17, 18, 19, 24, 25, 27, 29, 33, 35, 37, 42, 50, 112]
문제에 대한 더 많은 자유가 있기 때문에 다른 솔루션이있을 수 있지만 해결을위한 보너스 포인트 .