Conway 's Game of Life에서 디지털 시계 제작


478

당신의 임무는 다음과 같은 특성을 만족시키는 디지털 시계를 나타내는 게임 오브 라이프 시뮬레이션을 구축하는 것입니다.

  1. 시계는 소수의 시간과 분을 표시합니다 (예를 들어 12:00, 3:59, 7:24) 오늘의 1,440 분의 각각에 대해 서로 다른 상태 - 중 시간이 0에서 23 또는 PM 표시기를 12-1로 이동합니다.

  2. 패턴은 주기적이며 상태는 외부 상호 작용없이 반복됩니다.

  3. 분마다 한 번의 변경에서 다음 번으로의 분 업데이트는 동일한 세대 수를 갖습니다.

  4. 익명의 방관자는 디스플레이가 디지털 시계 여야한다고 한 눈에 알 수 있습니다. 특히 이것은 다음을 수반합니다.

    • 숫자가 표시되고 명확하게 구별됩니다. 어떤 시간이 표시되고 있는지 한눈에 알 수 있어야합니다.

    • 자리가 업데이트됩니다. 각각의 새 숫자는 이전 숫자와 같은 위치에 표시되며 숫자의 경계 상자가 거의 움직이지 않습니다. 특히, 숫자는 숫자가 변경 될 때마다 발견되는 다른 위치에 10 개의 다른 숫자를 포함하지 않습니다.

    • 숫자가 서로 옆에 공간이없이 나란히 표시됩니다.


프로그램은 다음과 같은 순서로 점수가 매겨집니다 (낮은 기준은 높은 기준의 순위 결정 역할을합니다).

  • 경계 상자 크기-주어진 솔루션이 완전히 포함 된 가장 작은 영역을 가진 사각형 상자가 승리합니다.

  • 가장 빠른 실행-1 분만이기는 가장 적은 세대.

  • 초기 생세포 수-적은 수의 승리.

  • 먼저 게시-이전 게시물이 이깁니다.


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 표시기가 모두 필요한 버전 입니다.

이동 온라인 자바 스크립트 콘웨이의 라이프 시뮬레이터 . 가져 오기를 클릭 하고 디자인 텍스트를 붙여 넣습니다. 디자인이 보여야합니다. 그런 다음 설정으로 이동 하여 생성 단계 를 512 또는 해당 라인 주위로 설정하십시오 . 그렇지 않으면 시계 표시가 업데이트되는 것을 영원히 기다려야합니다.

실행을 클릭 하고 조금 기다렸다가 놀라십시오!

브라우저 내 버전으로 직접 연결 됩니다.

이 거대한 디자인을 사용할 수있게하는 유일한 알고리즘은 해시 라이프입니다. 그러나 이것으로 몇 초 만에 전체 시계 랩 어라운드를 달성 할 수 있습니다. 다른 알고리즘을 사용하면 시간이 변경되는 것을 볼 수 없습니다.

작동 원리

p30 기술을 사용합니다. 기본적인 것, 글라이더 및 경량 우주선. 기본적으로 디자인은 하향식으로 진행됩니다.

  • 맨 위에는 시계가 있습니다. 11520주기 시계입니다. 디스플레이가 적절하게 업데이트되도록하려면 약 10.000 세대가 필요하지만 디자인은 더 작은주기의 클럭 (약 5.000 정도)으로 안정적이어야합니다 (클럭은 60의 배수 여야 함).
  • 그리고 클럭 분배 단계가 있습니다. 시계 글라이더는 균형 잡힌 나무에 복사되므로 카운터 스테이지와 정확히 같은 순간에 32 개의 글라이더가 도착합니다.
  • 카운터 스테이지는 각 상태 및 각 숫자 (10 진수로 계산)에 대해 RS 래치를 사용하여 이루어집니다. 따라서 분의 오른쪽 자릿수에는 10 개의 상태가 있고, minuts의 왼쪽 자릿수에는 6 개의 상태가 있으며 시간에는 12 개의 상태가 있습니다 (두 자리 숫자는 여기에 병합 됨). 이러한 각 그룹에 대해 카운터는 시프트 레지스터처럼 작동합니다.
  • 계산 단계 후에 조회 테이블이 있습니다. 상태 펄스를 변환하여 세그먼트 ON / OFF 동작을 표시합니다.
  • 그런 다음 디스플레이 자체. 세그먼트는 단순히 여러 문자열의 LWSS로 만들어집니다. 각 세그먼트에는 상태를 유지하기 위해 자체 래치가 있습니다. 나는 세그먼트가 ON 또는 OFF인지를 알기 위해 숫자 상태의 논리 논리 OR을 만들 수 있었고이 래치를 제거 할 수는 있지만 숫자가 변경 될 때 변경되지 않는 세그먼트에 결함이있을 수 있습니다 ( 신호 지연). 그리고 룩업 테이블에서 숫자 세그먼트로가는 글라이더 스트림이 길어질 것입니다. 따라서보기에는 좋지 않습니다. 그리고 그럴 필요가있었습니다. 예.

