File: gun-demo.py

package info (click to toggle)
golly 2.3-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 10,080 kB
  • sloc: cpp: 41,951; python: 6,339; sh: 3,912; perl: 1,172; java: 49; makefile: 47
file content (41 lines) | stat: -rw-r--r-- 1,287 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Glider guns used in this script are 'aligned', which means gliders start in the
# origin and go SE.
# Based on gun_demo.py from PLife (http://plife.sourceforge.net/).

from glife.base import *
from glife.gun24 import *
from glife.gun30 import *
from glife.gun46 import *

rule ()  # Life

def mirror_gun (glider_gun):
	"""mirror an 'aligned' glider gun and preserve its timing"""
	return glider_gun[2] (-1, 0, swap_xy)

def compose_lwss_gun (glider_gun, A = -1, B = -1, C = -1):
	"""construct an lwss gun using 3 copies of an 'aligned' glider gun.
	A, B and C are distances from the glider collision point to
	NE, NW and SW guns respectively"""
	if (A < 0): A = 40
	if (B < 0): B = A;
	if (C < 0): C = A;

	m = min (A, B, C)
	a = A - m
	b = B - m
	c = C - m
	return \
	       glider_gun[4 * a] ( A, -A - 3, flip_x) + \
	       glider_gun[4 * b] (-B + 2, -B + 1) + \
	       glider_gun[4 * c + 1] (-C + 6,  C, flip_y)

lwss_eater = eater (4, 2, swap_xy)

all = \
	compose_lwss_gun (mirror_gun (gun24), 12, 11, 12) (0, -100) + lwss_eater (100, -100) + \
	compose_lwss_gun (gun24, 11, 13, 4) + lwss_eater (100, 0) + \
	compose_lwss_gun (gun30, 13, 11, 4) (0,  70) + lwss_eater (100,  70) + \
	compose_lwss_gun (gun46, 22, 13, 3) (0, 130) + lwss_eater (100, 130)

all.display ("gun-demo")