개요
프랙탈을 인코딩하는 비트 패턴과 프랙탈의 세대 별 스케일 팩터 및 세대 수를 고려하여 간단한 프랙탈 패턴을 인쇄하는 프로그램을 작성하십시오.
설명
다음은 Sierpinski Carpet 의 ASCII 표현입니다 .
0 세대 :
#
1 세대
# # #
# #
# # #
2 세대
# # # # # # # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # # # # # # #
ASCII Sierpinski Carpet의 n + 1 세대는 그리드의 중심 요소가 누락 된 8 세대 n 개의 사본을 포함하는 3x3 그리드로 구성됩니다.
따라서 3x3 그리드를 사용하여 정의되고 각 세대의 너비와 높이가 3 배 더 커지므로 스케일 팩터가 3이라고 말할 수 있습니다.
3x3 그리드의 요소에 0에서 8까지, 위에서 아래로, 왼쪽에서 오른쪽으로 번호를 매기고 n + 1 세대에 해당 그리드 위치에서 n 세대 사본 :
bit: place value: bit pattern: bit value:
0 1 2 1 2 4 1 1 1 1 2 4
3 4 5 8 16 32 1 0 1 8 0 32
6 7 8 64 128 256 1 1 1 64 128 256
integer value = 1 + 2 + 4 + 8 + 32 + 64 + 128 + 256 = 495
스케일 팩터가 2 인 경우 비트 패턴은 다음과 같이 배열됩니다.
0 1
2 3
등등.
이 형식의 비트 패턴, 스케일 팩터 (예 : Sierpinski Carpet의 경우 3) 및 생성 번호를 받아들이고 ASCII 프랙탈을 출력하는 프로그램을 작성해야합니다.
입력
프로그램은 비트 패턴, 스케일 팩터 (2-5 포함) 및 생성 횟수 (0-5 포함)의 순서로 3 개의 정수를 수용해야합니다.
이 값에 대해 입력 유효성 검사를 수행 할 필요가 없으며 프로그램이 지정된 범위보다 큰 값에 대해 작동하는 경우에는 문제가 없습니다.
입력은 모든 형식 (튜플, 쉼표 / 공백으로 구분 된 목록 등)으로 전달 될 수 있습니다.
산출
프로그램은 #
문자 로 구성된 프랙탈 다음에 프랙탈이 정의 된 위치에 공백, 그에 해당하지 않는 이중 공백 및 각 줄 끝에 줄 바꿈 문자를 출력하여 문자열을 출력하거나 반환해야합니다. 함수에서.
예
입력:
495,3,3
출력 (Sierpinski Carpet generation 3) :
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
입력:
7,2,5
출력 ( Sierpinski Triangle ) :
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # #
# # # #
# # # #
# #
# # # #
# #
# #
#
입력:
325,3,3
출력 ( Cantor Dust ) :
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
입력
186,3,3
출력 ( Vicsek fractal ) :
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
# # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
입력:
279,3,3
출력 (비대칭 프랙탈의 예) :
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
기타
노트:
- 이것은 코드 골프 이므로 바이트 단위의 최단 답변이 이깁니다.
- 프로그램은 독립형이거나 3 개의 입력 매개 변수로 호출되고 문자열을 리턴 (또는 인쇄)하는 함수일 수 있습니다.
- 0 발생은 0 의 비트 패턴에 대해서도
#
(a#
다음에 공백) 으로 정의됩니다 . - 마지막 줄의 후행 줄 바꿈은 선택 사항이지만 각 줄의 후행 공백과 마찬가지로 허용됩니다.
279,3,3
? 와 같이 덜 대칭적인 것으로 예상되는 결과를 게시 할 수 있습니까?
"##"
로 변경되어 더 좋아했습니다"# "
. 줄 끝에 하나의 후행 공간이 예제에 포함되어 있습니다. 필요합니까? . 마지막 규칙에 따라 선택 사항이라고 가정하지만 0 세대에 후행 공간이 필요하다는 사실은 궁금합니다. 또한 최대 공백과 줄 바꿈 (여러 개가 있음)을 표시해야한다고 생각합니다. 극단적 인 예로서 항상 2 ^ 5 ^ 6 공백의 5 ^ 6 = 15625 줄의 배열로 시작한 다음#
s 를 대체 할 수 있습니다. 대부분의 입력 사례에서 사용되지 않는 공백의 양이 엄청나 다