สร้างนาฬิกาดิจิตอลใน Game of Life ของ Conway


478

งานของคุณคือสร้างแบบจำลอง Game of Life ซึ่งเป็นตัวแทนของนาฬิกาดิจิตอลซึ่งตอบสนองคุณสมบัติต่อไปนี้:

  1. นาฬิกาแสดงชั่วโมงและนาทีในทศนิยม (เช่น12:00, 3:59, 7:24) กับรัฐที่แตกต่างกันสำหรับแต่ละ 1,440 นาทีของวัน - ทั้งชั่วโมงจะไป 0-23 หรือ 1-12 มีตัวบ่งชี้ PM

  2. รูปแบบเป็นระยะและรัฐวนรอบโดยไม่มีการโต้ตอบจากภายนอก

  3. การอัพเดตนาทีตามช่วงเวลาปกติ - จากการเปลี่ยนหนึ่งนาทีเป็นครั้งต่อไปจะมีจำนวนรุ่นเท่ากัน

  4. ผู้สังเกตการณ์ที่ไม่ระบุชื่อสามารถบอกได้ทันทีว่าหน้าจอควรเป็นนาฬิกาดิจิตอล โดยเฉพาะอย่างยิ่งสิ่งนี้ก่อให้เกิด:

    • ตัวเลขสามารถมองเห็นและแยกแยะได้ชัดเจน คุณต้องสามารถบอกด้วยความมั่นใจได้อย่างรวดเร็วว่าจะแสดงเวลาใด

    • มีการอัพเดทตัวเลข หมายเลขใหม่แต่ละหมายเลขจะปรากฏในตำแหน่งเดียวกับหมายเลขก่อนหน้าและไม่มีการเคลื่อนไหวใด ๆ ของกล่องขอบเขตของตัวเลข (โดยเฉพาะอย่างยิ่งตัวเลขไม่ได้มี 10 หลักที่แตกต่างกันในสถานที่ต่าง ๆ ที่ได้รับการเปิดเผยทุกครั้งที่มีการเปลี่ยนแปลงตัวเลข)

    • ตัวเลขจะปรากฏติดกันโดยไม่มีช่องว่างระหว่างกันมากเกินไป


โปรแกรมของคุณจะได้คะแนนจากสิ่งต่าง ๆ ดังต่อไปนี้ตามลำดับ (ด้วยเกณฑ์ที่ต่ำกว่าซึ่งทำหน้าที่เป็นตัวแบ่งสำหรับเกณฑ์ที่สูงกว่า):

  • ขนาดกล่องที่ถูกผูกไว้ - กล่องสี่เหลี่ยมที่มีพื้นที่ขนาดเล็กที่สุดซึ่งบรรจุโซลูชันที่ให้ไว้ได้รับรางวัลทั้งหมด

  • การดำเนินการที่เร็วที่สุด - ชั่วอายุคนที่น้อยที่สุดเพื่อความก้าวหน้าหนึ่งนาที

  • จำนวนเซลล์เริ่มต้นสด - จำนวนที่น้อยลงชนะ

  • คนแรกที่โพสต์ - โพสต์ก่อนหน้านี้ชนะ


5
@tuskiomi ไม่จอแสดงผลต้องเป็นทศนิยม
Joe Z.

2
ฉันค่อนข้างแน่ใจว่านี่คือ B3 / S23 แต่คุณสามารถยืนยันหรือปฏิเสธได้ไหม
Conor O'Brien

2
"พวกเขาจะต้องอัปเดตด้วย - หมายเลขใหม่แต่ละหมายเลขจะต้องปรากฏในตำแหน่งเดียวกับหมายเลขก่อนหน้า" คุณจะกำหนด "ในที่เดียวกัน" ได้อย่างไรเนื่องจากตัวเลขไม่จำเป็นต้องเป็นรูปสี่เหลี่ยม
Martin Ender

4
ทศนิยมของเราต้องเข้าใจได้อย่างไร คือ "ถ้าคุณรู้ว่ามันคืออะไรและคุณเหล่แล้วคุณสามารถบอกความแตกต่างระหว่าง 0 และ 8" เพียงพอหรือไม่จำเป็นต้องผ่านการ "ผู้สังเกตการณ์ที่ไม่ระบุชื่อสามารถบอกได้ว่ามันคืออะไรโดยไม่มีการแจ้งเตือน"?
Sparr

3
สิ่งนี้ถูกโพสต์บนบล็อกของ Hackaday ด้วยเช่นกัน: hackaday.com/2017/03/11/a-clock-created-with-conways-life
Anool Mahidharia

คำตอบ:


1012

