- #1
- 2,168
- 193
- TL;DR Summary
- How many different ways to write the 100.
Python:
import time
start = time.perf_counter()
def con(H):
J = []
Q = []
W = []
for i in H:
for j in range(len(i)-1):
Cop = i[::]
y = i[j]+i[j+1]
del Cop[j:j+2]
Cop.insert(j,y)
J.append(Cop)
for i in J:
y =(sorted("".join(str(j) for j in i)))
Q.append("".join(y))
T = list(set(Q))
for i in T:
y = [int(j) for j in i]
W.append(y)
return W
for num in range(1,100):
K = [[1 for i in range(num)]]
count = 0
for i in range(len(K[0])-2):
K = con(K)
count = count + len(K)
print(num,count+1)
end = time.perf_counter()
print(end-start,"second")
Here what this code does, For example, let us say num = 4. Then it creates an array of
[[1,1,1,1]]. Then it sums the consecutive numbers so our result becomes (from line 9-14)
[[2,1,1],[1,2,1],[1,1,2]] Since they are all same my code (from line 15-18) makes them just one function and returns ["112"] and then from 18-21 turns ["112"] to [[1,1,2]] and then I do this whole process again for the [[1,1,2]] and then I count the number of these arrays (from 25-29). The problem is its fast up to num = 20-30 but then it really slows down. Is there a way to increase the speed of my code or should I try a different algorithm?
Thanks.
For num = 5 the number should be 6
(1,1,1,1,1)
(2,1,1,1)
(2,2,1)
(3,2)
(3,1,1)
(4,1)
My code is correct bu just works slow.
Last edited: