11.520 pokoleń na liczbę zegarów / 10.016 x 6.796 kartonów / 244.596 liczników pop
Proszę bardzo ... Było fajnie.
Cóż, projekt z pewnością nie jest optymalny. Ani z punktu widzenia obwiedni (te 7-segmentowe cyfry są ogromne ), ani z początkowej liczby populacji (są pewne bezużyteczne rzeczy i pewne rzeczy, które z pewnością można uprościć), a szybkość wykonania - cóż ... I nie jestem pewien.
Ale hej, to jest piękne. Popatrz:
Uruchom!
Pobierz projekt z tej istoty . Skopiuj cały tekst pliku do schowka.
Nowość : oto wersja ze wskaźnikami AM i PM dla wymagających.
Przejdź do internetowego symulatora życia JavaScript Conway . Kliknij przycisk importuj , wklej tekst projektu. Powinieneś zobaczyć projekt. Następnie przejdź do ustawień i ustaw krok generowania na 512, lub coś wokół tych linii, albo będziesz musiał czekać wiecznie, aby zobaczyć aktualizację zegara.
Kliknij uruchom , poczekaj chwilę i zaskocz się!
Bezpośredni link do wersji w przeglądarce.
Zauważ, że jedynym algorytmem, który sprawia, że ten ogromny projekt jest użyteczny, jest hashlife. Ale dzięki temu możesz osiągnąć cały czas zawijania w kilka sekund. W przypadku innych algorytmów niepraktyczna jest nawet zmiana godziny.
Jak to działa
Wykorzystuje technologię p30. Tylko podstawowe rzeczy, szybowce i lekkie statki kosmiczne. Zasadniczo projekt idzie w górę:
- Na samej górze jest zegar. Jest to zegar z okresu 11520. Zauważ, że potrzebujesz około 10.000 pokoleń, aby zapewnić odpowiednią aktualizację wyświetlacza, ale projekt powinien nadal być stabilny z zegarem o mniejszym okresie (około 5.000 lub więcej - zegar musi być wielokrotnością 60).
- Następnie jest etap dystrybucji zegara. Szybowiec zegarowy jest kopiowany do zbalansowanego drzewa, więc na końcu jest 32 szybowców przybywających dokładnie w tym samym momencie do etapu liczników.
- Licznik jest wykonywany za pomocą zatrzasku RS dla każdego stanu i dla każdej cyfry (liczymy dziesiętnie). Jest więc 10 stanów dla prawej cyfry minut, 6 stanów dla lewej cyfry minut i 12 stanów dla godzin (tutaj łączone są obie cyfry godzin). Dla każdej z tych grup licznik zachowuje się jak rejestr przesuwny.
- Po etapie liczenia są tabele odnośników. Konwertują impulsy stanu, aby wyświetlać działania ON / OFF segmentów.
- Następnie sam wyświetlacz. Segmenty są po prostu wykonane z wielu ciągów LWSS. Każdy segment ma własną zatrzask, aby utrzymać swój stan. Mógłbym dokonać prostej logicznej-OR stanów cyfr, aby wiedzieć, czy segment musi być WŁĄCZONY lub WYŁĄCZONY, i pozbyć się tych zatrzasków, ale byłyby usterki dla niezmiennych segmentów, gdy cyfry się zmieniają (z powodu opóźnienia sygnałów). I będą długie strumienie szybowców płynące z tabeli przeglądowej do segmentów cyfr. Więc nie byłoby tak ładnie wyglądające. I musiało być. Tak.
W każdym razie w tym projekcie nie ma nic nadzwyczajnego. W tym procesie nie wykryto żadnych niesamowitych reakcji ani naprawdę sprytnych kombinacji, o których nikt wcześniej nie pomyślał. Tylko fragmenty zabrane tu i tam i złożone (i nawet nie jestem pewien, czy zrobiłem to „we właściwy sposób” - właściwie byłem zupełnie nowy). Wymagało to jednak dużo cierpliwości. Sprawienie, by wszystkie te szybowce zbliżały się we właściwym czasie we właściwej pozycji, było porywające.
Możliwe optymalizacje:
- Zamiast kopiować i dystrybuować ten sam zegar główny do n komórek licznika, mogłem po prostu umieścić ten sam blok zegara n razy (raz dla każdej komórki licznika). To byłoby o wiele prostsze. Ale wtedy nie byłbym w stanie tak łatwo go zmienić, zmieniając zegar w jednym punkcie ... A ja mam doświadczenie w elektronice i na prawdziwym obwodzie, to byłoby strasznie złe.
- Każdy segment ma własną zatrzask RS. Wymaga to tablic przeglądowych do wyprowadzania zarówno impulsów R, jak i S. Gdybyśmy mieli zatrzask, który po prostu przełączałby swój stan ze wspólnego impulsu wejściowego, moglibyśmy sprawić, że tabele wyszukiwania byłyby o połowę większe. Jest taki zatrzask dla kropki PM, ale jest ogromny i nie jestem w stanie wymyślić czegoś bardziej praktycznego.
- Zmniejsz wyświetlacz. Ale to nie byłoby tak ładnie wyglądające. I musiało być. Tak.