【Python CheckiO 题解】Pawn Brotherhood
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。
CheckiO 官网:https://checkio.org/
我的 CheckiO 主页:https://py.checkio.org/user/TRHX/
CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html
CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise
题目描述
【Pawn Brotherhood】:这次的题目只有英文的,而且有点长,用百度翻译翻译了一下,然而一团糟,只知道是关于国际象棋的,其他不知道说的啥,为了搞懂题目意思,我甚至还百度了一下国际象棋怎么下,然而并没有什么用,于是我用我那小学六年级水平的英语,配合翻译软件和给的示例图,搞了半天才弄清楚题目啥意思,简单来说,题目会给一个字典,字典中的值就是一枚棋子的坐标,我们要统计安全的棋子的个数,怎么判断棋子是否安全呢?如果棋子的左下角或者右下角有其他棋子,那么这枚棋子就是安全的,以左图的 b4
位置的棋子为例,a3
位置没有棋子,但是 c3
位置有棋子,所以 b4
位置的棋子就是安全的,对于 d2
位置的棋子,因为 c1
和 e1
位置都没棋子,所以就不安全。
【链接】:https://py.checkio.org/mission/pawn-brotherhood/
【输入】:由棋子坐标组成的字典(字典)
【输出】:处于安全位置的棋子的个数(整数)
【前提】:0 < pawns ≤ 8
【范例】:
safe_pawns ({ “ b4” ,“ d4” ,“ f4” ,“ c3” ,“ e3” ,“ g5” ,“ d2” } )== 6
safe_pawns ({ “ b4” ,“ c4” ,“ d4” ,“ e4” ,“ f4” ,“ g4” ,“ e5” } )== 1
解题思路
个人感觉这题还是比较简单的,但是官网定的难度是中等,直接将字典中每一个值转换成列表,列表的元素分别是横向坐标和纵向坐标,对于其左下角的坐标,可以将其横向坐标和纵向坐标都减一,右下角的坐标类似,因为横向坐标是 a
b
c
的形式,我们可以先用 ord()
方法将其转换成 ASCII 码,做减法完成后再用 chr()
方法将其转换成 chr 类型,然后判断这个坐标是否在字典里就行了
代码实现
def safe_pawns(pawns: set) -> int:num = 0for i in pawns:left_pawns = chr(ord(list(i)[0])-1) + chr(ord(list(i)[1])-1)right_pawns = chr(ord(list(i)[0])+1) + chr(ord(list(i)[1])-1)if left_pawns in pawns or right_pawns in pawns:num += 1return numif __name__ == '__main__':# These "asserts" using only for self-checking and not necessary for auto-testingassert safe_pawns({"b4", "d4", "f4", "c3", "e3", "g5", "d2"}) == 6assert safe_pawns({"b4", "c4", "d4", "e4", "f4", "g4", "e5"}) == 1print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
大神解答
大神解答 NO.1
def safe_pawns(pawns):answer = 0for pawn in pawns :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 +=1return answer
大神解答 NO.2
def getdiags(pawn):c, r = map(ord, pawn)return chr(c - 1) + chr(r - 1), chr(c + 1) + chr(r - 1)def safe_pawns(pawns):return len([p for p in pawns if any(d in pawns for d in getdiags(p))])
大神解答 NO.3
def safe_pawns(pawns):def is_safe(p):file, rank = ord(p[0]), int(p[-1])return (chr(file-1)+str(rank-1) in pawns or chr(file+1)+str(rank-1) in pawns)return sum(is_safe(p) for p in pawns)
大神解答 NO.4
def safe_pawns(pawns):safe = lambda s: {chr(ord(s[0]) - 1) + str(int(s[1]) - 1),chr(ord(s[0]) + 1) + str(int(s[1]) - 1)}return sum([bool(set(pawns).intersection(safe(p))) for p in pawns ])
大神解答 NO.5
# migrated from python 2.7
def get_defenders(pawn):x, y = list(map(ord, pawn))return '%c%c' % (x - 1, y - 1), '%c%c' % (x + 1, y - 1)def safe_pawns(pawns):return sum(not pawns.isdisjoint(get_defenders(x)) for x in pawns)
【Python CheckiO 题解】Pawn Brotherhood相关推荐
- Python CheckiO 题解系列 丨 博客目录索引
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做 ...
- 【Python CheckiO 题解】Army Battles
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Date and Time Converter
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Largest Rectangle in a Histogram
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Roman Numerals
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Probably Dice
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Multicolored Lamp
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Time Converter (12h to 24h)
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Speech Module
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
最新文章
- 序列信号产生器的verilog HDL 设计
- 添加firefox4的deb源,直接安装
- ospf hello时间和dead_使用OSPF协议使SPOKE端正常通信
- Spring Cloud Feign注意点
- c语言第4份实验报告,C语言实验报告04.doc
- mysql数据自定义随机_MySQL 利用事务自定义插入随机数据
- 北科大学计算机考研难度,2019二本考上北科计算机专硕经验分享
- 杭州电子科技大学计算机考研复试分数线,杭州电子科技大学2020年考研复试分数线...
- OSChina 周四乱弹 —— 不要生气!我不要生气!
- 元组创建、删除、最大值、最小值、求长度、计数
- 多示例学习 (multi-instance learning, MIL)学习路线 (分类)
- 机器学习实战(基于scikit-learn和TensorFlow)学习心得(5)--stratified sampling
- 探索式测试之隐喻(种植)
- 上海应用技术大学计算机研究生院,计算机考研调剂|2018年上海应用技术大学计算机学院计算机大类考研调剂信息...
- canvas实现聚光灯效果(js)
- Go语言云原生与微服务(一)云原生架构
- 多目标优化算法学习笔记(一)
- TFTP 简单文件传输协议
- 【二维码教材】让学习更有趣
- 有种爱,不会提起不会忘记
热门文章
- 原 hibernate与mysql字段类型对应关系
- ASP.NET Web Froms开发模式中实现程序集的延迟加载
- 数据库方面的操作示例
- python打开csv文件、计算总成绩_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...
- 1526B. I Hate 1111
- JAVA怎么将整数反转_【leetcode刷题】[简单]7.反转整数(reverse integer)-java
- java实现记事本查找_Java实现记事本
- 微分方程的数值解法与程序实现 pdf_初中数学知识点|一元一次方程的概念及讲解(二)建议收藏!内含pdf版...
- java 高飞_高飞(土木与水利工程学院)老师 - 合肥工业大学
- epoll怎么实现的