テストケース:多細胞生命体の頂点

2つの生命体が接合した後で形成された、多細胞生命体の頂点を獲得します。


s1 = list("ABCDEF")
s2 = list("abcdef")
for e in range(6):
    print "%d:"%e, merge(s1, e, s2, 2)

一方の生命体 s1 に他方の生命体 s2 が接合した後で、形成される多細胞生命体の頂点が得られます。このテストケースを実行すると、

0: ['A', 'f', 'a', 'b', 'c', 'B', 'C', 'D', 'E', 'F']
1: ['A', 'B', 'a', 'b', 'c', 'd', 'C', 'D', 'E', 'F']
2: ['A', 'B', 'C', 'b', 'c', 'd', 'e', 'D', 'E', 'F']
3: ['A', 'B', 'C', 'D', 'c', 'd', 'e', 'f', 'E', 'F']
4: ['A', 'B', 'C', 'D', 'E', 'd', 'e', 'f', 'a', 'F']
5: ['A', 'B', 'C', 'D', 'E', 'F', 'e', 'f', 'a', 'b']

頂点 A(オフセット位置 p=0)で接合すると、10個の頂点(AfabcBCDEF)が残されるのが分かります。

def merge(s1, i1, s2, i2):
    p = (i1+4)%len(s2)
    q = 6-i2; d = 5-q
    return s1[:i1+1] + circulate(s2, p, q) + s1[i1+d:]