Zerkalius Треугольник v0.044

📂 Текст
🎵 Трек
🐌 80 мс 🚀
Фон холста:
Актив:
Статика:
01
Биты:
01
Сетка реже: ↔ ↕
—
Буквы на своих местах (верхняя — вершина треугольника; у ▲▼ — ряд за рядом полосы):
Смотреть
Скачать таблицу .tsv — для «Сравнения»; прогон каждый раз свой, на копии текста
Цикл не прогнан.
⊕ Низ, отражённый по горизонтали на верх, XOR (правило волны — верх главнее):
Его кадры — разные состояния на границах проходов с момента выбора (белая рамка — сейчас):
Буквы — те же, что у 🔤 и в ◇ Сводке. Нажмите «🔎 Искать»; щелчок по находке — подсветка её фигур на холсте.
Фильм места — ряд его рисунков по проходам: сколько разных кадров и через сколько проходов он повторяется. Ходы — рисунок, переехавший в соседнее место.

1. Начальный Серпинский — «🔺 Формы», Правило 90

Генератор берёт сид (по умолчанию «1») и число строк N. Поле — N строк шириной длина сида + 2N, всё залито «0», сид ставится в середину строки 0. Каждая следующая строка считается из строки над ней: для клетки x смотрятся три соседа сверху — левый, центральный, правый — и по номеру правила выбирается новый бит. 90 в двоичном виде — 01011010:

сверху (Л Ц П)111110101100011010001000
новый бит01011010

Видно, что центр не важен: новый = левый XOR правый. Крайние столбцы поля не пересчитываются (остаются «0»). Пример — сид «1», N = 4, поле шириной 9:

строка 0:  000010000
строка 1:  000101000   (x=3: Л=0, П=1 → 1;  x=4: Л=0, П=0 → 0;  x=5: Л=1, П=0 → 1)
строка 2:  001000100
строка 3:  010101010

«Обрезать фон» (галка стоит по умолчанию): в каждой строке всё левее первой «1» и правее последней «1» становится пробелом. Нули ВНУТРИ остаются. Получается треугольник, «висящий в пустоте»:

|    1    |
|   101   |
|  10001  |
| 1010101 |

«Вживить в центр»: если на холсте уже есть текст, фигура не заменяет его, а вклеивается в середину — переносятся только непробельные символы. Без галки (или на пустом холсте) фигура становится всем текстом. Треугольник на 1024 строки — это N = 1024: ширина 2049, вершина — середина первой строки.

2. Аниматрица — волна сверху вниз

Строка 0 не меняется никогда. Волна идёт вниз по одной строке за шаг: на шаге k строка k+1 переписывается по строке k — уже переписанной на прошлом шаге. Клетка за клеткой, в одном столбце, без соседей (сверху — a, снизу — b):

сверху aпробелсимволпробелсимволсимвол
снизу bпробелпробелсимволтот жедругой
станетпробелabпробелa (верхний)

«0» здесь — тоже символ, пустота — только пробел. Когда волна доходит до низа — это проход (счёт «пройдено циклов» у Аниматрицы). После каждого прохода весь текст сравнивается по отпечатку со всеми прежними: совпал — найден 🔁 цикл, его период и с какого прохода он начался.

Операция волны (выбор под галкой, v0.023). Таблица выше — XOR по «символ есть / пусто». Можно взять другую: XNOR — тоже цикл, но из двух пробелов делает «1», и фон вокруг треугольника зажигается через проход; NAND и NOR — долгий разгон (до сотни проходов), потом мигание с периодом 2; AND — строка становится AND всех строк над ней и за один проход замирает (на сцене «1» остаётся один центральный столбец); OR — то же, но заливает. Цикл дают только XOR и XNOR: только у них по верхней клетке и новой нижней восстанавливается старая, остальные стирают сведения. Смена операции начинает счёт циклов заново.

Пример — треугольник выше. Проход 1: строка 1 = f(строка 0, строка 1) и т.д.:

  столбец 3:  сверху « », снизу «1» → «1»
  столбец 4:  сверху «1», снизу «0» → «1» (разные символы — верхний)
  столбец 5:  сверху « », снизу «1» → «1»      итог строки 1: «   111   »
