11,520 generaciones por cuenta de reloj / 10,016 x 6,796 caja / 244,596 cuenta de pop
Ahí tienes ... Fue divertido.
Bueno, el diseño ciertamente no es óptimo. Ni desde el punto de vista del cuadro delimitador (esos dígitos de 7 segmentos son enormes ), ni desde el recuento de población inicial (hay algunas cosas inútiles, y algunas cosas que ciertamente podrían simplificarse), y la velocidad de ejecución, bueno ... yo 'No estoy seguro.
Pero, oye, es hermoso. Mira:
¡Ejecutarlo!
Obtén el diseño de esta esencia . Copie todo el texto del archivo en el portapapeles.
Nuevo : aquí hay una versión con indicadores AM y PM para los exigentes.
Vaya al simulador de vida en línea JavaScript Conway . Haga clic en importar , pegue el texto del diseño. Deberías ver el diseño. Luego, vaya a la configuración y configure el paso de generación a 512, o algo alrededor de esas líneas, o tendrá que esperar para siempre para ver la actualización de la pantalla del reloj.
Haga clic en ejecutar , espere un poco y ¡sorpréndase!
Enlace directo a la versión en el navegador.
Tenga en cuenta que el único algoritmo que hace que este gran diseño sea utilizable es hashlife. Pero con esto, puede lograr que todo el reloj se ajuste en segundos. Con otros algoritmos, no es práctico incluso ver cambiar la hora.
Cómo funciona
Utiliza tecnología p30. Solo cosas básicas, planeadores y naves espaciales livianas. Básicamente, el diseño va de arriba hacia abajo:
- En la parte superior, está el reloj. Es un reloj de época 11520. Tenga en cuenta que necesita alrededor de 10.000 generaciones para garantizar que la pantalla se actualice adecuadamente, pero el diseño aún debe ser estable con un reloj de período más pequeño (aproximadamente 5.000 más o menos; el reloj debe ser múltiplo de 60).
- Luego, está la etapa de distribución del reloj. El planeador del reloj se copia en un árbol equilibrado, por lo que al final, hay 32 planeadores que llegan exactamente en el mismo momento a la etapa de contadores.
- La etapa del contador se realiza utilizando un pestillo RS para cada estado y para cada dígito (contamos en decimal). Entonces, hay 10 estados para el dígito derecho de los minutos, 6 estados para el dígito izquierdo de los minutos y 12 estados para las horas (aquí se fusionan ambos dígitos de las horas). Para cada uno de estos grupos, el contador se comporta como un registro de desplazamiento.
- Después de la etapa de conteo, están las tablas de búsqueda. Convierten los pulsos de estado para mostrar acciones de ENCENDIDO / APAGADO de segmentos.
- Luego, la pantalla en sí. Los segmentos simplemente están hechos con múltiples cadenas de LWSS. Cada segmento tiene su propio pestillo para mantener su estado. Podría haber hecho un OR lógico simple de los estados de los dígitos para saber si un segmento debe estar ENCENDIDO o APAGADO, y deshacerme de estos pestillos, pero habría fallas en los segmentos que no cambian, cuando los dígitos están cambiando (debido a retrasos de señal). Y habría largas corrientes de planeadores procedentes de la tabla de búsqueda a los segmentos de dígitos. Por lo tanto, no sería tan bonito. Y tenía que ser así. Si.
De todos modos, en realidad no hay nada extraordinario en este diseño. No se han descubierto reacciones sorprendentes en este proceso, y no hay combinaciones realmente inteligentes que nadie haya pensado antes. Solo fragmentos tomados aquí y allá y juntos (y ni siquiera estoy seguro de haberlo hecho de la manera "correcta", en realidad era completamente nuevo en esto). Sin embargo, requirió mucha paciencia. Hacer que todos esos planeadores subieran en el momento correcto en la posición correcta fue un rasguño en la cabeza.
Posibles optimizaciones:
- En lugar de copiar y distribuir el mismo reloj raíz a las n celdas de contador, podría haber puesto el mismo bloque de reloj n veces (una vez para cada celda de contador). Esto en realidad sería mucho más simple. Pero entonces no podría ajustarlo tan fácilmente cambiando el reloj en un solo punto ... Y tengo experiencia en electrónica, y en un circuito real, eso sería terriblemente incorrecto.
- Cada segmento tiene su propio pestillo RS. Esto requiere que las tablas de búsqueda generen pulsos R y S. Si tuviéramos un pestillo que simplemente cambiara su estado de un pulso de entrada común, podríamos hacer que las tablas de búsqueda sean la mitad de grandes. Hay un cierre para el punto PM, pero es enorme y no puedo encontrar algo más práctico.
- Haga la pantalla más pequeña. Pero eso no sería tan bonito. Y tenía que ser así. Si.