コード例 #1
0
ファイル: Euler37.py プロジェクト: joewledger/ProjectEuler
def is_truncatable(n,prime_stream):
    prime_digit_list = lambda d : prime_stream.is_prime(integer_utils.convert_digit_list_to_int(d))
    truncate_left = lambda d : all(prime_digit_list(d[x:]) for x in xrange(0,len(d)))
    truncate_right = lambda d : all(prime_digit_list(d[:x]) for x in xrange(1,len(d)))

    digit_list = integer_utils.convert_int_to_digit_list(n)
    return truncate_left(digit_list) and truncate_right(digit_list)
コード例 #2
0
ファイル: Euler36.py プロジェクト: joewledger/ProjectEuler
def odd_palindrome_generator():
    for x in xrange(0,499999):
        n = x * 2 + 1
        digits = integer_utils.convert_int_to_digit_list(n)
        if(is_palindrome(digits)):
            yield n
コード例 #3
0
ファイル: Euler92.py プロジェクト: joewledger/ProjectEuler
#Project Euler Problem 92
#Description: A number chain is created by continuously adding the square of the digits to form a new number until it has been seen before
#How many starting numbers under 10 million will arrive at 89



import os
import sys
if(len(sys.argv) > 1):
    os.chdir(sys.argv[1])
sys.path.append("../../Utils")
sys.path.append("Utils")

import integer_utils

next = lambda n : sum(x ** 2 for x in integer_utils.convert_int_to_digit_list(n))

max_number = 10000000
cache = {1 : 1, 89 : 89}

max_next = 9 ** 2 * len(integer_utils.convert_int_to_digit_list(max_number - 1))
for i in xrange(1,max_next + 1):
    numbers = [i]
    while(not numbers[-1] in cache):
        numbers.append(next(numbers[-1]))
    end_value = cache[numbers[-1]]
    for x in numbers:
        cache[x] = end_value

print(sum(1 for x in xrange(1,max_number) if cache[next(x)] == 89))
コード例 #4
0
ファイル: Euler34.py プロジェクト: joewledger/ProjectEuler
#Project Euler Problem 34
#Description: Find all the sum of all numbers that are equal to the sum of the factorials of their digits

import os
import sys
if(len(sys.argv) > 1):
    os.chdir(sys.argv[1])
sys.path.append("../../Utils")
sys.path.append("Utils")

import operator
import integer_utils

factorial = {x : reduce(operator.mul, [y for y in xrange(1,x + 1)],1) for x in xrange(0,10)}
digit_factorial_equal = lambda n : n == sum(factorial[x] for x in integer_utils.convert_int_to_digit_list(n))

print(sum(e for e in xrange(10,factorial[9] * 7) if digit_factorial_equal(e)))
コード例 #5
0
ファイル: Euler25.py プロジェクト: joewledger/ProjectEuler
#Project Euler Problem 25
#Description: Find the index of the first term in the Fibbonacci sequence to contain 1000 digits

import os
import sys
if(len(sys.argv) > 1):
    os.chdir(sys.argv[1])
sys.path.append("../../Utils")
sys.path.append("Utils")

import integer_utils

def generate_fibonacci_sequence():
    elements = [0,0,1]
    while(True):
        yield elements[2]
        elements = elements[1:]
        elements.append(sum(elements))
        
digit_length = lambda n : len(integer_utils.convert_int_to_digit_list(n))

g = (i + 1 for i,f in enumerate(generate_fibonacci_sequence()) if digit_length(f) > 999)
print(g.next())
コード例 #6
0
ファイル: Euler40.py プロジェクト: joewledger/ProjectEuler
#Project Euler Problem 40
#Description:

import os
import sys
if(len(sys.argv) > 1):
    os.chdir(sys.argv[1])
sys.path.append("../../Utils")
sys.path.append("Utils")

import integer_utils
import operator

i = 0
digits = []
while(len(digits) < 1000000):
    i += 1
    digits.extend(integer_utils.convert_int_to_digit_list(i))

print(reduce(operator.mul,[digits[10 ** j - 1] for j in xrange(0,7)],1))
コード例 #7
0
ファイル: Euler20.py プロジェクト: joewledger/ProjectEuler
#Project Euler Problem 20
#Description: Find the sum of the digits in the number 100!

import os
import sys
if(len(sys.argv) > 1):
    os.chdir(sys.argv[1])
sys.path.append("../../Utils")
sys.path.append("Utils")

import operator
import integer_utils
factorial = reduce(operator.mul, [x for x in xrange(1,101)],1)

print(sum([x for x in integer_utils.convert_int_to_digit_list(factorial)]))