dev optozorax
4.17K subscribers
341 photos
53 videos
10 files
273 links
По деловым предложениям: optozorax.work@gmail.com.

Связь с админом через личку канала (кнопка в канале слева снизу).

Ютуб: https://www.youtube.com/@optozorax

Сайт: optozorax.github.io
Download Telegram
Всем известно про такой клеточный автомат, как "Conway's Game Of Life".

У этого автомата есть такое свойство как необратимость, то есть у данного расположения клеток может быть от 0 до бесконечного числа предков, которые приводят к этому состоянию. Состояния, у которых не может быть предка, называются Садом Эдема.

Легко понять что этот автомат необратим: в нём возможно создать состояния, приводящие к пустому пространству. Очевидно, у пустоты существует бесконечное число предков.

Для устранения этого свойства придумали обратимые клеточные автоматы, то есть у такого автомата всегда может быть потомок и причём только один, и его можно легко алгоритмически вычислить.

По сути такой автомат позволяет заглянуть в прошлое, если нам известно настоящее!

По этим автоматам очень мало информации в сети, из-за чего они меня так сильно заинтересовали. Пример такого автомата - Critters. Алгоритм его работы такой: без пересечений смотрятся все квадратики 2x2 и заменяются согласно трансформации на вики. Затем сетка квадратиков смещается на 1 по диагонали и делается то же самое. Теперь считается что прошёл один шаг и сетка снова двигается на 1 по диагонали (возвращается в прошлое состояние).

Введу пару обозначений:
* 0 - текущее состояние,
* 10 - симуляцию 10 шагов вперёд от текущего состояния,
* -10 - симуляцию 10 шагов назад.

Меня интересовало в этом автомате:
* как будет выглядеть -10, если я что-то нарисую в 0;
* как будет выглядеть 0, если просимулировать до 10, затем там что-то модифицировать, а затем просимулировать обратно.

По этим автоматам информации в сети настолько мало, что я не смог найти симуляцию Critters. Поэтому пришлось писать программу самому.

Быстренько накидал программку и выложил на github:critters.

⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
Так эволюционируют криттерсы при обычной симуляции вперёд из рисунка hi.

⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
А вот эволюция рисунка hi в обратную сторону.

⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
Сверху показано текущее состояние поля. Снизу показано как будет выглядеть поле, если его симулировать до 0 шага. Сначала происходит симуляция до 95 шага. Видно, что поле снизу остаётся неизменным. Но, затем я начинаю менять поле в настоящем, удаляя белые точки в некоторых местах. Видно, что от удаления одного глайдера или пары пикселей сразу сильно меняется прошлое. Причём эффект взрывной, ломается целая конструкция.

⬇️
Здесь показано как выглядят правила преобразования с википедии, и как они записаны у меня в программе. Массив для обратной симуляции вычисляется из этого. Вообще любая перестановка этого массива тоже является обратимым клеточным автоматом, наверное среди всех этих перестановок можно найти что-то интереснее.

⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
Пример одной из перестановок, данного массива.

⬇️
Я сделал этот автомат на зацикленном поле, следовательно количество состояний конечно, и ограничено 2^(WxH). А учитывая что у любого состояния всегда существует один потомок и один предок, любое состояние через какое-то количество шагов обязательно вернётся в самого себя. Таким же образом можно объяснить почему при применении одной и той же комбинации для Кубика Рубика, он всегда вернётся в изначальное состояние, через определённое число шагов. Таким же образом, если наш мир является конечным обратимым автоматом, то через определённое число больших взрывов и схлопываний он полностью повторит сам себя (напоминает одну серию в Футураме :) ).

Ещё этот автомат не может потерять информацию, потому что он должен быть обратимым. Что это значит можно объяснить на примере: допустим, вы захотели сделать на этом конечном автомате устройство для умножения двух чисел. Тогда такое устройство должно уметь симулироваться обратно, а значит оно должно уметь получать для одного числа два других, которые при умножении дали это число. Но самого числа будет недостаточно, нужна будет ещё мета-информация или "мусор", чтобы вернуться в изначальное состояние. Скорее всего этот "мусор" будет кучей глайдеров, которые вышли из устройства умножения в процессе. Так что взломать RSA не получится)) Кстати, существуют обратимые языки программирования! Пример: Janus.

