11 520 générations par compte d'horloge / 10 016 x 6 796 boîtes / 244 596 pop
Voilà ... c'était amusant.
Eh bien, le design n’est certainement pas optimal. Ni du point de vue de la boîte englobante (ces chiffres à 7 segments sont énormes ), ni du décompte de population initial (il y a des trucs inutiles, et des trucs qui pourraient certainement être simplifiés), et la vitesse d'exécution - eh bien ... I ne suis pas sûr.
Mais, hé, c'est beau. Regardez:
Exécuter!
Obtenez la conception de cet élément essentiel . Copiez tout le texte du fichier dans le presse-papiers.
Nouveau : voici une version avec les indicateurs AM et PM pour les plus exigeants.
Accédez au simulateur de vie JavaScript en ligne de Conway . Cliquez sur importer , collez le texte de conception. Vous devriez voir la conception. Ensuite, allez dans les paramètres et définissez l' étape de génération sur 512, ou quelque chose autour de ces lignes, ou vous devrez attendre indéfiniment pour voir la mise à jour de l'affichage de l'horloge.
Cliquez sur Exécuter , attendez un peu et soyez surpris!
Lien direct vers la version dans le navigateur.
Notez que le seul algorithme qui rend cette conception énorme utilisable est hashlife. Mais avec cela, vous pouvez réaliser l’ensemble de l’horloge en quelques secondes. Avec d'autres algorithmes, il n'est même pas pratique de voir l'heure changer.
Comment ça fonctionne
Il utilise la technologie p30. Juste des choses basiques, des planeurs et des vaisseaux spatiaux légers. Fondamentalement, la conception va de haut en bas:
- Tout en haut, il y a l'horloge. C'est une horloge de la période 11520. Notez qu’il faut environ 10 000 générations pour que l’affichage soit mis à jour correctement, mais la conception doit rester stable avec une horloge de plus petite période (environ 5 000 - l’horloge doit être multiple de 60).
- Ensuite, il y a l'étape de la distribution d'horloge. Le planeur de l'horloge est copié dans un arbre équilibré, ainsi, à la fin, 32 planeurs arrivent au même moment au stade des comptoirs.
- La phase de comptage est réalisée à l'aide d'un verrou RS pour chaque état et pour chaque chiffre (nous comptons en décimal). Il y a donc 10 états pour le chiffre de droite des minutes, 6 états pour le chiffre de gauche des minutes et 12 états pour les heures (les deux chiffres des heures sont fusionnés ici). Pour chacun de ces groupes, le compteur se comporte comme un registre à décalage.
- Après la phase de comptage, il y a les tables de recherche. Ils convertissent les impulsions d'état pour afficher les actions d'activation / désactivation de segments.
- Ensuite, l'affichage lui-même. Les segments sont simplement constitués de plusieurs chaînes de LWSS. Chaque segment a son propre verrou pour maintenir son état. J'aurais pu faire un simple OU logique des états des chiffres pour savoir si un segment doit être activé ou non, et supprimer ces verrous, mais il y aurait des problèmes pour les segments qui ne changent pas, lorsque les chiffres changent signaux retardés). Et il y aurait de longs flux de planeurs allant de la table de recherche aux segments de chiffres. Donc, ce ne serait pas aussi beau. Et ça devait être. Oui.
Quoi qu'il en soit, il n'y a rien d'extraordinaire dans cette conception. Aucune réaction étonnante n’a été découverte dans ce processus, et aucune combinaison vraiment intelligente à laquelle personne n’avait pensé auparavant. Juste des morceaux pris ici et là et mis ensemble (et je ne suis même pas sûr de l'avoir fait de la "bonne" façon - j'étais en fait complètement nouveau à cela). Cela demandait cependant beaucoup de patience. Mettre tous ces planeurs au bon moment dans la bonne position était un casse-tête.
Optimisations possibles:
- Au lieu de copier et de distribuer la même horloge racine aux n cellules de compteur, j’aurais pu mettre le même bloc d’horloge n fois (une fois pour chaque cellule de compteur). Ce serait en réalité beaucoup plus simple. Mais alors, je ne serais pas capable de l'ajuster aussi facilement en changeant l'horloge en un seul point ... Et j'ai une formation en électronique, et dans un vrai circuit, ce serait terriblement faux.
- Chaque segment a son propre verrou RS. Cela nécessite que les tables de consultation génèrent à la fois les impulsions R et S. Si nous avions un verrou qui basculerait simplement son état à partir d'une impulsion d'entrée commune, nous pourrions rendre les tables de consultation deux fois moins grandes. Il y a un tel verrou pour le point PM, mais il est énorme et je suis incapable de trouver quelque chose de plus pratique.
- Réduisez l'affichage. Mais ce ne serait pas aussi beau. Et ça devait être. Oui.