テストケース:単細胞生命体の頂点
環状リストがあると便利ですが、Python の組み込み型 list には、その機能がありません。幸いにも、当面の問題を解決するには、環状リストを2巡するだけで十分です。そこで、組み込み型 list を利用します。
s = "abcdef"
for p in range(6):
print "%d:"%p, circulate(s, p, q=4)
一方の生命体(右赤: abcdef)に着目します。他方の生命体(左青: ABCDEF)と接合した後で、残される頂点を獲得します。頂点 a からのオフセット位置 p(0〜5)を指定したときに、残される4つの頂点(q=4)が得られます。このテストケースを実行すると、
0: bcde 1: cdef 2: defa 3: efab 4: fabc 5: abcd
頂点 a(オフセット位置 p=0)で接合すると、4つの頂点(bcde)が残されるのが分かります。
def circulate(s, p, q):
size = len(s)
start = p+1; stop = p+q+1
if size < stop:
s = s[start:] + s[:stop-size]
else:
s = s[start:stop]
return s