В "Игре Жизнь" при создании устройства умножения никаких глайдеров не вылетает, всё работает очень чисто, и после умножения устройство может вернуться в изначальное состояние. Это потому что данный автомат теряет информацию.

А наш мир можно симулировать в обратную сторону? Я слышал, что согласно классической механике, да. Насчёт квантовых эффектов уже не уверен. Кстати, в физике существует такая проблема как исчезновение информации в чёрных дырах.

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

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

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

До нескорой связи.

El. Psy. Kongroo.
#мысли

Сейчас проблема подписок в том, что однажды подписавшись, ты скорее всего вряд ли отпишешься, потому что принимать такое решение очень сложно: "Ну зачем-то же я подписался", "Ну он же делал годноту". Обычно отписка происходит только если человек начал делать что-то очень плохое. Да и вообще отписываются очень сознательные люди, которые анализируют контент что они потребляют.

Из-за этого у среднего человека становится слишком много подписок и ему становятся необходимы всякие умные ленты.

Другой вариант решения этой проблемы - это предоставление статистики потребления контента на каждого автора, на которого ты подписан.

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

И ещё эта статистика должна быть разделена на два периода: до подписки и после. Потому что может быть так, что ты подписался на человека за то что он делал раньше, а щас он делает фигню, которую ты не смотришь.

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

Может пусть сам ютуб предлагает каналы от которых нужно отписаться (умная анти-лента).

Конечно, эту идею надо распространить на всё: вк, твиттер, телега итд.

С такими инструментами станет проще жить, и возможно число подписчиков действительно начнёт что-то значить.
👍1
Продолжить писать такие мысли и философствования?
Anonymous Poll
80%
Да
20%
Нет, давай только программирование
Меня давно интересует такая тема как симуляция эволюции. Впервые об этом я узнал из программы Амёбы, оттуда же я впервые узнал как работает эволюция. Вероятно именно симуляция эволюции является той причиной почему мне было так интересно программирование в школе. Я всегда мечтал написать свою самую лучшую симуляцию, и искал в интернете подобные творения, изучал их.

Затем я понял, что за всё это время набрал достаточно материала чтобы это можно было систематизировать и собрать в одном месте.

По чату @metageometria я понял что отличный способ систематизировать информацию - это сначала кидать её в чат в несформированном виде, давать комментарии, обсуждать, а затем пройтись по чату и собрать это в один документ. Заодно можно найти единомышленников и обсуждать это с ними; собирать людей с одними интересами вместе.

Именно так и родились репозитории о 4D и гиперболической геометрии.

После этого успеха я создал чат @emergevolution для сбора и систематизации информации по симуляции эволюции. Постепенно я туда кидал всё что мне было известно, к текущему моменту там накопилось много информации, и я рад объявить что наконец собрал её воедино!!! Всё находится здесь:

https://github.com/optozorax/emergevolution

Заодно там есть немного писанины от меня о том как работают методы оптимизации. Конечно, он систематизирован не идеально, не везде даны абсолютно подробные комментарии, но хоть когда-то же надо опубликоваться?)

Так же пока делал это всё, описал как можно автоматически генерировать и вставлять оглавление в markdown.
5-бальная шкала оценки неверна. #мысли

На данный пост меня вдохновило следующее сообщение: klavaorgwork/159174. В нём чувак говорит что оценка 3 - это оценка "удовлетворительно", когда сервис работает как полагается. 4 он ставит когда есть что-то действительно хорошее. И тут я прозрел, что всю жизнь считал что оценку 3 надо ставить за плохую работу. Поэтому по умолчанию ставил 5 звёзд, а если что-то работало нехорошо, то ставил оценку ниже, в зависимости от того насколько плохо. То есть для меня оценка 5 была аналогом "удовлетворительно". И, думаю, я не один такой. Наше понимание этих оценок сломала школьная система, которая говорит что на 3 нельзя учиться, истина только в 4, а лучше в 5.

Мне кажется это проблема не только из-за школы, но ещё сам способ задания оценок неверен, он противоречит интуиции. Итак, у нас практически везде предлагается ставить оценку либо от 1 до 5, либо от 0 до 10. Первая очевидная проблема этих оценок: они все состоят из положительных чисел. Нам предлагается оценивать что-то только степенью хорошести. То что "хорошо" на 1 из 5 означает на самом деле "плохо" - это контринтуитивно.