начало
    1
   101
  10001
 1010101
проход 1
    1
   111
  11111
 11 1 11
проход 2
    1
   1 1
  1 1 1
 1     1
проход 3
    1
   111
  11 11
 111 111
проход 4
    1
   1 1
  1   1
 1 1 1 1
проход 5
    1
   111
  11111
 11 1 11

В этом примере «0» исчезли уже на проходе 1: у «1» над «0» результат «1», у «0» над «0» — пробел, и нулей не осталось. Пока нули есть, правило — не чистый XOR. Когда в каждом столбце остаётся один символ, правило становится чистым XOR по наличию: клетка есть, если есть ровно одна из двух. Один проход — это «накопленный XOR» сверху вниз по каждому столбцу, столбцы живут независимо. Проход 4 — классический треугольник Серпинского (Паскаль по модулю 2), проход 5 повторил проход 1: период 4, разгон 1. При одном символе в столбце период — всегда степень двойки, не больше ближайшей степени двойки ≥ числа строк (у 1024 строк — до 1024). На больших треугольниках нули живут дольше и разгон длиннее: у правила 90 на 64 строки (проверено здесь, «▶ По кадрам») цикл начинается с прохода 33, период 64. С «0» и «1» вперемешку метки едут поверх того же XOR-узора (разбор — в борт-журнале и на странице «Исследование»).

Протекание (слои на гранях в «🗻 3D»). Течёт только вниз и только по своему столбцу: «1» над «0» даёт «1», «0» над «1» — «0», одинаковые гасят друг друга, символ над пустым протекает в него. «0» течёт только в разгоне — цикл начинается ровно с гибелью последнего нуля. Самая верхняя «1» столбца — вечный родник: над ней всегда пусто. Одна «1» над пустым столбцом через k проходов стоит на глубине d ⇔ d & (k−1) = 0. На проходе 2^m + 1 это сплошные блоки высотой 2^m через такие же пустые — отсюда полосы-слои. Ось треугольника — чистый родник (подробно — «Исследование», раздел 13).

Что получилось — готовым к просмотру: страница «Битмультфильмы» (кнопка Results в хабе) — весь цикл 1024 строк анимацией, все ромбы цикла по семи размерам, законы и картинки с короткой подписью; разбор каждого — в «Исследовании».

3. Ромбы — откуда они и как считаются

◇ Сетка проводит диагонали под 45° от вершины (середины первой строки) через каждые S символов. Ромб высотой S — клетки между ними: строки r…r+S, в строке r+d — от c−w до c+w, где w растёт до середины и убывает. Вершины ромбов идут через S/2 строк, в ряду — через S столбцов. Почему кадры собраны из ромбов: кадр через k проходов — XOR копий начального кадра, сдвинутых на все d, у которых нет общих единиц с k−1 (теорема Лукаса); каждый нулевой разряд 2^j в k−1 добавляет копию со сдвигом 2^j и ромбы этого размера (◇ «авто» рисует их все).

◭ Треугольники-копии (галка в «👁 Вид»): те же ромбы, только видна их общая грань. В чистой фазе проход — накопленный XOR по столбцу, и кадр через k проходов от начала цикла — XOR копий кадра начала цикла, сдвинутых вниз на d строк, где d & (k−1) = 0. Каждая копия — треугольник: вершина на оси в строке d, стороны под 45° до основания. Пример: 1024 строки, k−1 = 1011111111 — нулевой один разряд 256, копия одна: треугольник от строки 256. k−1 = 1001111111 — разряды 256 и 128: копии 128, 256 и 384 (пунктир — сумма разрядов). Цвет — по старшему разряду сдвига.

▲▼ и ⧗ («Единица разбора» в «👁 Вид»): ромб, разрезанный горизонтальной диагональю, — это ▲ сверху и ▼ снизу. Так весь треугольник режется без остатка на полосы высотой S/2: в полосе n — n+1 треугольников ▲ и n треугольников ▼; ▲ последней полосы — края у основания, у них нет пары ▼ (ромб не целый), и сводка считает, повторяют ли они ▲ выше. ⧗ часы — ▼ над ▲, склеенные вершиной: ромб склеен из ▲ и ▼ ребром, часы — вершиной, там, где сходятся два ромба.

