Prelúdio , 69 55 54 bytes
?1-(v #1)-
1 0v ^(# 0 (1+0)#)!
(#) ^#1-(0)#
Se um intérprete compatível com o padrão for usado, isso terá entrada e saída como valores de bytes . Para realmente usar números decimais em STDIN / STDOUT, você precisa do interpretador Python com NUMERIC_OUTPUT = Truee uma opção adicional NUMERIC_INPUT = True.
Explicação
O esqueleto do programa é
?1-( 1 -
1 )!
Lemos a entrada Nna primeira voz e a diminuímos N-1. Também inicializamos a segunda voz para 1. Em seguida, fazemos N-1um loop uma vez, cada iteração da qual obtém o próximo valor da sequência na segunda pilha. No final, imprimimos o Nnúmero th.
A idéia do programa é colocar cada elemento da sequência em uma fila na terceira voz e diminuir o cabeçalho dessa fila em cada iteração. Quando a cabeça chega 0, aumentamos o valor da sequência e removemos isso 0.
Agora, o problema é que o Prelude usa pilhas e não filas. Portanto, precisamos mudar um pouco a pilha para usá-la como uma fila.
v #
0v ^
(#)
Isso copia o valor atual da sequência para a primeira voz (como uma cópia temporária), empurra a 0para a segunda voz (para marcar o fim da fila). E, em seguida, executa um loop para deslocar (e, assim, reverter) a terceira pilha para a segunda. Após o loop, colocamos a cópia do valor atual da sequência no topo da segunda pilha (que é a cauda da nossa fila).
)
(#
^#1-
Isso parece um pouco feio, mas essencialmente é um loop que muda a pilha de volta para a terceira voz. Como a )coluna está na mesma coluna das instruções de mudança, a 0que colocamos na segunda voz anteriormente também terminará na terceira, portanto, precisamos removê-la com outra #. Em seguida, diminua o topo da 3ª voz, ou seja, o início da fila.
Agora fica um pouco chato - queremos executar algum código quando esse valor for 0, mas a única estrutura de controle do Prelude (o loop) responde apenas a valores diferentes de zero.
0 (1+0)#
(0)#
Observe que o topo da segunda voz é verdadeiro (já que a sequência de Golomb não contém nenhum 0s). Portanto, a carga de trabalho entra nessa voz (o último par de parênteses). Só precisamos impedir que isso aconteça se o início da fila 0ainda não estiver. Então, primeiro temos um "loop" na terceira voz que empurra um 0para a segunda voz se a cabeça da fila ainda é diferente de zero. Também colocamos uma 0terceira voz para sair do loop imediatamente. A #terceira voz remove isso 0ou remove a cabeça da fila, se esse já era zero. Agora esse segundo loop será inserido apenas se o cabeçalho da fila for zero (e o0na segunda voz nunca foi pressionada). Nesse caso, incrementamos o valor atual da sequência e pressionamos a 0para sair do loop. Por fim, sempre haverá um 0no topo da pilha, que precisamos descartar.
Eu lhe disse que a negação lógica é irritante no Prelude ...
nmais do que2 - n % 1. Você tem algum motivo para esperar que as respostas sejam significativamente diferentes?