Навигация

• Онлайн: 2



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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

«Как царём, значит, заделаюсь — первым делом, первым делом… чё первым делом? А, пианину! А то сто это за зызнь, без пианины?..»

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

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

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

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

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

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

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

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

Между прочим, используя один из семейства кодов Грэя можно с минимально возможным числом шагов решить задачу о Ханойской башне, быстро открыть двери в Duke Nukem 3D и идеально пройти игру NBIN, которую я невозбранно написал в процессе создания этой странички

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

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

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

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

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

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

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

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

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

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


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

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