Conway'in Yaşam Oyunda dijital bir saat oluşturun


479

Göreviniz, aşağıdaki özellikleri sağlayan dijital bir saati temsil eden bir Game of Life simülasyonu oluşturmaktır:

  1. Saat ondalık saat ve dakikayı görüntüler (örneğin 12:00, 3:59, 7:24) Günün 1.440 dakika her biri için farklı bir durum ile - ya saat 0'dan 23'e veya PM göstergesi ile 1'den 12'ye gidecek.

  2. Desen periyodiktir ve durum, herhangi bir dış etkileşim olmadan çevrede döner.

  3. Dakikalar düzenli aralıklarla güncellenir - bir dakikalık değişiklikten diğerine aynı sayıda nesneyi alır.

  4. Anonim bir izleyici, bir bakışta ekranın dijital bir saat olması gerektiğini söyleyebilir. Özellikle, bu şunları içerir:

    • Rakamlar görünür ve açıkça ayırt edilebilir. Saatin kaçta görüntülendiğini bir bakışta kesin olarak söyleyebilmelisiniz.

    • Rakamlar yerinde güncellenir. Her yeni numara, önceki numarayla aynı yerde görünür ve rakamların sınırlayıcı kutularının hareketi çok az ya da hiç yoktur. (Özellikle, bir rakam, her rakam değiştiğinde açığa çıkan farklı yerlerde 10 farklı rakam içermez.)

    • Rakamlar, aralarında aşırı miktarda boşluk olmadan yan yana görünür.


Programınız, sırayla (daha yüksek kriterler için tiebreaker olarak hareket eden düşük kriterler ile) sıralanacaktır:

  • Sınırlayıcı kutu boyutu - verilen çözümü tamamen içeren en küçük alana sahip dikdörtgen kutu kazanır.

  • En hızlı işlem - bir dakika ilerlemek için en az nesiller kazanır.

  • İlk canlı hücre sayısı - daha küçük sayı kazanır.

  • İlk mesaj gönderen - önceki mesaj kazanır.


5
@tuskiomi Hayır, ekran ondalık olmalı.
Joe Z.

2
Bunun B3 / S23 olduğundan eminim ama onaylayabilir veya reddedebilir misiniz?
Conor O'Brien,

2
"Ayrıca yerinde güncellemeleri gerekir - her yeni numara önceki numarayla aynı yerde görünmelidir." Rakamlar mutlaka dikdörtgen olmayacağından, "aynı yerde" nasıl tanımlanırsınız.
Martin Ender

4
Ondalık basamaklarımız ne kadar belirgin olmalıdır? "Eğer ne olduğunu biliyorsanız ve şüphe ediyorsanız, o zaman 0 ile 8 arasındaki farkı söyleyebilirsiniz" ya da "isimsiz bir izleyici, sormadan ne olduğunu söyleyebilir" testini geçmesi gerekiyor mu?
Sparr

Yanıtlar:


1013

Saat başına 11.520 kuşak sayısı / 10.016 x 6.796 kutu / 244.596 pop sayısı

İşte gidiyorsunuz ... Eğlenceliydi.

Eh, tasarım kesinlikle en uygun değil. Ne sınırlayıcı kutu bakış açısından (bu 7 segmentli rakamlar çok büyük ), ne de ilk popülasyon sayısından (bazı işe yaramaz şeyler ve kesinlikle daha kolay hale getirilebilecek bazı şeyler var) ve yürütme hızından - peki ... emin değilim.

Ama, hey, çok güzel. Bak:

görüntü tanımını buraya girin

Koş!

Bu karardan tasarım al . Tüm dosya metnini panoya kopyalayın.

Yeni : işte talepkar için hem AM hem de PM göstergeleri olan bir versiyon .

Git çevrimiçi JavaScript Conway yaşam simülatörü . İçe aktar'ı tıklayın , tasarım metnini yapıştırın. Tasarımı görmelisin. Ardından, ayarlara gidin ve oluşturma adımını 512'ye veya bu satırların etrafındaki bir şeye ayarlayın ; saat göstergesinin güncellenmesini görmek için sonsuza dek beklemeniz gerekir.

Click koşmak , biraz bekleyin ve hayret!

Tarayıcı içi sürümüne doğrudan bağlantı .

Bu devasa tasarımı kullanılabilir kılan tek algoritmanın hashlife olduğuna dikkat edin. Bununla birlikte, tüm saat sarma işlemini saniyeler içinde başarabilirsiniz. Diğer algoritmalarla, saatin değiştiğini görmek bile pratik değildir.

Nasıl çalışır