"Хорошо" надо оценивать положительными числами, а "плохо" отрицательными. Поэтому система оценки должна быть в целых числах от -2 до +2, где оценка 0 будет считаться нейтральной, "удовлетворительно". ±2 будет считаться как максимальная степень хорошего и плохого. +1 должно стать оценкой для обозначения чего-то достаточно хорошего, чтобы не быть нейтральным, но ещё не самое лучшее, то есть промежуточное. Больше не нужно промежуточных, иначе будет слишком сложно выбрать.

Я предлагаю называть это симметричной шкалой оценки.

Помимо неинтуитивности, у пятибальной шкалы существует такое наследие как идеология. Согласно этой идеологии любая оценка ниже 5 считается плохой, и никто не хочет получать 3. То есть "удовлетворительно" - это "плохо", как бы противоречиво это не звучало. В школах же оценка 5 считается достигнутой, когда ты выполнил все задания. Например, на контрольной, ты решил все задачи - значит ты получаешь 5. Оценка 5 - это не самая лучшая оценка, это просто когда ты всё решил. Выше нету, существует только ниже. Если получил 4 или 3, то ты считаешься ущербным, потому что не сделал все задания. Видимо поэтому я по умолчанию всем приложениям ставил 5.

Ещё одна проблема любой положительной оценки - это то, что её промежуточные значения можно трактовать различным образом, и это трактование может отличаться от человека к человеку, 10-бальная шкала в этом плане ещё хуже. Симметричную же шкалу трактовать иным образом очень сложно, там чётко обозначено понятие нейтралитета, негативного, позитивного и максимального.

С приходом новой шкалы должна прийти и новая идеология. Во-первых все должны перестать гнаться за максимальной оценкой, социально допустимой нормой должно стать 0. Должно быть нормально и не позорно делать что-то на 0 баллов. Аналогично в школе должно стать абсолютно нормально учиться на 0, этой оценкой должен быть минимально необходимый минимум. Во-вторых, раз 0 стал нормальной оценкой, контрольные должны быть переделаны. Контрольные теперь не могут давать +2 балла за полное их решение, они должны содержать различные секции: необходимое к решению (полное решение их даёт 0), и дополнительные задания, которые уже позволяют показать что вы умнее необходимого минимума. Для получения оценки +2 должны даваться задачи по сложности сопоставимые с профильными лицеями или олимпиадами. Так у школ появится возможность оценивать сверх-преуспевающих учеников, а не просто тех, кто упёрся в стенку 5 баллов.

Я считаю, что все шкалы оценки должны стать симметричными. Не только в школах, но ещё и в магазинах приложений, кинопоиске, imdb итд.

На эту тему советую ещё заценить статью моего друга: bpblog/111.

P.S. погуглил про пятибальную шкалу, и на каждом углу говорят что она плохая, и в школах надо её заменить другой положительно-определённой шкалой: 10, 12, 15 😂 ИМХО, без отрицательных чисел, а особенно нуля, это будет лишь полумерой.

Если найдёте упоминания симметричной шкалы - скидывайте мне в личку @optozorax.
А ещё я наконец решил "фундаментальные проблемы математики" , которые описывал в /230.

Повторю суть: я хочу написать программу для символьных (аналитических) вычислений. Хочу чтобы там можно было выводить формулы из аксиом и других формул. Для этого мне нужно записать аксиомы над стандартными операциями и функциями. Всякие коммутативности/ассоциативности для сложения-деления-умножения я легко записал. Проблемы начались когда мне надо было придумать представление для частично заданных функций, например: модуль, знак. Как задавать такие функции, чтобы над ними можно было совершать операции, и как записать аксиомами их структуру?

Я придумал такие операторы как ifval и many, которые подробно описаны в /99. Я надеялся комбинацией этих операторов записать частично заданную функцию. В итоге оказалось, что эти операторы настолько широкие, что они приводят к противоречиям, и на практике их использовать невозможно.

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

Но вот недавно, после релиза репозитория с эволюцией, я сел за fopply, немного подумал, и нашёл решение!

Надо ввести одну функцию для этого дела: part(cond, then, else). То есть эта функция возвращает then, если в cond находится $true, либо else иначе.

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

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

⬇️
С помощью этой функции я смог записать модуль, sign, и даже смог из базовых формул вывести эту: a <-> part(b == 0, a, a*b/b) (к формуле можно добавить умножение чего-то на самого себя, если это что-то не равно нулю). А раз я смог формально вывести такую экзотику, значит я иду по правильному пути.

