首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python高尔夫建议

Python高尔夫建议
EN

Code Golf用户
提问于 2015-10-03 04:44:58
回答 1查看 2.1K关注 0票数 -2

我读过:用Python打高尔夫球的技巧

我想进一步了解这段代码。还有小费吗?

代码语言:javascript
复制
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上的代码高尔夫

EN

回答 1

Code Golf用户

回答已采纳

发布于 2015-10-03 06:17:25

N.B.:这可能不完全正确,因为我不知道您的代码应该做什么

要做的第一件事是删除不必要的空白,特别是在if语句之后:

代码语言:javascript
复制
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中并不存在这种情况。相反,我们可以聪明地处理数组的索引:

代码语言:javascript
复制
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字节。

最后,现在可以去掉所有空白:

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

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

复制
相关文章

相似问题

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