Создай цифровые часы в игре жизни Конвея


479

Ваша задача - создать симулятор Game of Life, представляющий собой цифровые часы, который удовлетворяет следующим свойствам:

  1. Часы отображают часы и минуты в десятичной системе (например 12:00, 3:59, 7:24) с другим государством для каждого из 1,440 минут в день - либо часы будут идти от 0 до 23 или от 1 до 12 с индикатором PM.

  2. Шаблон является периодическим, и состояние зацикливается без какого-либо внешнего взаимодействия.

  3. Минуты обновляются через равные промежутки времени - от одной смены минуты до следующего уходит одинаковое количество поколений.

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

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

    • Цифры обновятся на месте. Каждый новый номер появляется в том же месте, что и предыдущий номер, и ограничивающие рамки цифр практически не перемещаются. (В частности, цифра не содержит 10 разных цифр в разных местах, которые открываются при каждом изменении цифр.)

    • Цифры появляются рядом друг с другом, без чрезмерного пространства между ними.


Ваша программа будет оцениваться по порядку следующим образом (с более низкими критериями, действующими как нарушители связей для более высоких критериев):

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

  • Самое быстрое исполнение - наименьшее количество поколений выигрывает за минуту.

  • Начальное количество живых клеток - побеждает меньшее количество.

  • Первый пост - предыдущий пост побеждает.


5
@tuskiomi Нет, дисплей должен быть десятичным.
Джо З.

2
Я уверен, что это B3 / S23, но не могли бы вы подтвердить или опровергнуть?
Конор О'Брайен

2
«Они также должны обновляться на месте - каждый новый номер должен появляться в том же месте, что и предыдущий номер». Как вы определяете «в том же месте», так как цифры не обязательно будут прямоугольными.
Мартин Эндер

4
насколько различимы должны быть наши десятичные цифры? является ли «если вы знаете, что это такое, и вы щурились, то вы можете сказать разницу между 0 и 8», или нужно пройти тест «анонимный наблюдатель может сказать, что это такое без подсказок»?
Спарр

3
это также было размещено в блоге Hackaday: hackaday.com/2017/03/11/a-clock-created-with-conways-life
Anool Mahidharia

Ответы:


1014

11 520 поколений за такт / 10 016 x 6 796 коробок / 24 4596 поп-карт

Вот, пожалуйста ... Было весело.

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

Но, эй, это красиво. Смотреть:

введите описание изображения здесь

Запустить его!

Получить дизайн из этой сути . Скопируйте весь текст файла в буфер обмена.

Новое : вот версия с индикаторами AM и PM для требовательных.

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

Нажмите Run , подождите немного и удивитесь!

Прямая ссылка на версию в браузере.

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

Как это устроено

Он использует технологию P30. Просто базовые вещи, планеры и легкие космические корабли. В основном, дизайн идет сверху вниз:

  • На самом верху есть часы. Это часы периода 11520. Обратите внимание, что вам нужно около 10.000 поколений, чтобы обеспечить надлежащее обновление дисплея, но дизайн все еще должен быть стабильным с часами меньшего периода (около 5.000 или около того - часы должны быть кратны 60).
  • Затем идет этап распределения часов. Планер часов скопирован в сбалансированном дереве, поэтому в итоге в один и тот же момент на сцену счетчиков прибывают 32 планера.
  • Стадия счетчика выполняется с использованием защелки RS для каждого состояния и для каждой цифры (мы считаем в десятичном виде). Таким образом, есть 10 состояний для правой цифры минут, 6 состояний для левой цифры минут и 12 состояний для часов (обе цифры часов объединены здесь). Для каждой из этих групп счетчик ведет себя как сдвиговый регистр.
  • После этапа подсчета есть таблицы поиска. Они преобразуют импульсы состояния для отображения действий включения / выключения сегментов.
  • Затем сам дисплей. Сегменты просто сделаны с несколькими строками LWSS. Каждый сегмент имеет собственную защелку для поддержания своего состояния. Я мог бы сделать простое логическое ИЛИ из состояний цифр, чтобы узнать, должен ли сегмент быть ВКЛ или ВЫКЛ, и избавиться от этих защелок, но были бы сбои для неизменяющихся сегментов, когда цифры меняются (из-за задержки сигнала). И будут длинные потоки планеров, идущие от таблицы поиска к сегментам цифр. Так что это не было бы так красиво. И это должно было быть. Да.

Во всяком случае, в этом дизайне нет ничего необычного. Там нет удивительных реакций, которые были обнаружены в этом процессе, и нет действительно умных комбинаций, о которых никто не думал раньше. Просто биты, взятые здесь и там и собранные вместе (и я даже не уверен, что сделал это «правильно» - я был совершенно новичком в этом). Однако это потребовало большого терпения. Заставить все эти планеры подняться в нужное время в нужном положении было поцарапать голову.

Возможные оптимизации:

  • Вместо того, чтобы копировать и распределять одни и те же корневые часы по n ячейкам счетчика, я мог бы просто поставить один и тот же блок часов n раз (один раз для каждой ячейки счетчика). Это на самом деле было бы намного проще. Но тогда я не смог бы так легко отрегулировать его, меняя часы в одной точке ... И у меня есть опыт работы с электроникой, и в реальной схеме это было бы ужасно неправильно.
  • Каждый сегмент имеет свою собственную защелку RS. Для этого требуются таблицы поиска для вывода как R, так и S импульсов. Если бы у нас была защелка, которая просто переключала бы его состояние с общего входного импульса, мы могли бы сделать таблицы поиска вдвое большими. Для точки PM есть такая защелка, но она огромна, и я не могу придумать что-то более практичное.
  • Сделайте дисплей меньше. Но это было бы не так красиво. И это должно было быть. Да.

26
Красивый. Хороший ответ.
Павел

33
@Pok, давай, ты мог бы попытаться добавить это сам ... Во всяком случае, я отредактировал пост с версией как AM + PM, для твоего удовольствия.
тусклый

48
Как вы знаете, этот ответ был опубликован в Microsiervos , одном из самых важных блогов о технологиях на испанском языке, с более чем
Луис Мендо

26
@ Рори Ты возьми свою голову, разбей ее о стену в десятки раз сильнее, чем сможешь. Вы тогда готовы начать.
тусклый

34
Итак, процесс проектирования таков: «Хорошо, мне нужно столкнуться с этим, и мой планер оттуда находится в этом положении в это время. Давайте посмотрим, как привести его туда, используя два отражателя. Дерьмо, что нужно для столкновения, это всего лишь два шага генерации слишком рано, там. Если я немного передвину отражатели, давайте посмотрим ... Дерьмо, слишком поздно. Хорошо, давайте столкнемся с ними где-нибудь еще. Дерьмо, у меня нет места, чтобы заставить мой планер идти туда. Хорошо, давайте добавим два других бесполезных отражателя, просто чтобы заставить его прибыть туда вместо этого. Дерьмо, отражатели сталкиваются с другим потоком планера ... Дерьмо, пойдем спать ».
тусклый
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.