Zbuduj zegar cyfrowy w grze życia Conwaya


478

Twoim zadaniem jest zbudowanie symulacji Game of Life przedstawiającej zegar cyfrowy, który spełnia następujące właściwości:

  1. Zegar wyświetla godziny i minuty po przecinku (na przykład 12:00, 3:59, 7:24) o innym stanie na każdym z 1440 minut dzień - albo godziny będzie od 0 do 23 lub od 1 do 12 ze wskaźnikiem PM.

  2. Wzorzec jest okresowy, a stan zapętla się bez interakcji zewnętrznych.

  3. Aktualizacja minut w regularnych odstępach czasu - od jednej zmiany minuty do następnej trwa tyle samo pokoleń.

  4. Anonimowy obserwator może na pierwszy rzut oka stwierdzić, że wyświetlacz ma być zegarem cyfrowym. W szczególności pociąga to za sobą:

    • Cyfry są widoczne i wyraźnie widoczne. Musisz być w stanie z całą pewnością powiedzieć, która godzina jest wyświetlana.

    • Cyfry aktualizują się. Każdy nowy numer pojawia się w tym samym miejscu, co poprzedni numer, i nie ma prawie żadnego ruchu obwiedni cyfr. (W szczególności cyfra nie zawiera 10 różnych cyfr w różnych miejscach, które są odkrywane przy każdej zmianie cyfr).

    • Cyfry pojawiają się obok siebie, bez nadmiernej przestrzeni między nimi.


Twój program będzie oceniany według następujących rzeczy, w kolejności (z niższymi kryteriami działającymi jako rozstrzygające dla wyższych kryteriów):

  • Rozmiar ramki granicznej - wygrywa prostokątne pudełko o najmniejszym obszarze, które całkowicie zawiera dane rozwiązanie.

  • Najszybsza realizacja - najmniej pokoleń, które awansują o minutę, wygrywa.

  • Początkowa liczba żywych komórek - mniejsza liczba wygrywa.

  • Pierwszy post - wcześniejszy post wygrywa.


5
@tuskiomi Nie, wyświetlacz musi być dziesiętny.
Joe Z.

2
Jestem prawie pewien, że to B3 / S23, ale czy mógłbyś potwierdzić czy zaprzeczyć?
Conor O'Brien,

2
„Muszą także aktualizować się w miejscu - każdy nowy numer musi pojawiać się w tym samym miejscu, co poprzedni numer”. Jak zdefiniujesz „w tym samym miejscu”, ponieważ cyfry niekoniecznie będą prostokątne.
Martin Ender

4
jak rozpoznawalne muszą być nasze cyfry dziesiętne? to „jeśli wiesz, co to jest i zezujesz, możesz dostrzec wystarczającą różnicę między 0 a 8”, czy też musi przejść test „anonimowy obserwator może powiedzieć, co to jest bez monitowania”?
Sparr

3
opublikowano to również na blogu Hackaday: hackaday.com/2017/03/11/a-clock-created-with-conways-life
Anool Mahidharia

Odpowiedzi:


1012

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:

wprowadź opis zdjęcia tutaj

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.

26
Piękny. Niezła odpowiedź.
Pavel

33
@Poke daj spokój, mogłeś spróbować dodać to sam ... W każdym razie, dla twojej przyjemności edytowałem post z wersją z AM + PM.
dim

48
Właśnie dlatego, ta odpowiedź została zamieszczona w Microsiervos , jednym z najważniejszych blogów o technologii w języku hiszpańskim, z ponad 800 000 obserwujących na Twitterze
Luis Mendo

26
@Rory Bierzesz głowę, roztrzaskujesz ją na ścianie kilkanaście razy tak mocno, jak to możliwe. Jesteś gotowy, aby rozpocząć.
słabe

34
Tak więc proces projektowania jest następujący: „Ok, muszę to zderzyć, a mój szybowiec przybywa z tego miejsca w tej pozycji. Zobaczmy, jak to przynieść za pomocą dwóch reflektorów. Cholera, to, czego potrzebuje, to zderzenie dwóch etapów generacji tam za wcześnie. Jeśli trochę przesunę reflektory, zobaczmy ... Cholera, za późno. Ok, zderzmy się z nimi gdzie indziej. Cholera, nie mam miejsca, żeby mój szybowiec tam pojechał. Ok, dodajmy dwa inne bezużyteczne reflektory, żeby tam dotarł. Cholera, reflektory zderzają się z innym strumieniem szybowca ... Cholera, chodźmy do łóżka. ”
dim
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.