Skip to main content
optimisation of recursive solutions
Source Link
Erwan
  • 761
  • 5
  • 10

Python (3.5), 63 62 bytes

def f(a): r=[0] for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i)) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

Asome recursive onesolutions but a bit larger (68 bytes)

(68 bytes) f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))][i==0:]if a!=[]else[i] (64 bytes) f=lambda a,i=0:a>[]and[i,*f(a[1:],a[0]*(i//a[0]+1))][i<1:]or[i] 

Python (3.5), 63 62 bytes

def f(a): r=[0] for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i)) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger (68 bytes)

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))][i==0:]if a!=[]else[i] 

Python (3.5), 63 62 bytes

def f(a): r=[0] for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i)) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

some recursive solutions but larger

(68 bytes) f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))][i==0:]if a!=[]else[i] (64 bytes) f=lambda a,i=0:a>[]and[i,*f(a[1:],a[0]*(i//a[0]+1))][i<1:]or[i] 
remove R in deault parameter (strange behaviour)
Source Link
Erwan
  • 761
  • 5
  • 10

Python (3.5), 63 6062 bytes

def f(a,r=[0]): r=[0] for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i,[0])) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger (68 bytes)

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))][i==0:]if a!=[]else[i] 

Python (3.5), 63 60 bytes

def f(a,r=[0]): for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i,[0])) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))]if a!=[]else[i] 

Python (3.5), 63 62 bytes

def f(a): r=[0] for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i)) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger (68 bytes)

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))][i==0:]if a!=[]else[i] 
added 7 characters in body
Source Link
Erwan
  • 761
  • 5
  • 10

Python (3.5), 6363 60 bytes

def f(a,r=[0]): r=[0] for i in a:r+=[i*r+=i*(r[-1]//i+1)], return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i,[0])) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))]if a!=[]else[i] 

Python (3.5), 63 bytes

def f(a): r=[0] for i in a:r+=[i*(r[-1]//i+1)] return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i)) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))]if a!=[]else[i] 

Python (3.5), 63 60 bytes

def f(a,r=[0]): for i in a:r+=i*(r[-1]//i+1), return r[1:] 

Test

>>> print('\n'.join([str(i)+' => '+str(f(i,[0])) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]])) [9] => [9] [1, 2] => [1, 2] [2, 1] => [2, 3] [7, 3] => [7, 9] [1, 1, 1, 1] => [1, 2, 3, 4] [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15] [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32] [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17] [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88] [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60] [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156] 

Previous solution

A recursive one but a bit larger

f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))]if a!=[]else[i] 
added 1 character in body
Source Link
Erwan
  • 761
  • 5
  • 10
Loading
Source Link
Erwan
  • 761
  • 5
  • 10
Loading