import golly as g

p = int(g.getstring("Period: "))

g.new(f"Period {p} oscillator")
g.setrule("W150WithBorder")
g.autoupdate(False)

g.setcell(-1, 0, 2)

def rotate(r):
    return (r << 1) & ((1 << p) - 1) | (r >> (p - 1))

r1, r2 = 0, 1
pos = 0
while r2 != 0:
    g.setcell(pos, 0, r2 & 1)
    pos += 1
    r3 = r1 ^ r2 ^ rotate(r2)
    r1, r2 = r2, r3
g.setcell(pos, 0, 2)

g.fit()
g.update()
