Example #1
0
    for i in range(1,10):
        if list.count(i) != 1: return False
    return True
    
def lists_overlap(a, b):
    return bool(set(a) & set(b))
    
if __name__ == '__main__':
    upper_bound = 10000
    sum = 0
    products_found = []
    for i in range(1,upper_bound):
        try:
            for j in range(1,upper_bound):
                #convert factors to lists
                i_list = number_as_list(i)
                j_list = number_as_list(j)
                if not lists_overlap(i_list,j_list):
                    #only proceed if there is not already a digit overlap
                    product = i*j
                    p_list = number_as_list(product)
                    combined_list = i_list + j_list + p_list
                    if len(combined_list) > 10:
                        #if the number is too big, no more results can be
                        #found for this factor, so move on to next factor
                        raise TooBig
                    if check_pandigital_multiplication(combined_list):
                        if 0 == products_found.count(product):
                            products_found.append(product)
                            sum += product
        except TooBig:
Example #2
0
#!python
from pelib import Found,number_as_list,list_as_number

if __name__ == '__main__':

    keylog = [319,680,180,690,129,620,762,689,762,318,368,710,720,710,629,168,\
    160,689,716,731,736,729,316,729,729,710,769,290,719,680,318,389,162,289,162,\
    718,729,319,790,680,890,362,319,760,316,729,380,319,728,716]

    key = []
    try:
        while(True):
            fixed = len(keylog)
            for attempt in keylog:
                list = number_as_list(attempt)
                index = [-1,-1,-1]
                for d in range(0,len(list)):
                    digit = list[d]
                    if key.count(digit) == 0:
                        key.append(digit)
                        index[d] = key.index(digit)
                    else:
                        index[d] = key.index(digit)
                for i in range(1,len(list)):
                    if index[i] < index[i-1]:
                        digit = list[i]
                        key.remove(digit)
                        key.insert(index[i-1],digit)
                        fixed -= 1
            if fixed == len(keylog): raise Found
    except Found:
Example #3
0
#!python
from pelib import number_as_list, list_as_number
from pelib import check_1_9_pandigital as check_pandigital
    
if __name__ == '__main__':        
    best_starting_number = -1
    best_pandigital = -1
    number = 9876
    
    while(number > 0):
        number -= 1
        list = number_as_list(number)
        factor = 2
        while(len(list) < 9):
            list += number_as_list(number*factor)
            factor += 1 
        if check_pandigital(list) and factor >= 3:
            pand_number = list_as_number(list)
            if pand_number > best_pandigital:
                best_pandigital = pand_number
                best_starting_number = number
    print "Largest pandigital: ", best_pandigital
    exit(0)
Example #4
0
#!python
from pelib import Found,number_as_list,list_as_number

def lists_overlap(list1, list2):
    #checks if every item in list1 can be found in list2
    #list1 and list2 are not interchangable!!!
    for i in list1:
        found = False
        for j in list2:
            if i == j: found = True
        if not found: return False
    return True
    
if __name__ == '__main__':
    try:
        number = 1
        while(True):
            l1 = number_as_list(number)
            l2 = number_as_list(number*2)
            if len(l1) == len(l2) and lists_overlap(l1,l2) and lists_overlap(l2,l1):
                matches = 0 
                for i in range(3,7):
                    l3 = number_as_list(number*i)
                    if lists_overlap(l1,l3) and lists_overlap(l3,l1):
                        matches += 1
                if matches == 4: raise Found
            number += 1
    except Found:
        print "Smallest number: ", number
        exit(0)
Example #5
0
#python
from pelib import get_primes_prec, number_as_list

def check_pandigital(list):
    #returns True if list is 1-9 pandigital
    for i in range(1,len(list)+1):
        if list.count(i) != 1: return False
    return True

if __name__ == '__main__':
    primes = get_primes_prec(10000000)
    primes.reverse()
    for i in primes:
        if check_pandigital(number_as_list(i)):
            print i
            exit(0)
Example #6
0
from pelib import number_as_list, check_primality_prec, get_primes_prec
from pelib import get_digit_permutations, number_as_list

def lists_overlap(list1, list2):
    #checks if every item in list1 can be found in list2
    #list1 and list2 are not interchangable!!!
    for i in list1:
        found = False
        for j in list2:
            if i == j: found = True
        if not found: return False
    return True

if __name__ == '__main__':
    primes = get_primes_prec(10000)
    lower_bound = 168 #index of first prime > 1000
    for i in range(lower_bound,len(primes)):
        for j in range(i+1,len(primes)):
            p1 = primes[i]
            l1 = number_as_list(p1)
            max1 = max(l1)
            p2 = primes[j]
            l2 = number_as_list(p2)
            p3 = p2 + p2 - p1
            if p3 > 10000 or p2 > max1*1000: break
            if lists_overlap(l1,l2) and lists_overlap(l2,l1) and \
                l1.count(p3%10) > 0 and check_primality_prec(p3) and \
                set(l1) == set(number_as_list(p3)) and p1 != 1487:
                    print "Concatenated number: %d%d%d" % (p1, p2, p3)
                    exit(0)
    exit(1)
Example #7
0
    def try_remove(list, number):
        try:
            new_list = copy.deepcopy(list)
            new_list.remove(number)
            return [True, new_list]
        except ValueError:
            return [False, list]
            
    numer_matches = []
    denom_matches = []
    for numer in range(lower_bound,upper_bound):
        for denom in range(lower_bound,upper_bound):
            if numer < denom:
                # fractions under consideration are all less than 1
                numer_list = number_as_list(numer)
                denom_list = number_as_list(denom)
                for digit in range(1,10):
                    # skipping over removing zeros because they are "trivial" solutions
                    [numer_success, numer_new_list] = try_remove(numer_list, digit)
                    [denom_success, denom_new_list] = try_remove(denom_list, digit)
                    if numer_success and denom_success:
                        # this means a digit was removed from the numerator AND the demoninator
                        if denom_new_list != [0]:
                            # make sure denominator isnt just a 0
                            if float(numer)/denom == float(list_as_number(numer_new_list))/list_as_number(denom_new_list):
                                numer_matches.append(numer_new_list[0])
                                denom_matches.append(denom_new_list[0])

    numer = 1
    denom = 1
Example #8
0
            number = list_as_number(rotate_list_left(list,i))
            permutations.append(number)
        return permutations
    else:
        return []
        
def check_rotational_prime(list):
    number = list_as_number(list)
    if len(list) > 0:
        checked_dict[number] = True
        if check_primality_dyn(number,upper_bound):
            for i in range(1,len(list)):
                number = list_as_number(rotate_list_left(list,i))
                checked_dict[number] = True
                if not check_primality_dyn(number,upper_bound):
                    return False
            return True
        else:
            return False
    else:
        return False

if __name__ == '__main__':
    count = 5 #following loop skips a primality check for 2, 3, 5, 7, and 11
    for i in range(13,upper_bound,2):
        i_list = number_as_list(i)
        if not checked_dict[i] and i_list.count(5) == 0:
            if check_rotational_prime(i_list):
                count += len(i_list)
    
    print "Count: ", count
Example #9
0
def get_square_of_digits(number):
    #returns the sum of the squared digits of a number
    list = number_as_list(number)
    sum = 0
    for i in list:  sum += i**2
    return sum