首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“第三场比赛”中找到最佳的即时动作。

在“第三场比赛”中找到最佳的即时动作。
EN

Code Golf用户
提问于 2014-01-26 04:02:21
回答 1查看 838关注 0票数 11

你今天面临的挑战是接受这样的输入:

代码语言:javascript
复制
fbcfbee
ffcabbe
debceec
bccabbe
edcfbcd
daeaafc
eebcbeb

并在一个类似珠宝的游戏中输出可能的最佳动作,该游戏将匹配三个或更多的字母,如以下(请注意大写BC):

代码语言:javascript
复制
fbcfbee
ffcabbe
deBCeec
bccabbe
edcfbcd
daeaafc
eebcbeb

完整规格:

  • 输入将是每个n行的n小写字母(其中n可以是任意数字)。
  • 输出将是最好的移动,你可以在一个比赛-3的游戏,与两个字母,你想要互换大写。
  • 匹配应该具有以下优先级(在这些示例中,.表示一个不重要的平方):
    1. 五排xxYxx ..X..。
    2. 断了五排X..。Yxx .x.。或.X. xYx .x..x。
    3. 四排xYxx .X..。
    4. 三行xYx .X。

您必须找到最高优先级的匹配并输出它。

  • 如果有多个具有相同优先级的匹配,则可以输出其中的任何一个。
  • 总是至少有一次匹配(如果没有匹配,您的程序就会中断,或者做任何您想做的事情)。
  • I/O可以采用任何合理的格式(stdin/out、读写文件、函数参数/返回值、对话框等)。但没有硬编码(如x="[insert input here]")。
  • 这是密码-高尔夫,所以以字节为单位的最短代码将获胜。如果由于某种原因使用任何网络访问,则从网络下载的所有字节都会以分数计。
EN

回答 1

Code Golf用户

回答已采纳

发布于 2014-01-26 07:52:58

Python3.4,772

(使用制表符作为缩进,而不是空格。)

代码语言:javascript
复制
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])
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/19418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档