한양과학기술고등학교

에듀테크 프로젝트 대시보드

콘웨이의 생명 게임 (Game of Life)

콘웨이의 생명 게임 (Conway's Game of Life)

1970년 수학자 존 콘웨이가 만든 셀룰러 오토마타(cellular automaton)다. 격자의 각 칸(셀)은 살아있음 또는 죽음 두 상태만 가지며, 주변 8칸의 이웃 수라는 아주 단순한 규칙만으로 다음 세대가 결정된다. 플레이어의 조작은 처음 배치가 전부 — 이후에는 규칙이 알아서 진화시킨다. 이 단순한 규칙에서 이동하는 우주선, 무한히 세포를 뿜는 총, 심지어 튜링 완전한 계산까지 창발(emergence)한다.

생명 게임 시뮬레이터

격자를 클릭하거나 드래그해서 세포를 켜고 끌 수 있어요. 패턴을 고르면 격자 중앙에 심어집니다.

세대 (generation)
0
살아있는 세포
0
직전 세대 대비
–

네 가지 규칙 (이웃 = 주변 8칸)

1. 외로움 → 죽음

살아있는 세포의 이웃이 1개 이하면 다음 세대에 죽는다. (저인구)

2. 생존

살아있는 세포의 이웃이 2개 또는 3개면 그대로 살아남는다.

3. 과밀 → 죽음

살아있는 세포의 이웃이 4개 이상이면 다음 세대에 죽는다. (과인구)

4. 탄생

죽은 세포의 이웃이 정확히 3개면 다음 세대에 새로 태어난다.

흔히 B3/S23 로 줄여 쓴다 — Birth는 이웃 3, Survive는 이웃 2 또는 3. 모든 세포는 동시에 갱신된다.

대표 패턴

  • 정물(Still life): 블록·벌집처럼 세대가 바뀌어도 모양이 고정된 패턴.
  • 진동자(Oscillator): 깜빡이·펄서처럼 일정 주기로 원래 모양으로 돌아온다.
  • 우주선(Spaceship): 글라이더·LWSS처럼 모양을 유지하며 격자를 이동한다.
  • 총(Gun): Gosper 글라이더 총은 30세대마다 글라이더를 하나씩 발사한다 — 무한 성장의 첫 예시.
  • 메투셀라(Methuselah): R-펜토미노는 5칸짜리 작은 배치인데 1103세대 동안 요동친 뒤 안정된다.

한 세대 계산 (핵심 로직)

def step(grid):           # grid: 2차원 0/1 리스트
    h, w = len(grid), len(grid[0])
    nxt = [[0] * w for _ in range(h)]
    for y in range(h):
        for x in range(w):
            # 주변 8칸의 살아있는 이웃 수
            n = sum(grid[(y+dy) % h][(x+dx) % w]
                    for dy in (-1,0,1) for dx in (-1,0,1)
                    if (dy, dx) != (0, 0))
            if grid[y][x]:
                nxt[y][x] = 1 if n in (2, 3) else 0   # S23
            else:
                nxt[y][x] = 1 if n == 3 else 0            # B3
    return nxt
  • 동시 갱신이 핵심: 현재 격자를 읽어 새 격자에 쓴다. 제자리에서 고치면 이미 바뀐 이웃을 잘못 세게 된다.
  • 경계 처리: 위 코드는 % h, % w 로 격자를 토러스(도넛)처럼 이어 붙였다. 대신 격자 밖을 항상 죽음으로 볼 수도 있다.
  • 최적화: 살아있는 세포와 그 이웃만 추적하는 해시셋 방식, 4×4 블록을 통째로 캐싱하는 HashLife 등으로 거대한 격자도 빠르게 돌린다.
  • 규칙 숫자만 바꾸면 B36/S23(HighLife), B2/S(Seeds) 등 전혀 다른 세계가 된다.

왜 중요한가

  • 창발(emergence): 규칙은 국소적이고 단순한데, 전체에서는 아무도 설계하지 않은 복잡한 행동이 나타난다 — 개미 군집, 도시 교통, 세포 조직을 이해하는 모델.
  • 튜링 완전: 글라이더를 신호로, 총과 충돌을 논리 게이트로 삼아 생명 게임 안에 계산기를 만들 수 있다. 즉 이 격자 위에서 어떤 프로그램이든 원리적으로 실행 가능하다.
  • 결정론적이지만 예측 불가: 다음 세대는 완전히 정해져 있지만, "이 배치가 언젠가 멈출까?"는 일반적으로 미리 알 수 없다(정지 문제와 연결).
  • 병렬 컴퓨팅·GPU 셰이더·이미지 처리 커널 연습용으로도 단골 예제다.