Viết chương trình nhỏ nhất bạn có thể để tạo fractals affine. Bạn có thể sử dụng bất kỳ phương pháp nào bạn cảm thấy như thế sẽ tạo ra kết quả giống như các quy tắc dưới đây. Bạn không phải sử dụng bất kỳ ý tưởng từ các phương pháp được đề xuất!
Chương trình của bạn sẽ có hai đầu vào, đầu tiên để xác định mẫu theo định dạng 074
gồm ba chữ số từ 0 đến 7. Đầu vào thứ hai sẽ xác định kích thước, 3
sẽ là 8x8, 4
sẽ là 16x16, v.v. (2 ^ n). Chương trình của bạn phải xuất kết quả chính xác cho tất cả các kích thước từ 0 (1x1) đến ít nhất 5 (32x32). Nếu nó tạo ra bất kỳ đầu ra nào cho số cao hơn thì nó phải chính xác, nghĩa là nó phải tạo ra đầu ra chính xác đến một kích thước nhất định nhưng không tạo ra đầu ra nào trên kích thước đó nếu nó sai. Bạn có thể giả sử kích thước tối đa là 15 (32768x32768) vì đó đã là kích thước điên rồ cho nghệ thuật ASCII (1GB)!
Một mô hình 8x8 sẽ trông giống như dưới đây (quy tắc 160
). Chữ số nhiều nhất bên trái sẽ dành cho khối A
, chữ số giữa (xin vui lòng không nghĩ thô lỗ!) Cho khối B
và chữ số bên phải nhất cho khối C
. Để xây dựng fractal, thu nhỏ nó một nửa theo cả hai chiều và áp dụng quy tắc xoay / phản chiếu cho khối. Để thu nhỏ mô hình chia đều thành các khu vực 2x2. Sẽ có 3 ký tự hiển thị hoặc không có trong mỗi khu vực. Nếu có các ký tự hiển thị, đặt một ký tự ở vị trí thích hợp trong khối nhỏ hơn, nếu không thì đặt một khoảng trắng. Quy tắc 0
- 3
không được nhân đôi, quy tắc 4
- 7
được nhân đôi. Các quy tắc 0
và 4
không được xoay, 1
và 5
được xoay 90 độ theo chiều kim đồng hồ, 2
và6
được quay 180 độ, 3
và 7
được quay 270 độ theo chiều kim đồng hồ. Khâu ba khối lại với nhau theo thứ tự hiển thị, A
ở góc trên bên trái, B
dưới cùng bên trái và C
dưới cùng bên phải.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Thu nhỏ, xoay và nhân đôi theo số quy tắc:
0 1 2 3 4 5 6 7
---- ---- ---- ---- ---- ---- ---- ----
AA BAA CCB C C BCC AAB AA
A BB A CBB CC CC BBC A BB A
BBC CC A A BB BB A A CC CBB
BCC C AA AAB BAA AA C CCB
Quy tắc:
- Không được nhân đôi, xoay 90 độ theo chiều kim đồng hồ
- Không được nhân đôi, Xoay 180 độ theo chiều kim đồng hồ
- Không được nhân đôi, xoay 270 độ theo chiều kim đồng hồ
- Nhân đôi nhưng không được xoay
- Nhân đôi sau đó xoay 90 độ theo chiều kim đồng hồ
- Nhân đôi sau đó xoay 180 độ theo chiều kim đồng hồ
- Nhân đôi sau đó xoay 270 độ theo chiều kim đồng hồ
- Quy tắc 0: Không được nhân đôi, Không được xoay
Việc phản chiếu luôn được thực hiện trước tiên và được thực hiện theo đường chéo qua góc trống, ví dụ quy tắc 0 so với quy tắc 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Chỉ cai trị 1
, 6
và 0
được sử dụng trong các mô hình trên, theo thứ tự đó. Sau khi các phép biến đổi đã được áp dụng và các khối được ghép lại với nhau, nó sẽ trông giống như bên dưới ngoại trừ tôi đã cách nhau từng khối với nhau bằng một khoảng trắng. Mã của bạn sẽ không có thêm không gian trong đó. Nếu bạn so sánh nó với hình ảnh "cha mẹ", bạn sẽ thấy rằng nó có các ký tự hiển thị ở cùng vị trí.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Một cách khác để tạo hình ảnh mà không thu nhỏ như sau: Bắt đầu với một ký tự:
X
Áp dụng các phép biến đổi cho mỗi trong ba khối (không có khối nào chỉ có một ký tự) và ghép các khối lại với nhau:
X
XX
Áp dụng các phép biến đổi cho mỗi trong ba khối một lần nữa:
1
--
XX
X
6 0
-- --
XX X
X XX
Khâu chúng lại với nhau:
XX
X
XXX
XXX
Áp dụng các phép biến đổi cho mỗi trong ba khối một lần nữa:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Khâu chúng lại với nhau:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Bạn có thể sử dụng bất kỳ ký tự hoặc ký tự có thể in (0x21 - 0x7E) cho phần hiển thị của mẫu nhưng chỉ ký tự khoảng trắng (0x20) cho khoảng trống. Không gian lưu trữ được cho phép nhưng không được có khoảng trống bên ngoài toàn bộ hình vuông (nghĩa là đối với hình vuông 8 x 8 không thể có ký tự nào qua cột 8).
Có 512 quy tắc khác nhau, nhưng một số trong số chúng tạo ra cùng một mẫu. Là một lưu ý phụ, bất kỳ mẫu nào chỉ chứa 0
và 4
sẽ tạo ra tam giác Sierpinki (8 quy tắc khác nhau).
Bạn có thể tùy ý đăng mẫu yêu thích của bạn và quy tắc tạo ra nó. Nếu bạn làm như vậy, hãy đảm bảo kích thước tối thiểu là 3 (8x8) để phân biệt với các quy tắc tương tự.