P30 teknolojisini kullanır. Sadece temel şeyler, planörler ve hafif uzay gemileri. Temel olarak, tasarım yukarıdan aşağıya gider:

  • En üstte saat var. 11520 dönem saati. Ekranın uygun şekilde güncellenmesini sağlamak için yaklaşık 10.000 nesile ihtiyacınız olduğunu unutmayın; ancak tasarımın daha küçük bir saatle sabit kalması gerekir (yaklaşık 5.000 veya daha fazla - saatin 60'ın katı olması gerekir).
  • Sonra, saat dağıtım aşaması var. Saat paraşütü dengeli bir ağaçta kopyalanır, bu yüzden sonunda, aynı anda sayaçlar aşamasına gelen 32 paraşüt vardır.
  • Sayaç aşaması, her durum için ve her basamak için bir RS mandalı kullanılarak yapılır (ondalık olarak sayıyoruz). Bu nedenle, dakikaların sağ hanesi için 10 durum, minutların sol hanesi için 6 durum ve saat için 12 durum vardır (saatlerin her iki hanesi burada birleştirilmiştir). Bu grupların her biri için, sayaç bir vardiya yazmacı gibi davranır.
  • Sayım aşamasından sonra arama tabloları vardır. Durum pulslarını AÇIK / KAPALI eylemlerini göstermek için dönüştürürler.
  • Sonra, ekranın kendisi. Segmentler basitçe çoklu LWSS dizileri ile yapılır. Her bölüm kendi durumunu korumak için kendi mandalına sahiptir. Bir parçanın AÇIK veya KAPALI olması gerekip gerekmediğini bilmek ve bu mandallardan kurtulmak için basamak durumlarının basit bir mantıksal OR'sini yapabilirdim, ancak rakamlar değiştiğinde (çünkü sinyal gecikmeleri). Ve arama tablosundan rakam segmentlerine gelen uzun planör akışları olacaktı. Yani o kadar güzel görünmezdi. Ve olması gerekiyordu. Evet.

Her neyse, aslında bu tasarımda olağanüstü bir şey yok. Bu süreçte keşfedilen şaşırtıcı tepkiler ve daha önce kimsenin düşünmediği akıllıca bir kombinasyon yok. Sadece burada ve oradan alınmış ve bir araya getirilmiş (ve "doğru" bir şekilde yaptığımdan bile emin değilim - aslında bunun için tamamen yeniydim). Bununla birlikte, çok fazla sabır gerekiyordu. Bütün bu planörlerin doğru zamanda ve doğru pozisyonda yapılması kafa karıştırıcıydı.

Mümkün iyileştirmeler:

  • Aynı kök saati n sayaç hücrelerine kopyalamak ve dağıtmak yerine , aynı saat bloğunu n kere (her bir sayaç hücresi için bir kez) yerleştirebilirdim. Bu aslında çok daha basit olurdu. Ama o zaman saati tek bir noktada değiştirerek kolayca ayarlayamazdım ... Ve elektronik bir geçmişe ve gerçek bir devrede çok yanlış olur.
  • Her bölüm kendi RS mandalına sahiptir. Bu, arama tablolarının hem R hem de S darbeleri üretmesini gerektirir. Durumunu ortak bir giriş darbesinden değiştirecek bir mandal olsa, arama tablolarını yarısı kadar büyük yapabilirdik. PM noktası için böyle bir mandal var, ama çok büyük ve daha pratik bir şey bulamıyorum.
  • Ekranı küçültün. Ama bu o kadar güzel görünmezdi. Ve olması gerekiyordu. Evet.

26
Güzel. Güzel cevap
Pavel

33
@Poke hadi, bunu kendiniz eklemeye çalışmış olabilirsiniz ... Her neyse, yazıyı hem AM + hem de PM ile düzenledim, zevkiniz için.
loş

48
Sadece bil diye, bu cevap olmuştur özellikli içinde Microsiervos üzerinde 800K fazla takipçiyle, İspanyolca teknoloji hakkında en önemli bloglardan biri Twitter
Luis Mendo

26
@Rory Kafanı al, duvara bir düzineye kadar sert çarp. Daha sonra başlamak için hazırsınız.
loş

34
Bu yüzden tasarım süreci şöyle: "Tamam, bunu çarpıştırmam gerekiyor ve planörüm şu anda bu pozisyonda oradan geliyor. Bakalım iki reflektör kullanarak oraya getirelim. Crap, çarpışması gereken şey sadece iki nesil adım. Çok yakında, orada, eğer reflektörleri biraz hareket ettirirsem, hadi görelim ... Bok, çok geç ... Tamam, hadi onları başka bir yere çarpıştıralım .. Saçma, planörümün oraya gitmesini sağlayacak yerim yok. Hadi, onun yerine oraya varması için iki gereksiz reflektör daha ekleyelim: Bok, reflektörler bu planör akışını çarpıştırırlar ... Bok, hadi yatağa gidelim. "
loş
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.