Kolakoski 序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。
Kolakoski 序列是一个分形数列:如果将相邻相同的数字组成一组,那么...
如果把每一组数用它的长度来替换,就会得到这个数列本身。
Kolakoski 序列前几项为:1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,...
( sequence A000002 in the OEIS )
编写 test_kolakoski.py 如下
# -*- coding: utf-8 -*-
""" Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。
Kolakoski序列是一个分形数列。
"""
n = 100
alist = [1,2,2]
prev = 2
tail = 3
a = 1
while tail < n:
for i in range(0,alist[prev]):
alist.append(a)
tail += 1
a = a^3 # 按位异或
prev += 1
# 输出 Kolakoski序列
print(alist)
运行 python test_kolakoski.py 生成 n=100个数字的序列
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2]
^ 按位异或 运算符平时比较少用到。
假设 1为阳爻,2为阴爻,那么可以转换为八卦序列。
编写 kolakoski-8gua.py 如下
# -*- coding: utf-8 -*-
""" Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。
Kolakoski序列是一个分形数列。
"""
n = 100
alist = [1,2,2]
prev = 2
tail = 3
a = 1
while tail < n:
for i in range(0,alist[prev]):
alist.append(a)
tail += 1
a = a^3 # 按位异或
prev += 1
# 输出 Kolakoski序列
#print(alist)
blist = []
b = 0
for i in range(0,n):
if i %3 == 0:
b = alist[i]*100
elif i %3 ==1:
b += alist[i]*10
elif i %3 ==2:
b += alist[i]
blist.append(b)
# 输出每3位数,组成一组
print(blist)
clist = []
for b in blist:
if b == 122:
clist.append('震')
elif b == 112:
clist.append('兑')
elif b == 212:
clist.append('坎')
elif b == 121:
clist.append('离')
elif b == 221:
clist.append('艮')
elif b == 211:
clist.append('巽')
elif b == 111:
clist.append('乾')
elif b == 222:
clist.append('坤')
else:
clist.append(str(b))
# 输出八卦序列
print(clist)
运行 cmd
chcp 65001
python kolakoski-8gua.py
[122, 112, 122, 122, 112, 112, 212, 112, 122, 112, 112, 122, 122, 112, 122, 121, 121, 122, 122, 112, 122, 122, 112, 112, 122, 121, 122, 122, 112, 122, 122, 112, 112]
['震', '兑', '震', '震', '兑', '兑', '坎', '兑', '震', '兑', '兑', '震', '震', '兑', '震', '离', '离', '震', '震', '兑', '震', '震', '兑', '兑', '震', '离', '震', '震', '兑', '震', '震', '兑', '兑']