Генератор мозаик

Программа генерирует цветные орнаменты. По изначальной задумке — это схемы узоров для вышивки, но по сути вывод программы можно рассматривать как абстрактную мозаику.

Исходная программа (С. Гета — «Узоры предлагает микрокалькулятор», журнал «Наука и жизнь», 1985, № 6, стр. 43) создавала фрагмент узора в 4 ряда и 8 столбцов, при этом использовала все регистры и 94 шага программы и подходила только для Б3-34, МК-54 и МК-56. Благодаря более рациональному распределению регистров и некоторым программным приёмам удалось создать усовершенствованный вариант (автор А. Лаврик), который:

  1. содержит две версии: одну — для Б3-34, МК-54, МК-56, другую — для МК-61, МК-52 (далее для краткости версии именуются МК-54 и МК-61 соответственно);
  2. генерирует 7 (МК-54) либо 9 (МК-61) рядов узора (число столбцов остаётся прежним — 8);
  3. отмечает завершение генерации наглядным видеосообщением E;
  4. длинее всего на 4 шага (98 шагов в обоих вариантах).

Распределение регистров

Данные пользователя:

Использование

Количество применяемых в узоре цветов Cₙ — от 2 до 8 вписывается вручную прямо в программу — на шаге 47 (МК-54) либо 42 (МК-61); автором оригинальной программы рекомендовано 2…4, в программах для эмулятора по умолчанию стои́т 4. Следует заметить, что с его увеличением растёт вероятность того, что фактическое число цветов в созданном узоре окажется меньше заданного.

Инициализация генератора случайных чисел:

Для перехода к началу программы следует нажать В/О.

Очередная мозаика создаётся после нажатия клавиши С/П. Признаком завершения генерации является останов с появлением на индикаторе буквы E. Ряды сгенерированного фрагмента мозаики находятся в регистрах 1…7 (МК-54) либо 1…9 (МК-61) в виде восьмизначных целых чисел; каждый разряд соответствует одному элементу мозаики, каждая из цифр (1…Cₙ) обозначает отдельный цвет. Для получения законченного рисунка, надо:

  1. Выписать все полученные ряды начиная с последнего по первый один под другим.
  2. Каждый ряд дополнить справа зеркальной копией его разрядов, кроме последнего (который таким образом становится центральным):
    12345678 → 123456787654321
  3. Под первым рядом отзеркалить идущие выше ряды:
                      (999999999999999)
                      (888888888888888)
                       777777777777777
                       666666666666666
    (999999999999999)  555555555555555
    (888888888888888)  444444444444444
     777777777777777   333333333333333
     666666666666666   222222222222222
     555555555555555 → 111111111111111
     444444444444444   222222222222222
     333333333333333   333333333333333
     222222222222222   444444444444444
     111111111111111   555555555555555
                       666666666666666
                       777777777777777
                      (888888888888888)
                      (999999999999999)
    
  4. Если рисунок не устраивает, сгенерировать новый, нажав С/П и повторив предыдущие пункты.
  5. Ориентируясь на собственный вкус сопоставить каждой отдельной цифре свой цвет и нарисовать цельную «плитку» мозаики.
  6. Полученными плитками замостить всё «полотно» целиком.

Пример использования

Для МК-54 (Cₙ = 4):

4 В↑ 4 7 ÷ X→П 8 В/О С/П — E

Содержимое регистров рядов:

  1. 12144431
  2. 41211344
  3. 14123144
  4. 21414314
  5. 12143441
  6. 21414413
  7. 14124134

Для МК-61 (Cₙ = 4, датчик случайных чисел в исходном состоянии):

В/О С/П — E

  1. 31222231
  2. 22133122
  3. 21321223
  4. 23123221
  5. 32212312
  6. 13222231
  7. 31222213
  8. 12232132
  9. 22311322

Исходный код

Б3-34, МК-54, МК-56

