summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2010-06-27 18:12:47 +0200
committerReiner Herrmann <reiner@reiner-h.de>2014-08-31 20:32:41 +0200
commit5bbd75cb8143d4341c7d85ca3c32fb9f0613a5fa (patch)
tree2143438ea4645fda21269613b75de77402096ed8
parent417f3460e0f82d92f2c22ef10f2d3c845cf395dd (diff)
projecteuler: first try in solving 74, not working yet
-rw-r--r--src/projecteuler/074.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/projecteuler/074.py b/src/projecteuler/074.py
new file mode 100644
index 0000000..d463358
--- /dev/null
+++ b/src/projecteuler/074.py
@@ -0,0 +1,59 @@
+
+fac = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
+numbers = [0]*10000000
+
+for i in xrange(0, 10):
+ numbers[i] = 1
+numbers[145] = 1
+numbers[40585] = 1
+numbers[169] = 3
+numbers[871] = 2
+numbers[872] = 2
+numbers[45361] = 2
+numbers[45362] = 2
+numbers[1454] = 3
+numbers[363601] = 3
+
+def next(n):
+ x = 0
+ while n > 0:
+ x += fac[n % 10]
+ n /= 10
+ return x
+
+def count(n):
+ if numbers[n] != 0:
+ return
+ chain = [n]
+ x = next(n)
+ while x not in chain:
+ chain.append(x)
+ if numbers[x] != 0:
+ break
+ #if x == 145:
+ # break
+ #elif x == 169:
+ # chain += [363601, 1454]
+ # break
+ #elif x == 871:
+ # chain += [45361]
+ # break
+ #elif x == 872:
+ # chain += [45362]
+ # break
+ x = next(x)
+ last = numbers[chain[-1]]
+ l = len(chain)
+ for j in xrange(0, l-1):
+ c = chain[j]
+ numbers[c] = l - j - 1 + last
+
+for i in xrange(10, 1000000):
+ count(i)
+
+#c = 0
+#for j in numbers:
+# if j == 60:
+# c += 1
+print max(numbers)
+