* Computer Science/Project Euler

project euler 43. problem

soicem 2016. 10. 5. 12:19

숫자 1406357289은 0 ~ 9 팬디지털인데, 부분열에 관련된 재미있는 성질을 가지고 있습니다.

d1을 첫째 자리수, d2를 둘째 자리수...라고 했을 때, 다음과 같은 사실을 발견할 수 있습니다.

  • d2 d3 d4 = 406 → 2로 나누어 떨어짐
  • d3 d4 d5 = 063 → 3으로 나누어 떨어짐
  • d4 d5 d6 = 635 → 5로 나누어 떨어짐
  • d5 d6 d7 = 357 → 7로 나누어 떨어짐
  • d6 d7 d8 = 572 → 11로 나누어 떨어짐
  • d7 d8 d9 = 728 → 13으로 나누어 떨어짐
  • d8 d9 d10 = 289 → 17로 나누어 떨어짐

위와 같은 성질을 갖는 0 ~ 9 팬디지털을 모두 찾아서 그 합을 구하면 얼마입니까?


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
46
47
48
49
50
51
def subset(list, size):
    if size == 0 or not list:
        return [list[:0]]
    else:
        result =[]
        for i in range(len(list)):
            pick = list[i:i+1]
            rest = list[:i] + list[i+1:]
            for x in subset(rest, size-1):
                result.append(pick+x)
        return result
 
def isPartCheck(List, length):
    cal = [2357111317]
    boolean = False
    
    for i in range(1len(cal)+1):
        mul = 100
        sum = 0
        for j in List[i:i+3]:
            sum += mul*j
            mul /= 10
        
        if sum % cal[i-1== 0:
            boolean = True
        else:
            boolean = False
            break
    return boolean
 
def summing(target): # summing each a cipher elements
    mul = 10 ** (len(target)-1
    sum = 0
    for i in target:
        sum += i * mul
        mul /= 10
    return sum 
 
List = subset([0,1,2,3,4,5,6,7,8,9], 10)
 
result = 0
 
for el in List:
    if isPartCheck(el, 10):
        print el
        tmp = summing(el)
        print tmp
        result += tmp
 
print result
 
cs


'* Computer Science > Project Euler' 카테고리의 다른 글

project euler 44. problem  (0) 2016.10.18
project euler 37. problem  (0) 2016.10.13
Permutation  (0) 2016.09.30
project euler 42. problem  (0) 2016.09.23
project euler 40. problem  (0) 2016.09.22