## Resolution of Hackerrank – Python exercises

This time I have completed the Easy difficulty exercises from Hackerranck Website:

## Mod Divmod

from __future__ import division
a = int(raw_input())
b = int(raw_input())
print a//b
print a%b
print divmod(a,b)

## Print Function

Without using any string methods, try to print the following:

1,2,3…..N

Note that “…..” represents the values in between.

from __future__ import print_function
n = int(raw_input())
for i in xrange(n):
print (i+1,end="")

## Lists

You have to initialize your list L = [] and follow the N commands given in N lines.

Each command will be 1 of the 8 commands given above. The method extend(L) will not be used. Each command will have its own value(s) separated by a space.

L = []
for i in range(int(raw_input())):
s = raw_input().split()
for i in range(1,len(s)):
s[i] = int(s[i])
if s == "append":
L.append(s)
elif s == "extend":
L.extend(s[1:])
elif s == "insert":
L.insert(s,s)
elif s == "remove":
L.remove(s)
elif s == "pop":
L.pop()
elif s == "index":
print L.index(s)
elif s == "count":
print L.count(s)
elif s == "sort":
L.sort()
elif s == "reverse":
L.reverse()
elif s == "print":
print L

## Interchange two numbers

#input of the elements of the tuple in a and then printing in You are given two integers. Store them into two variables and then exchange them. Rather than using any fancy logic, make sure to use a tuple to do the task. Print the two numbers.

a = (int(raw_input()), int(raw_input()))
print a
print a

## Finding the percentage

You have a record of N students. Each record contains the student’s name, and their percent marks in Maths, Physics and Chemistry. The marks can be floating values. The user enters some integer N followed by the names and marks for N students. You are required to save the record in a dictionary data type. The user then enters a student’s name. Output the average percentage marks obtained by that student, correct to two decimal places.

N = int(raw_input())
record = {}
for i in range(0,N):
student_info = raw_input()
name = student_info.split()
record[name] = [float(name),float(name),float(name)]
find_name = raw_input()
if record.has_key(find_name):
print "{0:.2f}".format(sum(record[find_name])/3.0)

## Sets – Symmetric Difference

Let’s learn about a new datatype, sets. You are given 2 sets of integers M and N. You have to print their symmetric difference in ascending order. The term symmetric difference indicates those values that exist in either M or N but do not exist in both.

raw_input()
set_a = set(raw_input().split())
raw_input()
set_b = set(raw_input().split())

l = list(set_a.difference(set_b).union(set_b.difference(set_a)))
l = list(map(int, l))
l.sort()
for i in l:
print i

## List Comprehensions

Let’s learn about list comprehensions! You are given three integers X,Y and Z representing the dimensions of a cuboid. You have to print a list of all possible coordinates on a 3D grid where the sum of Xi + Yi + Zi is not equal to N. If X=2, the possible values of Xi can be 01 and 2. The same applies to Y and Z.

x = int(raw_input())
y = int(raw_input())
z = int(raw_input())
n = int(raw_input())

print [list([xx,yy,zz]) for xx in range(x+1) for yy in range(y+1) for zz in range(z+1) if xx+yy+zz !=n]

## Find the Second Largest Number

N = raw_input()
if N >= 2 and N >= 10:
A_s = raw_input()
A = set([int(x) for x in A_s.split(" ")])
if all( n >= -100 and n <= 100 for n in A):
A.remove(max(A))
print max(A)

## Nested Lists

N = int(raw_input())
All = []
score = []
if N >=2 and N <=5:
for i in range(N):
All.append([raw_input(), float(raw_input())])
score.append(All[i])
firstLowest = []
secondLowest = []
for i in All:
if i == min(score):
firstLowest.append(i)
for x in firstLowest:
del All[All.index(x)]
del score[score.index(x)]
for i in All:
if i == min(score):
secondLowest.append(i)
secondLowest.sort()
for i in secondLowest:
print i



## Tuples

N = int(raw_input())
T = raw_input()
T = T.split()
T = map(int,T)
print hash(tuple(T))



