# HackerRank Python Challenges

In this article I show how I solved HackerRank Python challenges. The main purpose of the content is to present my acquired experiences primarily for learning purposes.

Other categories:

Introduction
Basic Data Types
Strings
Sets
Itertools
Collections
Built-Ins
Numpy
Others

## Others

### Words Score

In this challenge, the task is to debug the existing code to successfully execute all provided test files. Consider that vowels in the alphabet are a, e, i, o, u and y. Function score_words takes a list of lowercase words as an argument and returns a score as follows: The score of a single word is 2 if the word contains an even number of vowels. Otherwise, the score of this word is 1. The score for the whole list of words is the sum of scores of all words in the list. Debug the given function score_words such that it returns a correct score. Your function will be tested on several cases by the locked template code.

Solution:

```def score_words(words):
score = 0
for word in words:
num_vowels = 0
#print(word)
for letter in word:
#print(letter)
if letter in ['a', 'e', 'i', 'o', 'u', 'y']:
num_vowels += 1
#print('num_vowels: ' + str(num_vowels))
if num_vowels % 2 == 0:
score += 2
else:
score += 1
#print(score)
return score

n = int(input())
words = input().split()
print(score_words(words))
```

### Default Arguments

Debug the given function print_from_stream using the default value of one of its arguments. This function should print the first n values returned by get_next() method of stream object provided as an argument. Each of these values should be printed in a separate line. Whenever the function is called without the stream argument, it should use an instance of EvenStream class defined in the code stubs below as the value of stream. Your function will be tested on several cases by the locked template code.

Solution:

```class EvenStream(object):
def __init__(self):
self.current = 0

def get_next(self):
to_return = self.current
self.current += 2

class OddStream(object):
def __init__(self):
self.current = 1

def get_next(self):
to_return = self.current
self.current += 2

def print_from_stream(n, stream=EvenStream()):
if type(stream) == EvenStream:
stream = EvenStream()
else:
stream = OddStream()

for i in range(n):
print(stream.get_next())

queries = int(input())
for _ in range(queries):
stream_name, n = input().split()
n = int(n)
if stream_name == "even":
print_from_stream(n)
else:
print_from_stream(n, OddStream())
```

### Polar Coordinates

You are given a complex z. Your task is to convert it to polar coordinates.

Solution:

```import math
import cmath

z = complex(input())

print(math.sqrt(pow(z.real, 2) + pow(z.imag, 2)))
print(cmath.phase(z))
```

### Find Angle MBC

ABC is a right triangle, 90° at B. Therefore, angle ABC = 90°. Point M is the midpoint of hypotenuse AC. You are given the lengths AB and BC. Your task is to find angle MBC in degrees.

Solution:

```import math

ab = input()
ab = float(ab)
bc = input()
bc = float(bc)

ac = math.sqrt(pow(ab, 2) + pow(bc, 2))
cm = ac / 2

acb = math.acos((pow(ac, 2) + pow(bc, 2) - pow(ab , 2)) / (2 * ac * bc))
mb = math.sqrt(pow(bc, 2) + pow(cm, 2) - 2 * bc * cm * math.cos(acb))

mbc = math.acos((pow(mb, 2) + pow(bc, 2) - pow(cm, 2)) / (2 * mb * bc))

print(str(int(round(math.degrees(mbc)))) + u'\N{DEGREE SIGN}')
```

### Mod Divmod

Read in two integers, a and b, and print three lines. The first line is the integer division a//b (While using Python2 remember to import division from __future__). The second line is the result of the modulo operator: a%b. The third line prints the divmod of a and b.

Solution:

```a = int(input())
b = int(input())

print(a//b)
print(a%b)
print(divmod(a, b))
```

### Power - Mod Power

You are given three integers: a, b, and m. Print two lines. On the first line, print the result of pow(a,b). On the second line, print the result of pow(a,b,m).

Solution:

```a = int(input())
b = int(input())
m = int(input())

print(pow(a, b))
print(pow(a, b, m))
```

### Integers Come In All Sizes

Read four numbers, a, b, c, and d, and print the result of a^b + c^d.

Solution:

```a = int(input())
b = int(input())
c = int(input())
d = int(input())

print(a**b + c**d)
```

### Calendar Module

You are given a date. Your task is to find what the day is on that date.

Solution:

```import datetime
import calendar

d = input()
d_list = d.split()

date = datetime.datetime(int(d_list), int(d_list), int(d_list))

print(calendar.day_name[date.weekday()].upper())
```

### Time Delta

When users post an update on social media,such as a URL, image, status update etc., other users in their network are able to view this new post on their news feed. Users can also see exactly when the post was published, i.e, how many hours, minutes or seconds ago.
Since sometimes posts are published and viewed in different time zones, this can be confusing. You are given two timestamps of one such post that a user can see on his newsfeed in the following format:
Day dd Mon yyyy hh:mm:ss +xxxx
Here +xxxx represents the time zone. Your task is to print the absolute difference (in seconds) between them.

Solution:

```import math
import os
import random
import re
import sys
from datetime import datetime
import time

def time_delta(t1, t2):
t1_datetime = datetime.strptime(t1, '%a %d %b %Y %H:%M:%S %z')
t2_datetime = datetime.strptime(t2, '%a %d %b %Y %H:%M:%S %z')

return str(abs(int((t1_datetime - t2_datetime).total_seconds())))

if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

t = int(input())

for t_itr in range(t):
t1 = input()

t2 = input()

delta = time_delta(t1, t2)

fptr.write(delta + '\n')

fptr.close()
```

### Exceptions

You are given two values a and b. Perform integer division and print a/b.

Solution:

```amount = input()
l = []

for i in range(int(amount)):
inp = input()
l = inp.split()

try:
print(int(int(l) / int(l)))
except ZeroDivisionError as e:
print("Error Code:", "integer division or modulo by zero")
except ValueError as e:
print("Error Code:", e)
```

### Map and Lambda Function

Solution:

```cube = lambda x: x ** 3

def fibonacci(n):
lst = []

if n < 1:
return lst

lst.append(0)

if n < 2:
return lst

lst.append(1)

if n < 3:
return lst

for i in range(2, n):
lst.append(lst[i - 1] + lst[i - 2])

return lst

if __name__ == '__main__':
n = int(input())
print(list(map(cube, fibonacci(n))))
```

### Detect Floating Point Number

Solution:

```t = int(input())

for i in range(t):
try:
s = input()
if '.' not in s:
raise Exception('')

n = float(s)

print(True)
except:
print(False)
```

### Group(), Groups() & Groupdict()

You are given a string S. Your task is to find the first occurrence of an alphanumeric character in S (read from left to right) that has consecutive repetitions.

Solution:

```s = input()

def func():
for i in range(1, len(s)):
if s[i].isalnum() and s[i] == s[i - 1]:
return s[i]

f = func()
if f is not None:
print(f)
else:
print(-1)
```