◆ Пирамиды: вершина — центр часов, смотрим сверху. Основание — квадрат 2h+1 × 2h+1 клеток вокруг узла, рёбра — диагонали сетки, четыре грани: сверху ▼ часов, снизу ▲ часов, слева и справа — половинки ромбов остриём к вершине. Соседние пирамиды перекрываются (половинка ромба — грань двух пирамид). Грани сравниваются, как при обходе кругом: каждая повёрнута к верхней стороне; сводка считает пирамиды с четырьмя одинаковыми гранями и с двумя парами.

🗻 3D: пирамиды с вершинами в узлах одной чётности (решётка А — вершины в строках 0, S, 2S…, Б — со сдвигом на полшага) ложатся основаниями встык, и кадр становится полем пирамид. Проекция каждой грани на землю — ровно тот кусок текста, что виден сверху, поэтому «⊙ сверху» даёт тот же рисунок, что на холсте. Можно смотреть и одну пирамиду, выбранную в «🔍 Крупно». ⧫ Зеркало: под каждой пирамидой — её отражение вершиной вниз, вместе октаэдр, как знак Zerkalius; снизу та же картина с битами 0 ↔ 1 (как в «Октаэдре»), или пусто ↔ символ, или без инверсии; «⊖ снизу» — заглянуть. 🎞 GIF цикла / ⏺ Видео цикла — поле «дышит» весь период: кадр за проходом (шаг — «каждый N-й» у 🎞 GIF), при «вращать» — один оборот.

◆ Гранидус (кнопка в «🔍 Крупно»): выбранная пирамида уходит в «Гранидус» большим знаком. На грани берутся клетки одной чётности — в ряду r от вершины их r+1, как у грани «Октаэдра» (треугольник Паскаля); «1» — единица, прочее — ноль. Восточная, южная, западная и северная грани встают по кругу; низ октаэдра — та же картина инвертированная.

🎞 Фильмы: у каждого места треугольника — свой фильм, ряд его рисунков по проходам; окно считает его период (через сколько проходов место повторяется) и число разных кадров. Ходы — тот же рисунок на следующем проходе в соседнем месте: «качели» (туда-обратно) и «бег». Бега нет: волна пересчитывает каждый столбец сам по себе, и вбок рисунку сдвинуться нечем — рисунки стоят или меняются на месте.

🔎 Слова: буквы фигур читаются строками — ряды, стороны треугольника (у ромбов), по желанию справа налево. Словарь — русские словоформы из строк интерфейса Windows (как Swtchr собирал свои тройки букв); ищутся слова, сочетания (словарные слова встык) и «почти слова» — куски, которые по тройкам букв Swtchr звучат по-русски не хуже словарных. Буквы — имена форм по частоте, так что находка — совпадение, как слово в номерном знаке.

⊕ Отражение по горизонтали (в «🔍 Крупно» и в сводке): нижняя половина ромба ▼ переворачивается через горизонтальную диагональ и ложится на верхнюю ▲ (у часов — нижний ▲ на верхний ▼), обе складываются правилом волны: одинаковые — пробел, символ и пробел — символ, разные — верхний. Пустой XOR значит, что фигура симметрична сверху вниз.

◇ Сводка ромбов: для текущего кадра — сколько целых ромбов, сколько разных рисунков, сколько букв (одинаковые — одна буква, зеркальный слева направо — та же строчной; буквы по частоте, А — самая частая) и буквы на своих местах. «▶ По кадрам — весь цикл» гонит волну на копии до повтора текста и даёт две таблицы: по кадрам (проход · ромбов · разных · новые формы · состав) и по формам (рисунок · впервые · на каких проходах). В цикле буквы — по первому появлению, поэтому они не совпадают с буквами кадра.

🔍 Ромб крупно: «🎯» и щелчок по треугольнику (или Alt+щелчок) — ромб под курсором, размер как в сводке. В окне он живьём, крупно; на холсте — белой рамкой, такие же — голубым, зеркальные — розовым. Лента ниже копит его разные состояния на границах проходов, с номером прохода; 🎞 — GIF этого ромба по проходам.

● REC 0:00
Двойной клик по холсту — Режим Дзен