テストケース:多細胞生命体の頂点
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:]