Генератор мозаик
Программа генерирует цветные орнаменты. По изначальной задумке — это схемы узоров для вышивки, но по сути вывод программы можно рассматривать как абстрактную мозаику.
Исходная программа (С. Гета — «Узоры предлагает микрокалькулятор», журнал «Наука и жизнь», 1985, № 6, стр. 43) создавала фрагмент узора в 4 ряда и 8 столбцов, при этом использовала все регистры и 94 шага программы и подходила только для Б3-34, МК-54 и МК-56. Благодаря более рациональному распределению регистров и некоторым программным приёмам удалось создать усовершенствованный вариант (автор А. Лаврик), который:
- содержит две версии: одну — для Б3-34, МК-54, МК-56, другую — для МК-61, МК-52 (далее для краткости версии именуются МК-54 и МК-61 соответственно);
- генерирует 7 (МК-54) либо 9 (МК-61) рядов узора (число столбцов остаётся прежним — 8);
- отмечает завершение генерации наглядным видеосообщением E;
- длинее всего на 4 шага (98 шагов в обоих вариантах).
Распределение регистров
Данные пользователя:
- 1…7 (МК-54) либо 1…9 (МК-61): ряды орнамента;
- 9 (МК-54) либо e (МК-61): E — видеосообщение и средство косвенной адресации; в программе для эмулятора уже находится в соответствующем регистре; в остальных случаях создаётся командами 1 К − ВП X→П номер (где номер соответственно 9 либо e);
- все остальные регистры — служебные.
Использование
Количество применяемых в узоре цветов Cₙ — от 2 до 8 вписывается вручную прямо в программу — на шаге 47 (МК-54) либо 42 (МК-61); автором оригинальной программы рекомендовано 2…4, в программах для эмулятора по умолчанию стои́т 4. Следует заметить, что с его увеличением растёт вероятность того, что фактическое число цветов в созданном узоре окажется меньше заданного.
Инициализация генератора случайных чисел:
- МК-54 — занести в #8 случайное число ξ₀ ∈ [0; 1): число игроков X→П 8.
- МК-61 — поиграться с командой К СЧ
Для перехода к началу программы следует нажать В/О.
Очередная мозаика создаётся после нажатия клавиши С/П. Признаком завершения генерации является останов с появлением на индикаторе буквы E. Ряды сгенерированного фрагмента мозаики находятся в регистрах 1…7 (МК-54) либо 1…9 (МК-61) в виде восьмизначных целых чисел; каждый разряд соответствует одному элементу мозаики, каждая из цифр (1…Cₙ) обозначает отдельный цвет. Для получения законченного рисунка, надо:
- Выписать все полученные ряды начиная с последнего по первый один под другим.
- Каждый ряд дополнить справа зеркальной копией его разрядов, кроме последнего (который таким образом становится центральным):
12345678 → 123456787654321
- Под первым рядом отзеркалить идущие выше ряды:
(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)
- Если рисунок не устраивает, сгенерировать новый, нажав С/П и повторив предыдущие пункты.
- Ориентируясь на собственный вкус сопоставить каждой отдельной цифре свой цвет и нарисовать цельную «плитку» мозаики.
- Полученными плитками замостить всё «полотно» целиком.
Пример использования
Для МК-54 (Cₙ = 4):
4 В↑ 4 7 ÷ X→П 8 В/О С/П — E
Содержимое регистров рядов:
- 12144431
- 41211344
- 14123144
- 21414314
- 12143441
- 21414413
- 14124134
Для МК-61 (Cₙ = 4, датчик случайных чисел в исходном состоянии):
В/О С/П — E
- 31222231
- 22133122
- 21321223
- 23123221
- 32212312
- 13222231
- 31222213
- 12232132
- 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
Особенности программы:
- Буква E одновременно служит адресом вызова подпрограммы, находящейся на шаге 14, и начальным индексом регистра для занесения сгенерированных элементов.
- Шаги 00…06 — очистка регистров, в которые будет помещён сгенерированный фрагмент орнамента.
- В МК-54 на шагах 35…46 вырабатывается псевдослучайное число ξ ∈ [0…1) по формуле ξₙ₊₁ = {11ξₙ + π} (фигурные скобки означают дробную часть заключённого в них выражения); в МК-61 и МК-52 вместо этого используется встроенный датчик псевдослучайных чисел К СЧ.
- Полученное случайное число преобразуется в очередной цвет ∈ [1…Cₙ], который заносится в один из регистров d, c, b, a, согласно содержимому #0 — шаги 47…51 (МК-54) либо 42…47 (МК-61).
- Двойное логарифмирование содержимого #0 и сравнение результата с 0 (МК-54: 52…56; МК-61: 47…51) — проверка на равенство 10, срабатывающая, когда в #0 оказывается символ − (шестнадцатиричная цифра A = 10).
- Пункты 2…4 выполняются 4 раза подряд; таким образом в каждом из регистров a, b, c, d получается по одной цифре-цвету — A, B, C, D (значения необязательно разные, некоторые могут совпадать). Далее каждый вызов подпрограммы К ПП 9 (МК-54) либо К ПП e (МК-61) создаёт очередное сочетание цветов:
BACD
CDAB
DABC
CBAD
BCDA
ABCD
BADC
ADCB
DCBA
- В итоге выходит половина фрагмента мозаики — 4 левых столбца (разбитые по рядам); затем точно так же создаются новые цвета A, B, C, D, комбинируются и дописываются к рядам как 4 правых столбца. На этом генерация заканчивается, и на индикаторе появляется сообщение E (шаги 11…12). Нажатие С/П приведёт к переходу в начало программы и запуску генерирования следующего узора.
Программу разработал, перевёл в формат эмулятора и составил эту инструкцию А. Лаврик — 2025-04-19