鱼C论坛

 找回密码
 立即注册
查看: 6155|回复: 30

[技术交流] [checkio]游戏之<<士兵的荣耀>>

[复制链接]
发表于 2015-3-22 21:16:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 挥舞乾坤 于 2015-3-22 22:38 编辑

几乎世界上所有的人都知道国际象棋这个古老的游戏,并且对他的规则有基本的了解.国际象棋有许多不同职业的棋子,他们的移动方式也各不相同.在这个任务里,我们将研究一下国际象棋里士兵的运动方式.


国际象棋是种二人对弈的策略游戏,它有一个8行(用数字1-8表示),8列(用字母a-h表示)的方形棋盘,棋盘上的每一个格子都可以用唯一的坐标来表示,它包含一个数字和一个字母(例如:a1,h8,d6).在这个任务中,我们只需要关心自己的士兵棋子,由于士兵是只能前进的,所以士兵只能吃掉前方相邻的斜线位置上的敌方棋子(例如,b4位置的士兵只能吃a5和c5位置的棋子).




虽然士兵是国际象棋中价值最低的单位,但是不要忘记,士兵也是我们拥有数量最多的棋子,我们可以用他筑起一道士兵的防御工事,依靠这个防御墙,一个士兵保护另一个士兵.一个士兵是否安全,取决于他所在的位置是否有其他士兵可以吃到,在棋盘上只有一些白色士兵棋,你需要设计代码找到有多少个士兵是安全的.

pawns.png



给出一个由士兵棋子坐标组成的集合,找到其中多少个士兵是安全的.


输入:放置士兵棋子的坐标组成的集合


输出:安全士兵的数量


范例:
  1. safe_pawns({"b4", "d4", "f4", "c3", "e3", "g5", "d2"}) == 6
  2. safe_pawns({"b4", "c4", "d4", "e4", "f4", "g4", "e5"}) == 1
复制代码

代码提示:

  1. def safe_pawns(data):

  2.     return
复制代码

ps:这个任务没有中文的,翻译的很渣,大概意思是这样的,就凑活看吧



评分

参与人数 1鱼币 +5 收起 理由
戴宇轩 + 5 奖励搞错了吧, 你回复几次, 我帮你加回去

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-22 21:22:22 | 显示全部楼层

回帖奖励 +20 鱼币

也就是说, 如果一个棋子的左后方或右后方有棋子, 它就是安全的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-22 22:22:11 | 显示全部楼层
本帖最后由 lightninng 于 2015-3-22 22:27 编辑

完全没搞懂~~题目在说什么。英文原版能发一下么~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-22 22:32:42 | 显示全部楼层
戴宇轩 发表于 2015-3-22 21:22
也就是说, 如果一个棋子的左后方或右后方有棋子, 它就是安全的?

戴同学理解是正确的.

评分

参与人数 1鱼币 +5 收起 理由
戴宇轩 + 5 ^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-22 22:34:51 | 显示全部楼层
Pawn Brotherhood
Almost everyone in the world knows about the ancient game Chess and has at least a basic understanding of its rules. It has various units with a wide range of movement patterns allowing for a huge number of possible different game positions (for example Number of possible chess games at the end of the n-th plies.) For this mission, we will examine the movements and behavior of chess pawns.
Chess is a two-player strategy game played on a checkered game board laid out in eight rows (called ranks and denoted with numbers 1 to 8) and eight columns (called files and denoted with letters a to h) of squares. Each square of the chessboard is identified by a unique coordinate pair — a letter and a number (ex, "a1", "h8", "d6"). For this mission we only need to concern ourselves with pawns. A pawn may capture an opponent's piece on a square diagonally in front of it on an adjacent file, by moving to that square. For white pawns the front squares are squares with greater row than their.
A pawn is generally a weak unit, but we have 8 of them which we can use to build a pawn defense wall. With this strategy, one pawn defends the others. A pawn is safe if another pawn can capture a unit on that square. We have several white pawns on the chess board and only white pawns. You should design your code to find how many pawns are safe.
You are given a set of square coordinates where we have placed white pawns. You should count how many pawns are safe.
Input: Placed pawns coordinates as a set of strings.
Output: The number of safe pawns as a integer.
原文

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-22 22:39:26 | 显示全部楼层
lightninng 发表于 2015-3-22 22:22
完全没搞懂~~题目在说什么。英文原版能发一下么~~

原文以上,我觉得我翻译的还过得去了,看原文更头疼

评分

参与人数 1鱼币 +5 收起 理由
戴宇轩 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-22 22:40:15 | 显示全部楼层
戴宇轩 发表于 2015-3-22 21:22
也就是说, 如果一个棋子的左后方或右后方有棋子, 它就是安全的?

奖励是搞错了,不过没关系,鱼币多就是任性.

评分

参与人数 1鱼币 +5 收起 理由
戴宇轩 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-22 22:48:18 | 显示全部楼层

回帖奖励 +2 鱼币

挥舞乾坤 发表于 2015-3-22 22:39
原文以上,我觉得我翻译的还过得去了,看原文更头疼

原来 是我固定思维了。老想着国际象棋~~
他这段题目出的真是想报警~~
你英文和中文都挺好的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-22 23:00:23 | 显示全部楼层

回帖奖励 +2 鱼币

好难的样子,我算法很渣的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-22 23:59:01 | 显示全部楼层
先上自己写的
  1. def safe_pawns(data):
  2.    
  3.     def set_s(string):
  4.         x, y = map(ord, list(string))
  5.         return {chr(x+1) + chr(y+1),chr(x-1) + chr(y+1)}
  6.    
  7.     s = set()
  8.     for e in data:
  9.         s |= set_s(e)
  10.         
  11.     return len(s & data)
复制代码


明天再看看大神写的,再发过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 06:35:50 | 显示全部楼层

回帖奖励 +2 鱼币

支持大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 16:00:41 | 显示全部楼层

回帖奖励 +2 鱼币

学习了:shy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 17:30:47 | 显示全部楼层

回帖奖励 +2 鱼币

顶一个!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-23 17:50:09 | 显示全部楼层
大牛的版本:
  1. def safe_pawns(pawns):
  2.     answer = 0
  3.     for pawn in pawns :
  4.         if chr(ord(pawn[0])-1)+str(int(pawn[1])-1) in pawns or chr(ord(pawn[0])+1)+str(int(pawn[1])-1) in pawns : answer +=1
  5.     return answer
复制代码


一句话版本:
  1. o,safe_pawns=lambda l,d=-1:chr(ord(l)+d),lambda P:sum(bool({o(f)+o(r),o(f,1)+o(r)}&P)for f,r in P)
复制代码

第一次看到lambda 可以带两个参数,并且支持默认参数,学到了,sum可以求得bool型组成的序列中True的个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 21:57:56 | 显示全部楼层

回帖奖励 +2 鱼币

刚到此站,在那里看源代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 23:00:47 | 显示全部楼层

回帖奖励 +2 鱼币

嘎嘎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-24 15:51:43 | 显示全部楼层

回帖奖励 +2 鱼币

判断每个棋子,若左下或右下有棋子,那么ans+1就行了,反正棋子最多8*8=64个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-24 22:37:31 | 显示全部楼层

回帖奖励 +2 鱼币

牛逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-25 11:16:19 | 显示全部楼层

回帖奖励 +2 鱼币

太牛了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-25 11:17:26 From FishC Mobile | 显示全部楼层
都是牛人啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 23:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表