11,520 ชั่วอายุต่อนาฬิกานับ / 10,016 x 6,796 กล่อง / 244,596 ป๊อปนับ

ไปแล้ว ... มันสนุกดี

การออกแบบนั้นไม่เหมาะสมอย่างแน่นอน ทั้งจากมุมมองของกล่องขอบเขต (ตัวเลข 7 เซกเมนต์เหล่านั้นมีขนาดใหญ่มาก ) หรือจากจำนวนประชากรเริ่มต้น (มีบางสิ่งที่ไร้ประโยชน์และบางสิ่งที่สามารถทำได้ง่ายกว่า) และความเร็วในการประมวลผล - ดี ... ฉัน ไม่แน่ใจ

แต่เดี๋ยวก่อนมันสวย ดู:

ป้อนคำอธิบายรูปภาพที่นี่

เรียกใช้!

รับการออกแบบจากส่วนสำคัญนี้ คัดลอกข้อความไฟล์ทั้งหมดไปยังคลิปบอร์ด

ใหม่ : นี่คือรุ่นที่มีทั้งตัวบ่งชี้ AM และ PM สำหรับความต้องการ

ไปที่เครื่องมือจำลอง JavaScript Conway lifeออนไลน์ คลิกนำเข้าวางข้อความการออกแบบ คุณควรเห็นการออกแบบ จากนั้นไปที่การตั้งค่าและตั้งค่าขั้นตอนการสร้างเป็น 512 หรือบางอย่างรอบ ๆ บรรทัดเหล่านั้นหรือคุณจะต้องรอตลอดไปเพื่อที่จะเห็นการปรับปรุงการแสดงผลนาฬิกา

คลิกเรียกใช้รอสักครู่แล้วต้องประหลาดใจ!

ลิงค์ตรงไปยังเวอร์ชั่นในเบราว์เซอร์

โปรดทราบว่าอัลกอริทึมเดียวที่ทำให้การออกแบบขนาดใหญ่นี้สามารถใช้ได้คือ hashlife แต่ด้วยสิ่งนี้คุณสามารถบรรลุเป้าหมายทั้งนาฬิกาในเวลาไม่กี่วินาที ด้วยอัลกอริธึมอื่นมันเป็นไปไม่ได้ที่จะเห็นการเปลี่ยนแปลงชั่วโมง

มันทำงานอย่างไร

ใช้เทคโนโลยี p30 สิ่งพื้นฐานเพียงเครื่องร่อนและยานอวกาศน้ำหนักเบา โดยพื้นฐานแล้วการออกแบบจะเลื่อนจากบนลงล่าง:

  • ที่ด้านบนสุดมีนาฬิกา มันเป็นนาฬิการะยะเวลา 11520 โปรดทราบว่าคุณต้องมีประมาณ 10.000 รุ่นเพื่อให้แน่ใจว่าหน้าจอจะได้รับการปรับปรุงอย่างเหมาะสม แต่การออกแบบควรจะมีความเสถียรด้วยนาฬิกาที่มีระยะเวลาน้อยกว่า (ประมาณ 5.000 หรือประมาณนั้น - นาฬิกาจะต้องมีหลาย 60)
  • จากนั้นจะมีขั้นตอนการกระจายสัญญาณนาฬิกา เครื่องร่อนนาฬิกาจะถูกคัดลอกในทรีที่สมดุลดังนั้นในตอนท้ายมีเครื่องร่อน 32 เครื่องที่มาถึงในเวลาเดียวกันกับขั้นตอนเคาน์เตอร์
  • ขั้นตอนการนับนั้นใช้สลัก RS สำหรับแต่ละรัฐและแต่ละหลัก (เรานับเป็นทศนิยม) ดังนั้นจึงมี 10 สถานะสำหรับตัวเลขหลักที่ถูกต้องของนาที, 6 สถานะสำหรับหลักซ้ายของ minuts และ 12 สถานะสำหรับชั่วโมง (ทั้งสองหลักของชั่วโมงรวมกันที่นี่) สำหรับแต่ละกลุ่มเหล่านี้ตัวนับจะทำงานเหมือนกับ shift register
  • หลังจากขั้นตอนการนับมีตารางการค้นหา พวกเขาแปลงพัลส์ของรัฐเพื่อแสดงการกระทำของส่วนเปิด / ปิด
  • จากนั้นแสดงตัวเอง เซ็กเมนต์นั้นทำด้วย LWSS หลายสตริง แต่ละส่วนมีสลักของตัวเองเพื่อรักษาสถานะของมัน ฉันสามารถสร้างตรรกะที่เรียบง่ายหรือของรัฐหลักที่จะรู้ว่าส่วนจะต้องเปิดหรือปิดและกำจัดสลักเหล่านี้ แต่จะมีข้อบกพร่องสำหรับส่วนที่ไม่เปลี่ยนแปลงเมื่อตัวเลขมีการเปลี่ยนแปลง (เพราะ สัญญาณล่าช้า) และจะมีลำธารยาว ๆ ของร่อนที่มาจากตารางการค้นหาไปยังส่วนหลัก ดังนั้นมันจะไม่ดูดี และมันจำเป็นต้องเป็น ใช่.

