あらかじめ決められたストレートのハンドから潜在的なカードの「プレイ」リストを生成しようとしています(このゲームでは、ストレートは3枚以上のカードとして定義されます-例[3,4,5]
)。難しいのは、識別されたストレートのリスト(複数の接続されていないストレートを含む場合があります- ['2D','3D','4D','5D','6D','8D','9D','10D']
)を取得し、それらとその中に含まれるサブストレートをプレイリストに追加する方法を見つけることです(特定のハンドの場合、出力は理想的には[['2D','3D','4D'],['3D','4D','5D'],['4D','5D','6D'],['2D','3D','4D','5D'],['3D','4D','5D','6D'],['8D','9D','10D']]
)
以下は現在行われている試みです。
seq = ['1D','2D','3D','4D', '6D', '7D','8D', '10D', '11D', '12D']
plays = []
for card in seq:
ind = seq.index(card)+1
try:
if int(seq[ind][0:len(seq[ind])-1]) - int(card[0:len(card)-1]) == 2:
for num in xrange(len(seq[0:ind])):
if len(seq[0:(ind-num)]) > 3:
plays.append(seq[0:(ind-num)])
plays.append(seq[num+1:ind])
elif len(seq[0:(ind-num)]) == 3:
plays.append(seq[0:(ind-num)])
print plays #debug
except IndexError:
print 'error'
#append from the last appended chunk up until last element?
#arises from final element
[['1D'、 '2D'、 '3D'、 '4D']、['2D'、 '3D'、 '4D']、['1D'、 '2D'、 '3D']]
[['1D'、 '2D'、 '3D'、 '4D']、['2D'、 '3D'、 '4D']、['1D'、 '2D'、 '3D']、['1D '、' 2D'、' 3D'、' 4D'、' 6D'、' 7D'、' 8D']、[' 2D'、' 3D'、' 4D'、' 6D'、' 7D'、' 8D ']、[' 1D'、' 2D'、' 3D'、' 4D'、' 6D'、' 7D']、[' 3D'、' 4D'、' 6D'、' 7D'、' 8D']、['1D'、 '2D'、 '3D'、 '4D'、 '6D']、 ['4D'、 '6D'、 '7D'、 '8D'] **、['1D'、 '2D'、 '3D'、 '4D ']、['6D'、 '7D'、 '8D' ]、['1D'、 '2D'、 '3D'] ]]
エラー
太字の出力は、不要な要素(重複または個別のストレートの接続詞)を示します。入力ありがとうございます!
編集1:10〜12行目を追加
編集2:@SteveTjoaが提供するソリューションを追加
(カードが一連のintであるとすると)cards = [1、2、3、4、6、7、8、10、11、12]
def f(cards):
for i in range(len(cards)):
for j in range(i+3, len(cards)+1):
if cards[i:j] == range(cards[i], cards[i]+j-i):
plays.append(cards[i:j])
print plays