你今天面临的挑战是接受这样的输入:
fbcfbee
ffcabbe
debceec
bccabbe
edcfbcd
daeaafc
eebcbeb并在一个类似珠宝的游戏中输出可能的最佳动作,该游戏将匹配三个或更多的字母,如以下(请注意大写B和C):
fbcfbee
ffcabbe
deBCeec
bccabbe
edcfbcd
daeaafc
eebcbeb完整规格:
n行的n小写字母(其中n可以是任意数字)。.表示一个不重要的平方):您必须找到最高优先级的匹配并输出它。
x="[insert input here]")。发布于 2014-01-26 07:52:58
(使用制表符作为缩进,而不是空格。)
import sys,itertools as I
B=[]
for l in sys.stdin:
l=l.rstrip()
B.append(list(l))
Z=len(B[0])
F=T=None
R=range
N=min
X=max
P=I.product
S=0
def C(I,J,K,L):
global F,T,S
if K<0 or K>=Z or L<0 or L>=Z: return
B[I][J],B[K][L]=B[K][L],B[I][J]
h=v=1
m=B[K][L]
for i in R(K+1,N(Z,K+5)):
if B[i][L]!=m:break
v+=1
for i in R(K-1,X(0,K-5),-1):
if B[i][L]!=m:break
v+=1
for j in R(L+1,N(Z,L+5)):
if B[K][j]!=m:break
h+=1
for j in R(L-1,X(0,L-5),-1):
if B[K][j]!=m:break
h+=1
c=X(h,v)*2
if N(h,v)>=3:c+=N(h,v)
if c>S:S=c;F=I,J;T=K,L
B[I][J],B[K][L]=B[K][L],B[I][J]
for i,j in P(reversed(R(Z)),R(Z)):
for d,e in (1,0),(0,-1),(0,1),(-1,0):
C(i,j,i+d,j+e)
for i,j in P(R(Z),R(Z)):
c=B[i][j]
if (i,j)in(F,T):c=c.upper()
print(c,end=('',"\n")[j==Z-1])https://codegolf.stackexchange.com/questions/19418
复制相似问题