-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheuler013.py
executable file
·45 lines (33 loc) · 1.26 KB
/
euler013.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/python
from digit_math import digitSum, getNumDigits, digitsToStr
def getNumbersEasy(fileName):
# read in numbers, using python's built-in support for arbitrary length
# integers
numbers = []
with open(fileName, 'r') as fIn:
for line in fIn:
numbers.append(int(line))
return numbers
def euler13(numberFile='data/euler013.txt', numDigits=10):
# compute sum, using python's built-in support for arbitrary length integers
print('Doing sum the easy way '
+ "(using python's built-in arbitrary precision ints):")
s = sum( getNumbersEasy(numberFile) )
numDigits_S = getNumDigits(float(s))
if numDigits_S > numDigits:
s /= 10**(numDigits_S - numDigits)
print('First %d digits of sum: %d' % (numDigits, s))
def getNumbersHard(fileName):
# read in numbers as digits
with open(fileName, 'r') as fIn:
for line in fIn:
yield [int(d) for d in line.strip()]
def euler13Hard(numberFile = 'data/euler013.txt', numDigits=10):
print('Doing sum the hard way '
+ '(writing own array-based arbitrary precision ints):')
# compute sum
s = digitSum( getNumbersHard(numberFile) )
print('First %d digits of sum: %s' % (numDigits, digitsToStr(s[:numDigits])))
if __name__ == "__main__":
euler13()
euler13Hard()