Навигация

• Онлайн: 2



Рейтинг@Mail.ru Индекс цитирования

Яндекс
creation/prograf/skaz.txt · Последнее изменение: 19.03.2026 09:11 — nozdr

Сказка о том, как я за ёлками ходил

"Ох уж эти сказочки...
Ох уж эти сказочники..."


Точно не скажешь, но давненько это было… Ещё в староглиняные времена, в одной пластилиновой местности… Нет, не так. В те далекие времена, когда транспортом служили гужевые повозки… Или не… Собрались как то раз друзья на охоту, зашли в лес, а там… Или так: (мрачно) «Одна кружка была навечно прикована…» Не, снова не то.

Сидел я как-то в школе на скучном уроке… Во!

Цифровые кружева

Итак, сидел я как-то в школе на скучном уроке и от нечего делать пробовал на бумажке в клеточку раскрашивать квадратики. Правила раскраски придумал такие:

  • начинаю обходить из верхнего левого угла;
  • каждую строчку прохожу слева направо;
  • если сверху и слева от текущей клеточки квадратики одинаково закрашены, то я и текущую клеточку тоже закрашиваю, иначе перехожу к следующей.

Начал я с пустого листа, и получилась вот такая занятная картинка:

Мне она показалась лесом из перевёрнутых ёлок :) Стал пробовать заполнять верхнюю строчку и левый столбец какими-то первоначальными данными, то есть от балды их по-разному закрашивать – и начали вырисовываться другие, не менее интересные картинки. Я их в последствии для себя назвал «цифровые кружева», но вначале они мне показались всё же ёлочками.

Ну вот зелёненькие, ну похоже же на лес из ёлок? Похоже ведь… Не?.. Или всё же кружева?..

Как потом оказалось, своими кружевными ёлочками я забрёл в область элементарных клеточных автоматов. И придуманное мною правило реализовывало частный случай так называемого "правила 90". Если в двух словах, то элементарный клеточный автомат – это длинная грядка с лунками, в каждой лунке может жить одна клетка. При смене поколений клетка либо остаётся жить в своей лунке, либо умирает, либо рождается в пустой лунке. Всё это происходит по определённым правилам. Можно придумать много всяких правил, но все они учитывают заполненность текущей лунки и наличие соседей в соседних. В каждом условии анализируется 3 лунки с 2-мя возможными значениями.

Получается, что в одной длинной грядке для текущей лунки может быть 2^3 = 2×2×2 = 8 разных условий, определяющих, будет в следующем поколении в этой лунке клетка или не будет. И таких правил (комбинаций из 8 разных условий по два исхода в каждом) может быть 2^8 = 256. Правило 90 – это вариант условий 01011010, описывающих, в каком условии из восьми возможных (111, 110, 101, 100, 011, 010, 001, 000) лунка будет пустой (0) или полной (1). Двоичное число 010110102 = десятичному числу 9010, потому и «правило 90».

В моём случае, когда я начинал с пустого листа, получался совсем простой случай, потому что просчитывалось только первое поколение, а текущая лунка всегда была пустой. Поэтому вместо 8 было было всего 4 условия 00 01 10 11, которые вообще схлопывались в два (одинаковые соседи или разные). И всё это в результате сильно напоминало треугольник Серпинского.

То есть я упростил и без того элементарный клеточный автомат до самого простого вырожденного случая, но зато развернул его на два измерения, вместо грядки получив целый огород! И уж что выросло, то выросло.

Тогда я ничего про клеточные автоматы, фракталы, сложение по модулю 2 (XOR) и прочие умности не знал, а просто продолжал упражняться. Это я сейчас по памяти делаю такие картинки на компьютере, поэтому всё так красиво и ровненько выглядит. А тогда на бумажке мои изыскания выглядели как-то так:

И напоминало это скорее геометрическую резьбу:

Помню, что пробовал по-разному хитрым образом раскрашивать треугольники и «дорожки», которые между ними проходят, и это давало совершенно новый эффект – лес из ёлок пропадал, а появлялись антенны, направленные в космос!

После того скучного урока я несколько раз (на других таких же скучных уроках) возвращался к этой теме и отправлялся за ёлками и антеннами плести кружева. Как сейчас помню, были мысли попробовать использовать не только 0 и 1, а больше цифр, и каждую цифру раскрашивать своим цветом.

С 0, 1 и 2 тогда не очень удачно получилось, поэтому продолжать изыскания в этом направлении не стал, ибо всё сводилось снова к двум цифрам и повторяло бинарную раскладку 0100100100…

Наверное, надо было сделать правило, чтобы было 2+2=0, тогда получилось бы что-то типа такого:

Тоже, в общем-то, неплохо, можно и поэкспериментировать.

