クロック数あたり11,520世代/ 10,016 x 6,796ボックス/ 244,596ポップカウント
そこに行く...楽しかった。
まあ、デザインは確かに最適ではありません。バウンディングボックスの観点(これらの7セグメントの数字は巨大です)も、初期の人口カウント(いくつかの役に立たないもの、確かに単純化できるものもあります)と実行速度のどちらからでも-私は...わからない。
しかし、ちょっと、それは美しいです。見て:
それを実行します!
この要点からデザインを入手してください。ファイルテキスト全体をクリップボードにコピーします。
新機能:これは、要求の厳しいAMとPMの両方のインジケータを備えたバージョンです。
行くオンラインはJavaScriptコンウェイのライフシミュレータ。[ インポート]をクリックして、デザインテキストを貼り付けます。デザインが表示されます。次に、設定に移動して、生成ステップを512に設定するか、それらの行の周囲に何かを設定します。そうしないと、クロック表示が更新されるのを永遠に待つ必要があります。
[ 実行]をクリックし、少し待って驚かれます!
ブラウザー内バージョンへの直接リンク。
この巨大な設計を使用可能にする唯一のアルゴリズムはハッシュライフです。ただし、これを使用すると、クロック全体を数秒でラップアラウンドできます。他のアルゴリズムでは、時間の変化を見ることもできません。
使い方
p30テクノロジーを使用します。基本的なもの、グライダー、軽量の宇宙船。基本的に、デザインはトップダウンになります。
- 一番上には時計があります。11520周期のクロックです。ディスプレイを適切に更新するには約10.000世代が必要ですが、デザインはより短い周期のクロック(約5.000程度-クロックは60の倍数である必要があります)で安定している必要があります。
- 次に、クロック分配段階があります。クロックグライダーはバランスの取れたツリーにコピーされるため、最後には32のグライダーがカウンターステージにまったく同じ瞬間に到着します。
- カウンタステージは、各状態および各桁のRSラッチを使用して作成されます(10進数でカウントしています)。そのため、分の右桁に10個の状態、分を表す左桁に6個の状態、および時間に12個の状態があります(時間の両方の桁がここにマージされます)。これらの各グループでは、カウンターはシフトレジスタのように動作します。
- カウント段階の後、ルックアップテーブルがあります。状態パルスを変換して、セグメントのオン/オフアクションを表示します。
- 次に、ディスプレイ自体。セグメントは、LWSSの複数の文字列で簡単に作成されます。各セグメントには、その状態を維持するための独自のラッチがあります。セグメントがオンまたはオフである必要があるかどうかを知るために、数字の状態の単純な論理ORを作成し、これらのラッチを取り除くことができましたが、数字が変化しているときに、変化しないセグメントにグリッチがあります信号遅延)。また、ルックアップテーブルからディジットセグメントへのグライダーの長いストリームがあります。そのため、見た目は良くありません。そして、それが必要でした。はい。
とにかく、実際にこのデザインには特別なものは何もありません。このプロセスで発見された驚くべき反応や、これまで誰も考えていなかった本当に巧妙な組み合わせはありません。ちょこちょこ取って組み立てただけです(そして、「正しい」方法でそれをしたかどうかさえわかりません。ただし、多くの忍耐が必要でした。これらすべてのグライダーを適切なタイミングで適切な位置に配置することは、頭を悩ませる作業でした。
可能な最適化:
- 同じルートクロックをn個のカウンターセルにコピーして配布する代わりに、同じクロックブロックをn回(カウンターセルごとに1回)配置するだけで済みます。これは実際にははるかに簡単です。しかし、その後、私は単一のポイントでクロックを変更することでそれを簡単に調整することはできません...そして、私は電子工学の背景を持っており、実際の回路では、それは恐ろしく間違っています。
- 各セグメントには独自のRSラッチがあります。これには、RパルスとSパルスの両方を出力するルックアップテーブルが必要です。共通の入力パルスから状態を切り替えるだけのラッチがある場合、ルックアップテーブルのサイズを半分にできます。PMドットにはこのようなラッチがありますが、それは巨大であり、より実用的なものを思い付くことができません。
- ディスプレイを小さくします。しかし、それは見栄えがよくありません。そして、それが必要でした。はい。