-
-
Save SohanChy/4518a3651c3c017aeda3da08560927cb to your computer and use it in GitHub Desktop.
My answers for tests on http://codility.com that I passed for company http://toptal.com
I use Python language to solve problems.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
# | |
# Test that I passed on codility.com for TopTal company | |
# | |
# Task #1 | |
def binary_gap(N): | |
''' | |
A binary gap within a positive integer N is any maximal | |
sequence of consecutive zeros that is surrounded by ones | |
at both ends in the binary representation of N. | |
Args: | |
- N: integer within the range [1..2,147,483,647] | |
''' | |
bin_representation = bin(N)[2:] | |
max_gap = 0 | |
gap_counter = 0 | |
gap_started = False | |
for symbol in bin_representation: | |
if symbol == '1': | |
if gap_counter > max_gap: | |
max_gap = gap_counter | |
gap_counter = 0 | |
gap_started = True | |
elif gap_started: | |
gap_counter += 1 | |
return max_gap | |
print binary_gap(1041) | |
# Task #2 | |
def count_div(A, B, K): | |
''' | |
Returns the number of integers within the range [A..B] that are divisible by K. | |
Used generators to save memory on large amounts of data. | |
Args: | |
- A: is an integer within the range [0..2,000,000,000] | |
- B: is an integer within the range [0..2,000,000,000] and A <= B | |
- K: is an integer within the range [1..2,000,000,000] | |
''' | |
divs_count = 0 | |
for x in xrange(A, B + 1): | |
if (x % K) == 0: | |
divs_count += 1 | |
return divs_count | |
print count_div(1, 200000000, 1000) | |
# Task #3 | |
def triangle(A): | |
''' | |
Calculate triangel of integers, where sentense of numbers P, Q, R | |
correspond to next rules: | |
- P + Q > R | |
- Q + R > P | |
- R + P > Q | |
Args: | |
- A: list of integers, where we will search triangle | |
Return: 1 - if triangle exists, and 0 - otherwise | |
''' | |
A = tuple(enumerate(A)) | |
for p, P in A: | |
for q, Q in A[p + 1:]: | |
for r, R in A[q + 1:]: | |
if (P + Q > R) and (Q + R > P) and (R + P > Q): | |
return 1 | |
return 0 | |
print triangle([10, 2, 5, 1, 8, 20]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment