Suponha que definamos um programa simples que use uma matriz L de números naturais com algum comprimento N e faça o seguinte:
i=0 #start at the first element in the source array
P=[] #make an empty array
while L[i]!=0: #and while the value at the current position is not 0
P.append(L[i]) #add the value at the current position to the end of the output array
i=(i+L[i])%N #move that many spaces forward in the source array, wrapping if needed
return P #return the output array
Todo programa desse tipo será executado para sempre ou será encerrado, produzindo uma lista de números inteiros positivos. Seu trabalho é, dada uma lista P de números inteiros positivos, produzir uma lista mais curta, L, de números naturais que termina e produz P quando conectado ao programa anterior.
Essa lista sempre existe, pois é possível adicionar P[i]-1
zeros após cada um P[i]
na lista, depois um 0 final e ela produzirá a lista original. Por exemplo, dado [5,5]
, uma solução é [5,0,0,0,0,5,0,0,0,0,0]
. No entanto, como [5,0,5]
é muito mais curto, a solução automática não é válida para o seu programa.
[5,6]->[5,6,0,0]
[5,7]->[5,0,0,0,0,7,0,0]
[5,6,7]->[5,6,0,7]
[5,6,8]->[5,0,8,0,0,6,0,0,0]
[1,2,3,4]->[1,2,0,3,0,0,4,0]
[1,2,1,2]->[1,2,0,1,2,0,0]
[1,3,5,7]->[1,3,0,0,5,0,0,0,0,7]
[1,3,5,4]->[1,3,4,0,5,0,0]
Entrada é uma lista de números inteiros positivos (em algum formato que você pode especificar) e a saída deve estar no mesmo formato. O tamanho da lista e do número inteiro pode ter até 2 ^ 16. Isso é código de golfe, e o programa mais curto em bytes vence!