记录一些刷HackerRank的Python模块的时候的小心得和体会,以及有趣的代码

HackerRank刷题之路---Python

HackerRank的Python模块的网页链接 由于绝大多数题目都很简单,适合初学者练练手,所以这里只记录一些有趣的题目和一些有趣的代码实现。

Alphabet Rangoli

此题目要求输入一个整数,打印出如下图形(此图为输入10的时候):

hackerrank python hackerrank python题库_代码实现


基于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的时候):

hackerrank python hackerrank python题库_HackerRank刷题之路_02


此题目要求不能超过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方法,此题目也可以很简洁的完成。