HackerRank刷题之路—Python
HackerRank的Python模块的网页链接
由于绝大多数题目都很简单,适合初学者练练手,所以这里只记录一些有趣的题目和一些有趣的代码实现。
Alphabet Rangoli
此题目要求输入一个整数,打印出如下图形(此图为输入10的时候):
基于Python的强大,此题目可以用一行代码输出这个图形,只是这行代码要堆砌挺长的……
from __future__ import print_function
import string
N = input)
[printreducelambda s,x:s.centerlens)+2,'-').centerlens)+4,x),[item for item in string.lowercase[N-i:N]])).center4*N-3,'-')) for i in range1,N+1)+rangeN-1,0,-1)]
Triangle Quest 2
此题目要求输入一个整数,打印出如下图形(输入为5的时候):
此题目要求不能超过2行代码,但是实际上此题目可以用一行代码解决问题:
for i in range1,intraw_input))+1): print reducelambda x,y:x+y,mapstr,range1,i)+rangei,0,-1))))
No Idea
有一个包含n个整数数组,以及两个不相交的集合A,B,分别包含m个整数。你喜欢A中的元素,不喜欢B中的元素,对于n个整数组成的数组中的每一个数,如果在A中,则幸福指数+1,如果在B中,则幸福指数-1,否则无变化,初始幸福指数为0,求最终的幸福指数。
这道题目之所以选他,是因为一个关于计数和列表解析的小技巧值得记录下来:
n,m = raw_input).strip).split' ')
N = mapint,raw_input).strip).split' '))
A = setmapint,raw_input).strip).split' ')))
B = setmapint,raw_input).strip).split' ')))
count = [1 if x in A else -1 if x in B else 0 for x in N] #注意这句代码,是个计数通用小技巧
print sumcount)
Maximize It!
这道题目同上一道一样,都是50分的题,有K个list,每个list包含一定数量的元素,不一定相同。编程找到从每个list中选出一个元素对其平方后相加再对一个M取余数的最大值。
from itertools import product
K,M = mapint,raw_input).split))
print maxmaplambda x: sumx) % M,listproduct*[maplambda x:intx)**2,raw_input).split))[1:] for i in rangeK)]))))
借助itertools库中的product方法,此题目也可以很简洁的完成。