Так же я избавился от такой концепции как anypos, принцип которой описан в /101. Я пытался в структуре формулы записать что она способна быть в любом аргументе функции. То есть если записано: $$anypos(x+1), то оно может сматчиться с функцией f(y-2, z+3, 2+1) в третьем аргументе. Затем выдумывал множество способов записать когда этих аргументов два, как записать перестановки итд. Но потом понял что подготавливать выражение к такому виду чтобы оно смогло сматчиться с формулой - дело пользователя. То есть, если у пользователя есть функция: f(y-2, z+3, 2+1), то он делает замену g(x) := f(y-2, z+3, x), и затем записывает g(2+1), которая уже легко сматчится с формулой, работающей над формулами с одним аргументом. Таким же образом можно заставить работать формулы глубоко внутри, а не только в каком-то аргументе. Благодаря этому основа программы очень сильно упростится.

В общем, чувствую, я наконец могу начать писать код и получать свой дофамин.
А тем временем у меня большой апдейт по fopply!!!

Для начала дизайнерские штуки.

1. Биндинг.

Предположим, у нас есть формула: part(x, a, a) <-> a и есть выражение x+1, я хочу применить эту формулу справа-налево, тогда чем у меня должен быть x из формулы? По идее там должно быть что угодно, ведь если я применяю слева-направо, то информация о x тупо стирается.

Я придумал что можно вручную записать чему будут равны неизвестные переменные формулы следующим образом: x := x = 0 (это я называю биндингом), тогда результат будет: part(x = 0, x+1, x+1). У формулы и выражения собственное пространство имён, так что коллизий с иксом с одной стороны и с другой не возникает.

2. Задание положения.

Например, у нас есть формула a+b <-> b+a и есть выражение 2*(3+4). Как мне применить эту формулу внутрь выражения? Можно вручную записать позицию в виде массива: [1], и применять формулу к внутренней части. Но это неудобно для пользователя, поэтому я придумал следующую запись:
2*(3+4)
. ^^^

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

Хотя вчера друг предложил мне что можно прямо внутри формулы записывать задание позиции, например так: 2+({3+4}).

Замечание: нельзя записать:
1+2+3+4
. ^^^
потому что формула представляется деревом следующего вида: +(1, +(2, +(3, 4))). Соответственно не существует такого под-дерева в этом дереве, которое было бы равно +(2, 3). Здесь нужно только преобразовывать исходное выражение.

3. Матчинг произвольной функции.

Итак, у нас есть формула: a = b & $f(a) <-> a = b & $f(b). Эта формула означает, что если у нас где-то записано a = b, то мы можем в местах, где это равенство записано через логический оператор И, заменить переменную a на переменную b. $f(a) здесь означает "любая функция с одним аргументом, который матчится в паттерн a".

То есть данная формула может быть применена к:
1. a = 1 & a
2. a = 1 & c+a = 0
3. a = 1 & (x*a + b*a + a*a = 0 | x = 5)

Первый случай тривиальный. А что делать со вторым и третьим? Как нам найти то самое место что матчится с a? Первое что приходит на ум - это брать известную нам информацию с чем оно должно матчиться и рекурсивно пройтись и произвести замену.

С первыми двумя этот подход сработает, но проблемы начнутся на третьем. Мы должны сматчить первое совпадение? Второе? Третье? А если я хочу заменить на единицу только второе и третье с четвёртым совпадение с a, а первое в x*a оставить?

И вот для таких случаев я придумал, что нужно вручную записать паттерн, который будет считаться $f, например: $f(x) := a + b*x + x*x | c для третьего случая.

В данном случае сматчится следующим образом:
a := x*a
b := b
c := x = 5

Заметьте, что в этом паттерне можно описать только структуру, не надо описывать один в один всё выражение.

Для формулы $f(sin(a)) и выражения sin(1+2) * sin(1+2) можно записать паттерн $f(x) := x * x, в итоге оно сматчится с x := sin(a), а затем a сматчится с 1+2.

Конечно, в будущем для этого будет сделан интерфейс, чтобы такое можно было натыкать мышкой.

⬇️
4. Аксиомы и доказательства.

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

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

Именно такое я и сделал в этом файле: math.fpl. Весь сложный синтаксис я уже описал ранее, оставшийся синтаксис в этом файле интуитивно понятен.

