Added doctest and more explanation about Dijkstra execution. (#1014)

* Added doctest and more explanation about Dijkstra execution.

* tests were not passing with python2 due to missing __init__.py file at number_theory folder

* Removed the dot at the beginning of the imported modules names because 'python3 -m doctest -v data_structures/hashing/*.py' and 'python3 -m doctest -v data_structures/stacks/*.py' were failing not finding hash_table.py and stack.py modules.

* Moved global code to main scope and added doctest for project euler problems 1 to 14.

* Added test case for negative input.

* Changed N variable to do not use end of line scape because in case there is a space after it the script will break making it much more error prone.

* Added problems description and doctests to the ones that were missing. Limited line length to 79 and executed python black over all scripts.

* Changed the way files are loaded to support pytest call.

* Added __init__.py to problems to make them modules and allow pytest execution.

* Added project_euler folder to test units execution

* Changed 'os.path.split(os.path.realpath(__file__))' to 'os.path.dirname()'
This commit is contained in:
Bruno Simas Hadlich
2019-07-16 20:09:53 -03:00
committed by cclauss
parent 2fb3beeaf1
commit 267b5eff40
100 changed files with 2621 additions and 1438 deletions

View File

View File

@ -1,13 +1,34 @@
'''
"""
Problem Statement:
If we list all the natural numbers below 10 that are multiples of 3 or 5,
we get 3,5,6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below N.
'''
"""
from __future__ import print_function
try:
raw_input # Python 2
raw_input # Python 2
except NameError:
raw_input = input # Python 3
n = int(raw_input().strip())
print(sum([e for e in range(3, n) if e % 3 == 0 or e % 5 == 0]))
def solution(n):
"""Returns the sum of all the multiples of 3 or 5 below n.
>>> solution(3)
0
>>> solution(4)
3
>>> solution(10)
23
>>> solution(600)
83700
>>> solution(-7)
0
"""
return sum([e for e in range(3, n) if e % 3 == 0 or e % 5 == 0])
if __name__ == "__main__":
print(solution(int(raw_input().strip())))

View File

@ -1,20 +1,39 @@
'''
"""
Problem Statement:
If we list all the natural numbers below 10 that are multiples of 3 or 5,
we get 3,5,6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below N.
'''
"""
from __future__ import print_function
try:
raw_input # Python 2
raw_input # Python 2
except NameError:
raw_input = input # Python 3
n = int(raw_input().strip())
sum = 0
terms = (n-1)//3
sum+= ((terms)*(6+(terms-1)*3))//2 #sum of an A.P.
terms = (n-1)//5
sum+= ((terms)*(10+(terms-1)*5))//2
terms = (n-1)//15
sum-= ((terms)*(30+(terms-1)*15))//2
print(sum)
def solution(n):
"""Returns the sum of all the multiples of 3 or 5 below n.
>>> solution(3)
0
>>> solution(4)
3
>>> solution(10)
23
>>> solution(600)
83700
"""
sum = 0
terms = (n - 1) // 3
sum += ((terms) * (6 + (terms - 1) * 3)) // 2 # sum of an A.P.
terms = (n - 1) // 5
sum += ((terms) * (10 + (terms - 1) * 5)) // 2
terms = (n - 1) // 15
sum -= ((terms) * (30 + (terms - 1) * 15)) // 2
return sum
if __name__ == "__main__":
print(solution(int(raw_input().strip())))

View File

@ -1,50 +1,66 @@
from __future__ import print_function
'''
"""
Problem Statement:
If we list all the natural numbers below 10 that are multiples of 3 or 5,
we get 3,5,6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below N.
'''
'''
This solution is based on the pattern that the successive numbers in the series follow: 0+3,+2,+1,+3,+1,+2,+3.
'''
"""
from __future__ import print_function
try:
raw_input # Python 2
raw_input # Python 2
except NameError:
raw_input = input # Python 3
n = int(raw_input().strip())
sum=0
num=0
while(1):
num+=3
if(num>=n):
break
sum+=num
num+=2
if(num>=n):
break
sum+=num
num+=1
if(num>=n):
break
sum+=num
num+=3
if(num>=n):
break
sum+=num
num+=1
if(num>=n):
break
sum+=num
num+=2
if(num>=n):
break
sum+=num
num+=3
if(num>=n):
break
sum+=num
print(sum);
def solution(n):
"""
This solution is based on the pattern that the successive numbers in the
series follow: 0+3,+2,+1,+3,+1,+2,+3.
Returns the sum of all the multiples of 3 or 5 below n.
>>> solution(3)
0
>>> solution(4)
3
>>> solution(10)
23
>>> solution(600)
83700
"""
sum = 0
num = 0
while 1:
num += 3
if num >= n:
break
sum += num
num += 2
if num >= n:
break
sum += num
num += 1
if num >= n:
break
sum += num
num += 3
if num >= n:
break
sum += num
num += 1
if num >= n:
break
sum += num
num += 2
if num >= n:
break
sum += num
num += 3
if num >= n:
break
sum += num
return sum
if __name__ == "__main__":
print(solution(int(raw_input().strip())))

View File

@ -1,4 +1,30 @@
def mulitples(limit):
"""
Problem Statement:
If we list all the natural numbers below 10 that are multiples of 3 or 5,
we get 3,5,6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below N.
"""
from __future__ import print_function
try:
raw_input # Python 2
except NameError:
raw_input = input # Python 3
def solution(n):
"""Returns the sum of all the multiples of 3 or 5 below n.
>>> solution(3)
0
>>> solution(4)
3
>>> solution(10)
23
>>> solution(600)
83700
"""
xmulti = []
zmulti = []
z = 3
@ -6,7 +32,7 @@ def mulitples(limit):
temp = 1
while True:
result = z * temp
if (result < limit):
if result < n:
zmulti.append(result)
temp += 1
else:
@ -14,17 +40,14 @@ def mulitples(limit):
break
while True:
result = x * temp
if (result < limit):
if result < n:
xmulti.append(result)
temp += 1
else:
break
collection = list(set(xmulti+zmulti))
return (sum(collection))
print (mulitples(1000))
collection = list(set(xmulti + zmulti))
return sum(collection)
if __name__ == "__main__":
print(solution(int(raw_input().strip())))

View File

@ -1,16 +1,34 @@
'''
"""
Problem Statement:
If we list all the natural numbers below 10 that are multiples of 3 or 5,
we get 3,5,6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below N.
'''
"""
from __future__ import print_function
try:
input = raw_input #python3
raw_input # Python 2
except NameError:
pass #python 2
raw_input = input # Python 3
"""A straightforward pythonic solution using list comprehension"""
n = int(input().strip())
print(sum([i for i in range(n) if i%3==0 or i%5==0]))
def solution(n):
"""Returns the sum of all the multiples of 3 or 5 below n.
>>> solution(3)
0
>>> solution(4)
3
>>> solution(10)
23
>>> solution(600)
83700
"""
return sum([i for i in range(n) if i % 3 == 0 or i % 5 == 0])
if __name__ == "__main__":
print(solution(int(raw_input().strip())))

View File

@ -1,9 +1,40 @@
a = 3
result = 0
while a < 1000:
if(a % 3 == 0 or a % 5 == 0):
result += a
elif(a % 15 == 0):
result -= a
a += 1
print(result)
"""
Problem Statement:
If we list all the natural numbers below 10 that are multiples of 3 or 5,
we get 3,5,6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below N.
"""
from __future__ import print_function
try:
raw_input # Python 2
except NameError:
raw_input = input # Python 3
def solution(n):
"""Returns the sum of all the multiples of 3 or 5 below n.
>>> solution(3)
0
>>> solution(4)
3
>>> solution(10)
23
>>> solution(600)
83700
"""
a = 3
result = 0
while a < n:
if a % 3 == 0 or a % 5 == 0:
result += a
elif a % 15 == 0:
result -= a
a += 1
return result
if __name__ == "__main__":
print(solution(int(raw_input().strip())))