КНОП    7       X→П0    CX      КX→Пe   FL0     04      ПП      33      ПП
33      П→X9    С/П     КБПe    /−/     ВП      1       −       1       0
×       +       1       0       ×       +       КП→X0   4       F10ˣ    ×
+       КX→Пe   В/О     П→X9    X→П0    П→X8    1       1       ×       Fπ
+       X→П8    КП→X8   ↔       П→X8    −       X→П8    (Cₙ)    ×       1
+       КX→П0   П→X0    Flg     Flg     Fx=0    35      КП→Xa   КП→Xb   КП→Xc
КП→Xd   8       X→П0    П→Xa    П→Xb    П→Xc    П→Xd    КПП9    П→Xb    П→Xc
П→Xd    П→Xa    КПП9    П→Xc    П→Xd    П→Xa    П→Xb    КПП9    П→Xd    П→Xc
П→Xb    П→Xa    КПП9    П→Xa    П→Xd    П→Xc    П→Xb    КПП9    П→Xd    П→Xa
П→Xb    П→Xc    КПП9    П→Xc    П→Xb    П→Xa    П→Xd    КБП9

МК-61, МК-52

П→Xe    X→П0    СX      КX→П0   П→X0    Fx=0    02      ПП      38      ПП
38      П→Xe    С/П     КБП0    /−/     ВП      1       −       1       0
×       +       1       0       ×       +       П→X0    ↔       КП→X0   4
F10ˣ    ×       +       ↔       X→П0    ↔       КX→П0   В/О     П→Xe    X→П0
КСЧ     КНОП    (Cₙ)    ×       1       +       К[x]    КX→П0   П→X0    Flg
Flg     Fx=0    40      П→Xa    П→Xb    П→Xc    П→Xd    КППe    П→Xb    П→Xc
П→Xd    П→Xa    КППe    П→Xc    П→Xd    П→Xa    П→Xb    КППe    П→Xd    П→Xc
П→Xb    П→Xa    КППe    П→Xa    П→Xd    П→Xc    П→Xb    КППe    П→Xd    П→Xa
П→Xb    П→Xc    КППe    П→Xc    П→Xb    П→Xa    П→Xd    КППe    П→Xb    П→Xa
П→Xd    П→Xc    КППe    П→Xd    П→Xc    П→Xa    П→Xb    КБПe

Особенности программы:

  1. Буква E одновременно служит адресом вызова подпрограммы, находящейся на шаге 14, и начальным индексом регистра для занесения сгенерированных элементов.
  2. Шаги 00…06 — очистка регистров, в которые будет помещён сгенерированный фрагмент орнамента.
  3. В МК-54 на шагах 35…46 вырабатывается псевдослучайное число ξ ∈ [0…1) по формуле ξₙ₊₁ = {11ξₙ + π} (фигурные скобки означают дробную часть заключённого в них выражения); в МК-61 и МК-52 вместо этого используется встроенный датчик псевдослучайных чисел К СЧ.
  4. Полученное случайное число преобразуется в очередной цвет ∈ [1…Cₙ], который заносится в один из регистров d, c, b, a, согласно содержимому #0 — шаги 47…51 (МК-54) либо 42…47 (МК-61).
  5. Двойное логарифмирование содержимого #0 и сравнение результата с 0 (МК-54: 52…56; МК-61: 47…51) — проверка на равенство 10, срабатывающая, когда в #0 оказывается символ (шестнадцатиричная цифра A = 10).
  6. Пункты 2…4 выполняются 4 раза подряд; таким образом в каждом из регистров a, b, c, d получается по одной цифре-цвету — A, B, C, D (значения необязательно разные, некоторые могут совпадать). Далее каждый вызов подпрограммы К ПП 9 (МК-54) либо К ПП e (МК-61) создаёт очередное сочетание цветов:
    BACD
    CDAB
    DABC
    CBAD
    BCDA
    ABCD
    BADC
    ADCB
    DCBA
    
  7. В итоге выходит половина фрагмента мозаики — 4 левых столбца (разбитые по рядам); затем точно так же создаются новые цвета A, B, C, D, комбинируются и дописываются к рядам как 4 правых столбца. На этом генерация заканчивается, и на индикаторе появляется сообщение E (шаги 11…12). Нажатие С/П приведёт к переходу в начало программы и запуску генерирования следующего узора.

Программу разработал, перевёл в формат эмулятора и составил эту инструкцию А. Лаврик — 2025-04-19