Напишіть найменшу програму, яку ви можете створити споріднені фрактали. Ви можете використовувати будь-який метод, який вам здається, що дає ті самі результати, що і правила нижче. Вам не доведеться використовувати будь-які ідеї із запропонованих методів!
Ваша програма займе два входи, перший визначить візерунок у форматі, 074
виконаному з трьох цифр від 0 до 7. Другий вхід визначатиме розмір, 3
буде 8x8, 4
буде 16x16 і так далі (2 ^ n). Ваша програма повинна вивести правильний результат для всіх розмірів від 0 (1x1) до принаймні 5 (32x32). Якщо він створює будь-який вихід для більших чисел, він повинен бути правильним, тобто він повинен видавати правильний вихід до певного розміру, але не давати жодного виходу, що перевищує цей розмір, якщо це було б неправильно. Ви можете припустити максимальний розмір 15 (32768x32768), оскільки це вже божевільний розмір для мистецтва ASCII (1 ГБ)!
Візерунок 8х8 буде виглядати приблизно так (нижче 160
). Найменше лівозначна цифра буде для блоку A
, середня цифра (не грубі думки, будь ласка!) Для блоку, B
а найправіша цифра для блоку C
. Щоб побудувати фрактал, зменшіть його вдвічі в обох розмірах і застосуйте правило обертання / дзеркального відображення для блоку. Щоб зменшити візерунок, розподіліть його рівномірно на 2х2 зони. У кожній області буде або 3 видимих символи, або жоден. Якщо є видимі символи, розмістіть символу у відповідному місці в меншому блоці, інакше поставте пробіл. Правила 0
- 3
не дзеркальні, правила 4
- 7
дзеркальні. Правила 0
і 4
не обертаються, 1
а 5
обертаються на 90 градусів за годинниковою стрілкою, 2
і6
обертаються на 180 градусів 3
і 7
повертаються на 270 градусів за годинниковою стрілкою. З’єднайте три блоки разом у наведеному порядку A
у верхньому лівому куті, B
внизу вліво та C
внизу праворуч.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Зменшується, обертається та відображається за номером правила:
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
Правила:
- Не дзеркальний, Поворот на 90 градусів за годинниковою стрілкою
- Не дзеркальний, Поворот на 180 градусів за годинниковою стрілкою
- Не дзеркальний, Поворот на 270 градусів за годинниковою стрілкою
- Дзеркальний, але не повернутий
- Потім дзеркальне повернення на 90 градусів за годинниковою стрілкою
- Потім дзеркальне повернення на 180 градусів за годинниковою стрілкою
- Потім дзеркальне повернення повертається на 270 градусів за годинниковою стрілкою
- Правило 0: Не дзеркальне відображення, Не повертається
Дзеркальне відображення завжди робиться спочатку і робиться по діагоналі через порожній кут, наприклад, правило 0 проти правила 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Тільки правила 1
, 6
і 0
використовуються в зазначеній вище моделі, в такому порядку. Після того, як трансформації будуть застосовані і блоки зшиті між собою, це буде мати вигляд нижче, за винятком того, що я відклав один блок один від одного пробілом. Ваш код не матиме цього додаткового місця в ньому. Якщо порівнювати його з зображенням "батьків", ви побачите, що він має видимі символи в однакових положеннях.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Інший спосіб генерувати зображення без зменшення: Почніть з одного символу:
X
Застосуйте перетворення для кожного з трьох блоків (жоден, оскільки це лише один символ) і з'єднайте блоки разом:
X
XX
Знову застосуйте перетворення для кожного з трьох блоків:
1
--
XX
X
6 0
-- --
XX X
X XX
Зшийте їх разом:
XX
X
XXX
XXX
Знову застосуйте перетворення для кожного з трьох блоків:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Зшийте їх разом:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Ви можете використовувати будь-які символи для друку або символи (0x21 - 0x7E) для видимої частини шаблону, але лише пробіл (0x20) для пробілів. Додаткові пробіли дозволені, але не повинно бути пробілів поза цілою площею (тобто для квадрата 8х8 не може бути символів минулого стовпця 8).
Існує 512 різних правил, але деякі з них створюють ту саму схему. Як бічна примітка, будь-який візерунок, що містить лише, 0
і 4
створить трикутник Сєрпінського (8 різних правил).
Ви можете за бажанням розмістити свій улюблений шаблон і правило, яке його генерує. Якщо ви робите, переконайтеся, що розмір становить не менше 3 (8x8), щоб відрізнити його від аналогічних правил.