Кстати, я там заложил на будущее формулу unsafe, которая имеет следующий вид: a <-> b, то есть с помощью неё можно заменить что угодно на что угодно 😄

В этом файле я записал базовые формулы и даже доказательства, использовал всё что рассказал ранее. Поэтому теперь главной задачей стоит: запрогать считывание этого файла во внутреннюю структуру и проверку доказательств.

Успехи в программировании

И я сделал эту проверку и всё что описано выше, всё работает! 🎉🎉🎉

Можно зайти в репозиторий, модифицировать fpl/math.fpl, писать свои аксиомы, свои доказательства, и запускать проверку доказательств через cargo run.

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

А следующей проблемой, с которой предстоит разобраться - это как работать с числами внутри формул, чтобы можно было записать что подобные можно приводить, что числа можно сокращать и умножать, а ещё делать это в обратную сторону.

А, ну и раз я поступил в магистратуру, надо бы найти преподавателя, который согласится взять эту тему на магистерскую диссертацию. Надеюсь найду, а то я не хочу тратить своё время на какую-нибудь фигню.
Forwarded from Блог*
#blogrecommendation

Этот канал не существует в вакууме. Есть и другие каналы, которые интересны мне и которые я бы мог назвать друзьями Блог*а. Так что без лишних слов представляю вам их, с описаниями от авторов.

@ihatereality
Личный блог вафли, где он в основном пишет о извращениях с растом. Или просто о чём ему в голову взбредёт. Но в основном о расте.
(^берегите его, он умный и он няша)

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

@ShadyBytes
Личный блог айтишника-либертарианца про технологии и общество. Меньше пресс-релизов крупных компаний, больше личного опыта.

@nlinker_rust
Собираю ржавые и лямбдообразные новости, прикольные цитатки с форумов, ссылки на статьи и всё такое. В-общем, сюда я тащу такие крупицы, которые мне будет жаль потерять в цифровой бездне. Возможно, они покажутся интересными и вам.

@repushko_channel
Один шизоид ругается на IT индустрию и постит иногда смешные мемы.
(любитель философии)

@tipaproit
Типа про IT и вот это вот всё. Прокрастинируем и программируем программы на компьютере. Авторский блог exclusively for Telegram.

@rustamann
(микро) блог @mersinvald о Rust, разработке, и жизни экспата в Германии. Ахтунг! Повышенное содержание мемов.
Сразу как у нас открыли кинотеатры, я побежал смотреть фильм "Довод" от Нолана. Мне очень понравилось. И весь дальнейший пост будет основан на концепции из этого фильма, так что если вы не любите спойлеры, то лучше не читайте дальше. Хотя, возможно, я рассказываю спойлеры только максимум на уровне трейлера, я хз, не смотрю трейлеры из-за ненависти к любым спойлерам. Короче, я вас предупредил.

Меня не особо интересуют всякие персонажи и прочие кожаные мешки, а вот концепции и идеи - очень даже. Поэтому мне ОООЧЕНЬ понравился этот фильм. И в "Доводе" как раз показывается ОЧЕНЬ интересная концепция, когда вещество, идущее обратно во времени, существует параллельно с веществом, идущим вперёд во времени. Это даже путешествием во времени назвать нельзя, потому что это не то читерство с гитовыми ветками, которое нам показывают в других фильмах, это очень органичная, сложная, противоречивая и интересная вещь. Сразу после фильма я задался единственным главным вопросом: возможно ли и как такое симулировать?! Интересует как минимум возможность симуляции такого через клеточный автомат, не то что физика. Как раз хорошим совпадением стало то, что я за пару месяцев до этого наконец реализовал обратимый автомат Critters и немного его поисследовал (/235). Я сразу подумал, что обратимость Critters должна как-то помочь с концепцией Довода, но в первые дни я так и ничего не смог придумать.

Так же я начал думать каким образом прошлое может знать о том каким будет будущее, так что наверняка обязательно придётся решать какую-то астрономически огромную систему уравнений, чтобы реализовать что-то подобное "Доводу", поэтому концепция обычной пошаговой симуляции тут может быть неприменима.

