ConwayのGame of Lifeでデジタル時計を作成する


479

あなたの仕事は、デジタル時計を表すGame of Lifeシミュレーションを構築することです。これは次の特性を満たします。

  1. クロックは、(例えば小数で時間と分を表示し12:003:597:24一日の1440分ごとに異なる状態で) -のいずれかの時間は、PMインジケータを0から23まで、または1から12に行きます。

  2. パターンは周期的であり、状態は外部との対話なしでループします。

  3. 分は定期的に更新されます。1分の変化から次の変化まで、同じ世代数がかかります。

  4. 匿名の傍観者は、ディスプレイがデジタル時計であることを一目で知ることができます。特に、これには以下が伴います。

    • 数字が表示され、はっきりと区別できます。どの時間が表示されているかを一目で確実に確認できる必要があります。

    • 数字が所定の位置に更新されます。新しい番号はそれぞれ前の番号と同じ場所に表示され、数字の境界ボックスの動きはほとんどありません。(特に、数字は、数字が変更されるたびに明らかになるさまざまな場所に10の異なる数字を含んでいません。)

    • 数字は隣り合って表示され、それらの間に余分なスペースはありません。


プログラムは、次の項目で順番にスコアが付けられます(低い基準が高い基準のタイブレーカーとして機能します)。

  • 境界ボックスサイズ—与えられたソリューションを完全に含む最小の領域を持つ長方形のボックスが優先されます。

  • 最速の実行-1分間進むのが最も少ない世代が勝ちます。

  • 初期の生細胞数—小さい数が勝ちます。

  • 最初に投稿—早い投稿が優先されます。


5
@tuskiomiいいえ、表示は10進数でなければなりません。
ジョーZ.

2
これはB3 / S23であると確信していますが、確認または拒否できますか?
コナーオブライエン

2
「それらはその場で更新する必要があります。新しい番号はそれぞれ、前の番号と同じ場所に表示する必要があります。」数字は必ずしも長方形ではないので、「同じ場所で」をどのように定義しますか。
マーティンエンダー

4
10進数字はどの程度識別できる必要がありますか?「あなたがそれが何であるかを知っていて目を細めれば、0と8の違いを十分に伝えることができます」、または「匿名の傍観者はプロンプトなしでそれが何であるかを伝えることができます」テストに合格する必要がありますか?
スパー

3
これもHackadayブログに投稿されました:hackaday.com/2017/03/11/a-clock-created-with-conways-life
Anool Mahidharia

回答:


1014

クロック数あたり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ドットにはこのようなラッチがありますが、それは巨大であり、より実用的なものを思い付くことができません。
  • ディスプレイを小さくします。しかし、それは見栄えがよくありません。そして、それが必要でした。はい。

26
綺麗な。素敵な答え。
パベル

33
@Pokeが来たら、これを自分で追加しようとしたかもしれません...とにかく、私はあなたの喜びのために、AM + PMの両方を持つバージョンで投稿を編集しました。
薄暗い

48
だけ知っているので、この答えがされている機能の中にMicrosiervosに800K以上のフォロワーで、スペインにおける技術に関する最も重要なブログの一つのTwitter
ルイスMendo

26
@Roryあなたはあなたの頭を取り、あなたができる限り何十倍も一生懸命に壁に打ちつけます。これで開始する準備ができました。
薄暗い

34
設計プロセスは次のとおりです。「わかりました。衝突する必要があり、この時点でグライダーがそこからこの位置に来ます。2つのリフレクターを使用してそこに持って行きましょう。リフレクターを少し動かしたら、見てみましょう...がらくた、遅すぎます。さて、それらを他の場所に衝突させましょう。がらくた、グライダーをそこに移動させる余地がありません。代わりに2つの無駄な反射鏡を追加して、到着するようにします。反射鏡は、この他のグライダーストリームと衝突します。
薄暗い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.