我读过:用Python打高尔夫球的技巧
我想进一步了解这段代码。还有小费吗?
x,y,q,w=[int(i) for i in raw_input().split()]
while 1:
a=int(input())
s=d=""
if q>x:
s="W"
q-=1
elif q<x:
s="E"
q+=1
if w>y:
d="N"
w-=1
elif w<y:
d="S"
w+=1
print d+s程序:你在一张40宽18英尺高的地图上移动。雷神最初被放置在地图上的一个随机点上,并且必须尽快到达能量之光。你需要有尽可能短的代码。
在每次转弯期间,您必须从下列之一指定移动的方向:
东北(东北)东(东)东南(东南)S(南)西南(西南)西(西)西北(西北)
当托尔到达力量之光时你就赢了。
你输了:如果托尔离开地图。如果雷神没有足够的能量到达能量之光。
示例:雷神开始于正方形(3,6)的地图上。电灯在方格(3,8)上。
第一轮雷神向南移动。新职位= (3,7)。雷神有足够的能量来做10次移动
第二轮雷神向南移动。新职位= (3,8)。雷神有足够的能量来移动9个动作
程序必须首先从标准输入读取初始化数据。然后,在无限循环中,从与Thor当前状态相关的标准输入中读取数据,并向标准输出Thor的运动指令提供数据。
初始化输入:第1: 4行整数表示光的位置。2指示托尔的起始位置。
输入一个游戏回合:第1行:雷神剩余能量的水平。这代表了他仍然可以移动的次数。
一个游戏回合的输出:提供移动的单线:n、NE、E、SE、S、SW、W或NW。
编辑:这是codingame.com上的代码高尔夫
发布于 2015-10-03 06:17:25
要做的第一件事是删除不必要的空白,特别是在if语句之后:
x,y,q,w=[int(i) for i in raw_input().split()]
while 1:
a=int(input())
s=d=""
if q>x:s="W";q-=1
elif q<x:s="E";q+=1
if w>y:d="N";w-=1
elif w<y:d="S";w+=1
print d+s 这个高尔夫球把你的代码减少了4个字节。
对于这个挑战,最理想的是一个开关情况,不幸的是,在Python中并不存在这种情况。相反,我们可以聪明地处理数组的索引:
x,y,q,w=[int(i) for i in raw_input().split()]
while 1:
a=int(input())
s=d=""
exec(['s="W";q-=1','s="E";q+=1'][q<x])
exec(['d="N";w-=1','d="S";w+=1'][w<y])
print d+s为您节省x字节。
最后,现在可以去掉所有空白:
x,y,q,w=[int(i) for i in raw_input().split()]
while 1:a=int(input());s=d="";exec(['s="W";q-=1','s="E";q+=1'][q<x]);exec(['d="N";w-=1','d="S";w+=1'][w<y]);print d+shttps://codegolf.stackexchange.com/questions/59482
复制相似问题