HackerRank刷題之路---Python
HackerRank的Python模塊的網頁鏈接
由於絕大多數題目都很簡單,適合初學者練練手,所以這里只記錄一些有趣的題目和一些有趣的代碼實現。
Alphabet Rangoli
此題目要求輸入一個整數,打印出如下圖形(此圖為輸入10的時候):
基於Python的強大,此題目可以用一行代碼輸出這個圖形,只是這行代碼要堆砌挺長的……
from __future__ import print_function
import string
N = input()
[print((reduce(lambda s,x:s.center(len(s)+2,'-').center(len(s)+4,x),[item for item in string.lowercase[N-i:N]])).center(4*N-3,'-')) for i in range(1,N+1)+range(N-1,0,-1)]
Triangle Quest 2
此題目要求輸入一個整數,打印出如下圖形(輸入為5的時候):
此題目要求不能超過2行代碼,但是實際上此題目可以用一行代碼解決問題:
for i in range(1,int(raw_input())+1): print reduce(lambda x,y:x+y,map(str,(range(1,i)+range(i,0,-1))))
No Idea
有一個包含n個整數數組,以及兩個不相交的集合A,B,分別包含m個整數。你喜歡A中的元素,不喜歡B中的元素,對於n個整數組成的數組中的每一個數,如果在A中,則幸福指數+1,如果在B中,則幸福指數-1,否則無變化,初始幸福指數為0,求最終的幸福指數。
這道題目之所以選他,是因為一個關於計數和列表解析的小技巧值得記錄下來:
n,m = raw_input().strip().split(' ')
N = map(int,raw_input().strip().split(' '))
A = set(map(int,raw_input().strip().split(' ')))
B = set(map(int,raw_input().strip().split(' ')))
count = [1 if x in A else -1 if x in B else 0 for x in N] #注意這句代碼,是個計數通用小技巧
print sum(count)
Maximize It!
這道題目同上一道一樣,都是50分的題,有K個list,每個list包含一定數量的元素,不一定相同。編程找到從每個list中選出一個元素對其平方后相加再對一個M取余數的最大值。
from itertools import product
K,M = map(int,raw_input().split())
print max(map(lambda x: sum(x) % M,list(product(*[map(lambda x:int(x)**2,raw_input().split())[1:] for i in range(K)]))))
借助itertools庫中的product方法,此題目也可以很簡潔的完成。