อย่างไรก็ตามไม่มีอะไรพิเศษในการออกแบบนี้ ไม่มีปฏิกิริยาที่น่าอัศจรรย์ที่ค้นพบในกระบวนการนี้และไม่มีการผสมผสานที่ฉลาดอย่างที่ไม่มีใครคิดมาก่อน เพียงแค่บิตที่ใช้ที่นี่และที่นั่นและรวมกัน (และฉันไม่แน่ใจด้วยซ้ำว่าฉันทำถูก "ถูกต้อง" - จริง ๆ แล้วฉันใหม่ทั้งหมด) อย่างไรก็ตามมันต้องใช้ความอดทนเป็นอย่างมาก การทำให้เครื่องร่อนเหล่านั้นขึ้นมาในเวลาที่เหมาะสมในตำแหน่งที่ถูกต้องคือการเกาหัว

การเพิ่มประสิทธิภาพที่เป็นไปได้:

  • แทนที่จะคัดลอกและกระจายนาฬิการูทเดียวกันไปยังเซลล์นับnฉันสามารถใส่บล็อกนาฬิกาเดิมnครั้ง (หนึ่งครั้งสำหรับแต่ละเซลล์เคาน์เตอร์) นี่จะง่ายกว่านี้มาก แต่แล้วฉันก็ไม่สามารถปรับมันได้อย่างง่ายดายโดยการเปลี่ยนนาฬิกา ณ จุดเดียว ... และฉันมีพื้นหลังอิเล็กทรอนิกส์และในวงจรจริงซึ่งจะผิดอย่างน่ากลัว
  • แต่ละส่วนมีสลักของ RS สิ่งนี้ต้องใช้ตารางการค้นหาเพื่อส่งออกทั้งพัลส์ R และ S หากเรามีสลักที่จะสลับสถานะจากพัลซ์อินพุตทั่วไปเราสามารถทำให้ตารางการค้นหาใหญ่ขึ้นครึ่งหนึ่ง มีสลักสำหรับจุด PM ดังกล่าว แต่มันมีขนาดใหญ่มากและฉันไม่สามารถหาอะไรที่เป็นประโยชน์ได้มากกว่านี้
  • ทำให้จอแสดงผลเล็กลง แต่นั่นจะไม่ดูดี และมันจำเป็นต้องเป็น ใช่.

26
สวย. คำตอบที่ดี
Pavel

33
@ Poke มาคุณอาจลองเพิ่มมันด้วยตัวคุณเอง ... อย่างไรก็ตามฉันได้แก้ไขโพสต์ด้วยเวอร์ชันที่มีทั้ง AM + PM เพื่อความสุขของคุณ
หรี่

48
เพียงแค่คุณรู้ว่าคำตอบนี้ได้รับการแนะนำในMicrosiervosหนึ่งในบล็อกที่สำคัญที่สุดเกี่ยวกับเทคโนโลยีในสเปนโดยมีผู้ติดตามมากกว่า 800,000 คนบนTwitter
Luis Mendo

26
@Rory คุณเอาหัวของคุณทุบมันบนผนังสักสิบครั้งเท่าที่จะทำได้ คุณพร้อมที่จะเริ่มแล้ว
สลัว

34
ดังนั้นขั้นตอนการออกแบบคือ: "ตกลงฉันต้องชนกันและเครื่องร่อนของฉันมาจากที่นี่ในตำแหน่งนี้ในตอนนี้เรามาดูกันโดยใช้ตัวสะท้อนแสงสองตัวอึสิ่งที่มันต้องชนกันนั้นเป็นเพียงสองขั้นตอนในการสร้าง เร็ว ๆ นี้ที่นั่นถ้าฉันย้ายตัวสะท้อนแสงออกมาดูกัน ... อึสายเกินไปตกลงมาชนกันที่อื่นอึฉันไม่มีห้องที่จะทำให้เครื่องร่อนของฉันไปที่นั่นได้โอเค ลองเพิ่มแผ่นสะท้อนแสงที่ไร้ประโยชน์อีกสองตัวเพื่อให้มันมาถึงที่นั่นแทนอึสะท้อนแสงนั้นชนกับเครื่องร่อนลำธารอื่น ... อึมานอนกันเถอะ "
หรี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.