mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-07-19 19:03:02 +08:00
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:

committed by
cclauss

parent
2fb3beeaf1
commit
267b5eff40
0
project_euler/problem_01/__init__.py
Normal file
0
project_euler/problem_01/__init__.py
Normal 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())))
|
||||
|
@ -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())))
|
||||
|
@ -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())))
|
||||
|
@ -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())))
|
||||
|
@ -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())))
|
||||
|
@ -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())))
|
||||
|
Reference in New Issue
Block a user