어쨌든이 디자인에는 실제로 특별한 것이 없습니다. 이 과정에서 발견 된 놀라운 반응은 없으며, 이전에는 아무도 생각하지 못한 영리한 조합이 없습니다. 여기저기서 찍은 비트 만 함께 모아서 "올바른 방법"이라고 확신하지도 못합니다. 실제로 완전히 새로운 것이 었습니다. 그러나 많은 인내가 필요했습니다. 적시에 올바른 위치에 올라 오는 글라이더를 만드는 것은 머리를 긁는 일이었습니다.

가능한 최적화 :

  • 동일한 루트 클럭을 n 카운터 셀 에 복사하고 배포하는 대신 동일한 클럭 블록을 n 번 (각 카운터 셀마다 한 번씩) 넣을 수 있습니다 . 이것은 실제로 훨씬 간단합니다. 그러나 한 지점에서 시계를 변경하여 쉽게 조정할 수는 없었습니다. 전자 제품 배경과 실제 회로에서는 끔찍한 잘못입니다.
  • 각 세그먼트에는 자체 RS 래치가 있습니다. 이를 위해서는 룩업 테이블이 R 및 S 펄스를 모두 출력해야합니다. 공통 입력 펄스에서 상태를 토글하는 래치가 있다면 조회 테이블을 절반으로 만들 수 있습니다. PM 도트에는 그러한 래치가 있지만 크기가 커서 더 실용적인 것을 생각 해낼 수 없습니다.
  • 디스플레이를 작게 만드십시오. 그러나 그것은 멋지게 보이지 않을 것입니다. 그리고 그럴 필요가있었습니다. 예.

26
아름다운. 좋은 대답입니다.
Pavel

33
@Poke는 당신이 직접 추가하려고 시도 할 수 있습니다 ... 어쨌든, 당신의 기쁨을 위해 AM + PM 모두 버전으로 게시물을 편집했습니다.
dim

48
그냥 알다시피,이 대답이 된 기능Microsiervos 에 800K 이상의 추종자, 스페인어 기술에 대한 가장 중요한 블로그의 한 트위터
루이스 Mendo

26
@Rory 당신은 당신의 머리를 잡고, 당신이 할 수있는만큼 수십 번 열심히 벽에 부딪칩니다. 이제 시작할 준비가되었습니다.
dim

34
디자인 프로세스는 다음과 같습니다. "좋아요, 충돌해야합니다.이 시점에서 글라이더가이 위치에서 나옵니다. 두 개의 반사기를 사용하여 글라이더를 가져 오겠습니다. 크랩, 충돌해야하는 것은 단지 2 세대 단계입니다. 반사판을 조금 움직여 보자 ... 랩, 너무 늦었 어 좋아, 다른 곳에 충돌시켜 보자, 랩, 글라이더를 갈 공간이 없어. 그 대신에 도착하기 위해 다른 쓸모없는 반사판 두 개를 추가하겠습니다. 크랩, 반사기는이 글라이더의 다른 흐름과 충돌합니다 ... 크랩, 자러 가자. "
dim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.