日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python CheckiO 题解】Pawn Brotherhood

發布時間:2023/12/10 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。