Forked from 1st/tests_for_toptal_on_codility.py
Last active
October 28, 2021 10:47
-
-
Save kod3r/835726e2502b5feebf27 to your computer and use it in GitHub Desktop.
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