11,520 поколінь на кількість годин / 10,016 х 6,796 ящик / 244,596 кількість поп
Ось ви йдете ... Було весело.
Ну, дизайн, звичайно, не є оптимальним. Ні з точки зору обмежувального поля (ці 7-сегментні цифри величезні ), ні з початкового підрахунку сукупності (є якісь непотрібні речі, і деякі речі, які, безумовно, можна було б спростити), а швидкість виконання - ну ... я Я не впевнений
Але, ей, це красиво. Подивіться:

Запусти!
Отримайте дизайн із цієї суті . Скопіюйте весь текст файлу в буфер обміну.
Нове : ось версія з AM та PM індикаторами для вимогливих.
Перейдіть до онлайн-тренажера JavaScript Conway . Клацніть імпорт , вставте текст дизайну. Ви повинні побачити дизайн. Потім перейдіть до налаштувань і встановіть крок генерації на 512, або щось навколо цих ліній, або вам доведеться чекати назавжди, щоб побачити оновлення дисплея годин.
Клацніть біжи , зачекай трохи і здивуйся!
Пряме посилання на версію браузера.
Зауважте, що єдиний алгоритм, який робить цей величезний дизайн корисним, - це хешлайф. Але за допомогою цього ви можете домогтися цілого годинника за кілька секунд. З іншими алгоритмами недоцільно навіть бачити, як змінюється година.
Як це працює
Тут використовується технологія p30. Просто основні речі, планери та легкі космічні кораблі. В основному дизайн іде зверху вниз:
- На самому верху - годинник. Це годинник 11520 періоду. Зауважте, що для забезпечення належного оновлення дисплея вам потрібно близько 10 000 поколінь, але дизайн все одно повинен бути стабільним з годинником меншого періоду (приблизно 5 000 або близько того - годинник повинен бути кратним 60).
- Потім відбувається етап розподілу годинника. Планер годинника скопійований у врівноважене дерево, тож наприкінці 32 планери прилітають в той самий момент на счетчик.
- Етап лічильника проводиться за допомогою засувки RS для кожного стану та для кожної цифри (ми рахуємо у десятковій кількості). Так існує 10 станів для правої цифри хвилин, 6 станів для лівої цифри мінут і 12 станів для годин (обидві цифри годин об’єднані тут). Для кожної з цих груп лічильник веде себе як регістр зсуву.
- Після етапу підрахунку з'являються таблиці пошуку. Вони перетворюють імпульси стану для відображення сегментів дій ON / OFF.
- Потім, сам дисплей. Сегменти просто зроблені з декількох рядків LWSS. У кожному сегменті є своя засувка для підтримки свого стану. Я міг би зробити простий логічний АБО з цифр станів, щоб знати, що сегмент повинен бути УВІМКНЕНО або ВИМКНЕНО, і позбутися цих засувок, але при зміні цифр не буде змін для сегментів, що не змінюються (через затримка сигналу). І там будуть довгі потоки планера, що надходять від таблиці пошуку до розрядних сегментів. Таким чином, це було б не так красиво. І це треба було. Так.
У будь-якому випадку, в цій конструкції насправді немає нічого надзвичайного. Немає дивовижних реакцій, які були виявлені в цьому процесі, і немає дійсно розумних комбінацій, про які раніше ніхто не думав. Просто шматочки, взяті тут і там, і зібрані (і я навіть не впевнений, що зробив це "правильним" способом - я був фактично абсолютно новим у цьому). Однак це вимагало багато терпіння. Зробити всі ті планери, які підійшли в потрібний час у правильному положенні, було чуханням голови.
Можливі оптимізації:
- Замість того, щоб копіювати та поширювати один і той же кореневий годинник на n клітинок лічильника, я міг би просто поставити один і той же блок годин n разів (один раз для кожної лічильникової комірки). Це насправді було б набагато простіше. Але тоді я не зміг би налаштувати це так легко, змінивши годинник в одній точці ... І в мене є електроніка, і в реальній схемі це було б жахливо неправильно.
- У кожному сегменті є своя засувка RS. Для цього потрібні таблиці пошуку для виведення як R, так і S імпульсів. Якби у нас був фіксатор, який би просто перемикав його стан із загального вхідного імпульсу, ми могли б зробити таблиці пошуку наполовину більшими. Для крапки в ПМ є така засувка, але вона величезна, і я не можу придумати щось більш практичне.
- Зменшіть дисплей менше. Але це було б не так приємно. І це треба було. Так.