Как я узнал чуть позже, моё самое первое правило 0+0=1+1=1 0+1=1+0=0, задуманное при раскрашивании ячеек, называлось логической равнозначностью или эквиваленцией (эквивалентностью). И оказывается, всяких таких правил, по которым с двоичными цифрами можно что-то делать, в логике и математике существует довольно много.

Таблица истинности логических операций

Я помню, что тогда же у меня возникла идея попробовать при раскраске применить все эти правила, вдруг тоже получится что-то интересное? А вот получилось у меня что-то или нет – уже не помню. В своих бумажных архивах я таких черновиков не нашёл, надо будет как-нибудь поискать среди бекапов программ. Вдруг, повезёт?

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

Игра "Воспроизведение" Станислава Улама

Простор для опытов с другими правилами и исходными данными – огромный, так что флаг вам в руки, как говорится, и барабан на шею. Я этим позанимался – теперь ваша очередь :)

«На том и кончилась сказка. А вот теперь начинается чистая правда.»

Может быть и я когда-нибудь вернусь к полному анализу подобных цифровых кружев, чтобы, как говорится, закрыть гештальт. А что «как царём, значит, заделаюсь — первым делом, первым делом… чё первым делом? А, пианину! А то сто это за зызнь, без пианины?..»

Пианина у меня, кстати, уже была.

Пианина

Первой моей пианиной были бинарные часы.

Конечно же, я был не первый и отнюдь не последний, кто задумался о красоте, лаконичности и даже пользе бинарных кодов.

В основе двоичной системы лежит двоичный код, то есть возможность записывать числа при помощи двух различных знаков. Но двоичный код – это совсем не то же самое, что и двоичная система счисления. В двоичной системе числа записываются при помощи знаков 0 и 1 в порядке возрастания: 0,1,10,11,100,101,110,111,1000,1001… Графически её можно изобразить вот так:

Оказалось, что мои бинарные часики – это так называемая двоично-десятичная форма представления чисел, когда каждая цифра числа десятичной системы записывается в двоичном виде. На рисунке вверху в рамочке как раз тот самый кусочек двоичного кода, которым кодируют двоично-десятичную форму.

Но числа не обязательно располагать в порядке возрастания. Например, один товарищ по имени Фрэнк Грэй предложил двоичный код, в котором числа упорядочиваются таким образом, что каждое последующее число отличается от предыдущего лишь одним битом.

Такое определение было точным, но неоднозначным. Народ стал это дело осмысливать и насоздавал кучу бинарных кодов, подходящих под определение Грэя. Получился не один код, а прям целое их семейство. Изначально предложенный код Грэя стали называть зеркальным кодом Грэя, а остальные по именам авторов, их предложивших.

Вот как выглядят визуально некоторые из этих кодов:

Одни из этих картинок напомнили шагающие пушки из звёздных войн, другие каких-то ископаемых слонов, третьи – уток с утятами или страусов. Фантазия – она такая, забористая…

А ещё я хочу сказать, что используя один из семейства кодов Грэя можно идеально с минимально возможным числом шагов пройти игру NBIN, которую я невозбранно написал в процессе написания этой странички, так сказать, тоже на тему бинарных кодов и всего такого :)

«Ну, дворец! Ну, хорош! С лебедями! С чучелами!» В общем, классные получались то ли паровозики, то ли машинки, то ли слоники.

Ну а если их нарисовать подлиннее и поставить вертикально, то вырастал целый лес разных по конструкции ёлок! И стал я с этими кодами играться. Помню, что написал на бейсике программу для ПК Вектор-06Ц, где зеркально отражал эти картинки и получались многоступенчатые ракеты и деревья разной формы. Но пока я эту прогу не нашёл. Если не найду – новую напишу. Но попозже :)

Ещё я параллельно пытался рисовать пути, которыми можно соединить узлы получающихся картинок. Если отразить по вертикали получающиеся пути, то получались прям натуральные ёлочки!

На базе этих моих наработок уже много лет позже мне пришло в голову сделать Бинарный календарь из двоичных ёлочек:

Это уже был настоящий лес из ёлочек, да ещё и расцветкой – самых что ни на есть новогодних!

Помнится, после всех этих паровозиков, ракет и деревьев я даже начал играться с троичной системой счисления. Но это уже будет совсем другая сказка. Как и сказка про путь к звёздам.

Короче, «он и в третий раз ходил за ёлкой, и добыл её… Но это было уже весной, и он отнёс ёлку обратно.»

Мораль сказки такая: чем бы дитя не тешилось, лишь бы не вешалось. Если есть свободное время, склонные к математике и программированию мозги и тяга к творчеству, то можно порисовать бинарные ёлочки :) И не обязательно использовать для этого компьютер, достаточно бумажки в клеточку и карандаша. А уж если привлечь компьюююютер… Эхх! Короче, всех с Новым годом!


Инструменты страницы

Инструменты пользователя