python:生成 Kolakoski 序列,可以转换为八卦序列

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]
['震', '兑', '震', '震', '兑', '兑', '坎', '兑', '震', '兑', '兑', '震', '震', '兑', '震', '离', '离', '震', '震', '兑', '震', '震', '兑', '兑', '震', '离', '震', '震', '兑', '震', '震', '兑', '兑']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>