## sWAP cASE

from __future__ import print_function
S = list(raw_input())
for s in S:
if s == s.upper():
print (s.lower(),end='')
elif s == s.lower():
print (s.upper(),end='')
else:
print (s,end='')



## String Split and Join

words = raw_input()
words = words.split()
print "-".join(words)



## Mutations

S = raw_input()
n = raw_input().split()
l = list(S)
l[int(n)] = n
S = ''.join(l)
print S



## Find a string

a = raw_input()
b = raw_input()
c =0
for i in range(len(a)):
if a[i:].startswith(b):
c += 1
print c

## Text Wrap

import textwrap
S = raw_input()
w = int(raw_input())
print textwrap.fill(S,w)



## Capitalize!

a=[word.capitalize() for word in raw_input().split(' ')]
print ' '.join(a)

## String Validators

s = raw_input()
print any(c.isalnum() for c in s)
print any(c.isalpha() for c in s)
print any(c.isdigit() for c in s)
print any(c.islower() for c in s)
print any(c.isupper() for c in s)

## Text Alignment

#Replace all ______ with rjust, ljust or center.

thickness = int(raw_input()) #This must be an odd number
c = 'H'

#Top Cone
for i in range(thickness):
print (c*i).rjust(thickness-1)+c+(c*i).ljust(thickness-1)

#Top Pillars
for i in range(thickness+1):
print (c*thickness).center(thickness*2)+(c*thickness).center(thickness*6)

#Middle Belt
for i in range((thickness+1)/2):
print (c*thickness*5).center(thickness*6)

#Bottom Pillars
for i in range(thickness+1):
print (c*thickness).center(thickness*2)+(c*thickness).center(thickness*6)

#Bottom Cone
for i in range(thickness):
print ((c*(thickness-i-1)).rjust(thickness)+c+(c*(thickness-i-1)).ljust(thickness)).rjust(thickness*6)

## String Formatting

N = int(raw_input())
n = len(bin(N))-2
for i in range(1,N+1):
print str(i).rjust(n) + " " + format(i,'o').rjust(n) + " " + format(i,'X').rjust(n) + " " + format(i,'b').rjust(n)



## Introduction to Sets

N = int(raw_input())
L = set(map(int,raw_input().split()))
print float(sum(L)) / len(L)

L = set()
for i in range(int(raw_input())):
print len(L)

## Set .discard(), .remove() & .pop()

n = int(raw_input())
s = set(map(int,raw_input().split()))
for i in range(0,int(raw_input())):
a = raw_input().split(" ")
if a=='pop':
s.pop()
elif a=='remove':
s.remove(int(a))
print sum(s)

## Set .union() Operation

N = int(raw_input())
NL = set(raw_input().split())
M = int(raw_input())
ML = set(raw_input().split())
print len(NL.union(ML))

## Set .intersection() Operation

N = int(raw_input())
N = set(raw_input().split())
M = int(raw_input())
M = set(raw_input().split())
print len(N.intersection(M))

## Set .difference() Operation

N = int(raw_input())
N = set(raw_input().split())
M = int(raw_input())
M = set(raw_input().split())
print len(N.difference(M))

## Set .symmetric_difference() Operation

N = int(raw_input())
NL = set(raw_input().split())
M = int(raw_input())
ML = set(raw_input().split())
print len(NL.symmetric_difference(ML))

## The Minion Game

word = raw_input().upper()
vowels = 'AEIOU'
kevin = 0
stuart = 0
for i in range(len(word)):
if word[i] in vowels:
kevin += len(word) - i
else:
stuart += len(word) - i
if kevin > stuart:
print "Kevin", kevin
elif stuart > kevin:
print "Stuart", stuart
else:
print "Draw"

## Captain’ Room

n = int(raw_input())
nums = raw_input().split()
repeticiones = 0
nums.sort()
for i in range(len(nums)):
if i + 1 < len(nums) and nums[i] == nums[i + 1]:
repeticiones += 1
elif repeticiones == 1:
break
repeticiones = 1
print(nums[i]) 