Затем я начал целенаправленно думать как это симулировать и наконец придумал. Обратимость Critters действительно помогла, и я сделал на основе него обратимый клеточный автомат, где существует одновременно три вещества:
* пустота - чёрные клетки,
* вещество идущее вперёд во времени - синие клетки,
* вещество идущее обратно во времени - красные клетки.
(Блин, у меня цвета походу с фильмом не сходятся :( )

При этом:
* Если свапнуть цвет красного и синего, и ещё сделать одну мелочь, то симуляция времени вперёд будет равна симуляции времени назад до свапа. То есть все состояния корректно идут во времени в нужную сторону, и существует относительность направления времени!: красным кажется что они идут вперёд, а синие назад во времени, а синим что они идут вперёд, а красные назад.
* Наборы клеток, которые состоят из пустоты, красных и синих клеток корректно обрабатываются.
* Если правила для обычных Critters имеют размер 2^4, то в моём автомате они размером 2*3^4. Такой большой размер тоже составляет некоторую сложность в разработке правил.

Назвал я этот автомат гордым именем и с уважением к вдохновителю: The Tenet Of Life (Critters является самым близким аналогом The Game Of Life в мире обратимых автоматов, поэтому вполне логично).

⬇️
Там были интересные проблемы и их решения, так что я хочу всё это подробно рассказать вместе с картинками, но телеграм слишком слаб для такого формата. Поэтому я думаю написать статью. И вместо того чтобы писать статью в свой блог optozorax.github.io, куда зайдут только мои читатели, думаю эту статью надо опубликовать на Хабр. Ну и сразу в статье на Хабре намного подробнее рассмотрю тему простых обратимых автоматов, которые я не очень подробно раскрыл раньше.

В статье на хабре хочу вставить гифки и оставить ссылку на веб-симуляцию моего автомата. Естественно, эту веб-симуляцию я пишу на Rust'е и компилирую в WASM. Сейчас как раз использую macroquad и заново учусь программировать графику. В частности недавно я научился рендеринть из текстуры в текстуру при помощи шейдеров. А раньше я такое делал на CPU. Ну и спасибо Феде за макроквад, интерфейс делается очень просто, и много полезных примеров :)

А по поводу полученных результатов: ну ничего интересного или революционного я не увидел. Просто красные и синие клетки кипишатся и обладают хорошими математическими свойствами. Поэтому самое интересное - то как я его сделал, а не сам результат. Результаты не интересные потому что сам изначальный автомат Critters не очень интересный. Тут надо другие обратимые автоматы исследовать с таким подходом.

Ну и ещё результаты не очень интересные, потому что у меня нет самой главной фичи из фильма - устройства, которое обращает назад во времени всё что в него войдёт. Ведь именно такое устройство и создаёт интересные парадоксы и вынос мозга. А судя по тому что получилось у меня, просто параллельное существование двух временных типов материи не очень интересно и не очень противоречиво.

Мне кажется ввести клетки, которые делают такое инвертирование либо невозможно, либо придётся решать астрономическую систему уравнений, либо очень сложно. И если такое вводить, то надо заранее просчитывать вселенную чтобы она была согласована с этим устройством, потому что оно на вход должно принимать два одинаковых объекта с разными направлениями времени. То есть надо заранее пускать обратный и прямой глайдер в эту машину, чтобы они вошли в неё и исчезли, тогда результат этой машины будет как в фильме.

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

Ещё, касательно простых обратимых автоматов могу посоветовать смотреть это:
* Большой обзор клеточных автоматов от Онигири
* Квантовый компьютер и обратимые вычисления от Онигири
* Принцип Ландауэра на Википедии

Я знаком с Онигири, и так интересно случается что у нас абсолютно случайно темы с этими автоматами пересеклись по времени и по смыслу в видео что я посоветовал) У него к сожалению видео не изобилуют сложными подробностями, и ориентированны на более молодую аудиторию, но в целом много нового можно узнать)

Ладно, а теперь время картинок!

⬇️
This media is not supported in your browser
VIEW IN TELEGRAM
В прошлом посте про Critters я не осилил управление мышью, поэтому там были очень шакальные картинки, и вы даже не смогли рассмотреть глайдера. Чтож, я исправил это недоразумение, теперь я сделал управление мышью и можно масштабировать, передвигать. И ещё интерфейс есть вместо клавиш на клавиатуре.

⬇️
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Это глайдер в обычном автомате Critters. Так как он синего цвета, видно что он идёт вперёд во времени. Здесь показывается как этот глайдер двигается в направлении куда он указывает. Так же здесь показывается сетка, чтобы можно было видеть как работают блочные правила обычного Critters, о которых я ранее рассказывал в /239.

⬇️
👍1