A sequência do malabarista é descrita a seguir. Começando com uma entrada a 1 , o próximo termo é definido pela relação de recorrência
A sequência termina quando atinge 1, pois todos os termos subsequentes seriam 1.
Tarefa
Dada uma entrada n
maior ou igual a 2, escreva um programa / função / gerador / etc. que gera / retorna a respectiva sequência de malabarista. A saída pode estar em qualquer forma razoável. Você não pode usar um interno que calcule a sequência do malabarista ou qualquer interno que produz diretamente o resultado. Você pode assumir que a sequência termina em1
.
Casos de teste
Input: output
2: 2, 1
3: 3, 5, 11, 36, 6, 2, 1
4: 4, 2, 1
5: 5, 11, 36, 6, 2, 1
Este é um código de golfe. O menor código em bytes vence.
~5.6*10^7
valores (todos eles até agora).Respostas:
Geléia ,
121110 bytesGraças ao @ Sp3000 por jogar fora 1 byte!
Experimente online!
Como funciona
fonte
<code> </code>
vez dos backticks parece exibir um caractere SP real. Obrigado por apontar isso.Julia,
645048423230 bytesEsta é uma função recursiva que aceita um número inteiro e retorna uma matriz flutuante.
Construímos uma matriz concatenando a entrada com o próximo termo da sequência, computado como x à potência de sua paridade mais 1/2. Isso nos dá x 1/2 ou x 1 + 1/2 = x 3/2 . A divisão inteira por 1 obtém a palavra. Quando a condição x <3 for verdadeira, o elemento final será um valor booleano e não numérico, mas como a matriz não é do tipo
Any
, ela é convertida para ter o mesmo tipo que o restante da matriz.Economizou 14 bytes graças a Dennis!
fonte
JavaScript (ES7),
4533 bytesExplicação
Abordagem recursiva. Retorna uma sequência de números separados por vírgula.
Teste
**
não usado no teste de compatibilidade do navegador.Mostrar snippet de código
fonte
**
suporte em todos os navegadores.**
suporte em C #.Mathematica,
4039 bytesAgradecemos a Martin Büttner por economizar 1 byte.
Caso de teste
fonte
Pitão,
1412 bytesDemonstração
Começamos com uma redução cumulativa,
.u
, que neste caso inicia na entrada e aplica uma função até que o resultado se repita; nesse ponto, ele gera todos os resultados intermediários.A função assume o valor anterior como
N
. Começa tomando sua raiz quadrada com@N2
. Em seguida, bifurca esse valor na multiplicaçãoN
com*B ... N
. Isso cria a lista[N ** .5, (N ** .5) * N]
, os resultados não gravados para os casos pares e ímpares. Em seguida, o resultado não pavimentado apropriado é selecionado pela indexação na lista com@ ... N
. Como o Pyth possui indexação modular, nenhum erro fora dos limites é gerado. Finalmente, o resultado é marcado coms
.fonte
MATL,
1312 bytesExperimente online!
Explicação
Obrigado Luis por salvar um byte!
fonte
floor
função foi alterada parak
, para que você possa usá-la em vez deZo
salvar 1 byte. (Desculpe por essas mudanças, você pode ver os resumos de libertação aqui )Minkolang 0.15 , 25 bytes
Experimente aqui!
Explicação
fonte
TSQL, 89 bytes
A entrada entra
@N
:Código:
fonte
APL,
282416 bytesEste é um programa que aceita um número inteiro e imprime as saídas sucessivas em linhas separadas.
Explicação:
Experimente online
Economizou 8 bytes graças a Dennis!
fonte
Java 7,
8371 bytesOriginalmente, usei um
for
loop típico , mas tive que pular os bastidores para fazê-lo funcionar corretamente. Depois deroubarmutuários ideia das user81655 ao recurse em vez disso, eu consegui-lo doze bytes.fonte
Haskell, 70 bytes
Haskell não tem um número inteiro
sqrt
embutido, mas acho que pode haver algo mais curto quefloor.sqrt.fromInteger
.fonte
Oracle SQL 11.2, 128 bytes
Sem golfe
Adicionar MOD (i, 2) a 0,5 é mais curto, mas há um erro com POWER (2, .5):
dá
fonte
R,
5451 bytesEconomizou 3 bytes graças ao plannapus.
fonte
floor(n^(.5+n%%2))
para on^(.5+n%%2)%/%1
que penso. +1.CJam, 18 bytes
Teste aqui
Semelhante à resposta MATL de David .
fonte
Python 3,
57,45,43, 41 bytesMelhor solução com sugestão de @mathmandan
Este método imprimirá cada número em uma nova linha
Solução anterior: reduza para 43 bytes após a recomendação do xnor
Você pode chamar o acima, fazendo
a(10)
quais retornos[10, 3.0, 5.0, 11.0, 36.0, 6.0, 2.0, 1.0]
O acima irá gerar os valores como flutuadores. Se você os quiser como números inteiros, podemos adicionar 2 bytes extras para 43 bytes:
fonte
[n][:n<2]or
ou como1/n*[n]or
o caso inteiro.def j(n):print n;n-1and j(n**(.5+n%2)//1)
. (Ou no Python 3,def j(n):print(n);n-1and j(n**(.5+n%2)//1)
tem 42 bytes.) Ele imprimirá o termo da sequência por termo, em vez de coletar os termos em uma lista.n<2or
, em vez den-1and
TI-Basic, 30 bytes
fonte
Repeat Ans=1
porWhile log(Ans
e use√(Ans)Ans^remainder(Ans,2
.JavaScript ES6,
109102 bytesEu sei que isso pode ser jogado. Retorna uma sequência de números separados por vírgula.
fonte
C ++, 122 bytes
fonte
C #, 62 bytes
Inspirado por @ user81655 e @Alex A., usei a recursão.
fonte
Retina, 144 bytes
Entrada e saída são unárias.
A penúltima linha contém um espaço, e as duas linhas do meio e a última linha estão vazias.
Experimente online
Explicação
Raiz quadrada inteira na Retina , por Digital Trauma
fonte
C,
646361 bytesfonte
n%2?1.5:0.5
withn%2+0.5
or.5+n%2
(if C allows it). Ifn%2
is true,n%2
is 1, else 0.TI BASIC, 43 bytes
I'm pulling a Thomas Kwa and answering this one on my mobile.
Substitua
sqrt
pelo símbolo real na sua calculadora. Exibe uma lista de números separados por avanço de linha, que é um formato razoável.fonte
JavaScript ES6, 76 bytes
É um gerador chamado
j
. Para usar, definaa = j(<your value>);
. Para ver o próximo valor na sequência, insiraa.next().value
.Ungolfed:
fonte
F # 77 bytes
Não termina em 1, mas continua.
Uso:
Versão que realmente termina em 1, 100 bytes
Ungolfed
fonte
Perl 5, 34 bytes
33, mais 1 para em
-pE
vez de-e
Explicação
Primeiro,
-p
define a variável$_
igual à entrada de stdin. Então começamos um bloco de código:Finalmente,
-p
imprime$_
.De igual comprimento
Também usa
-p
.Isso: imprime
$_
; atribui como acima; testa se o valor de retorno desay
(que é 1), menos o novo valor de$_
, é 0 e, se for o caso, refaz o bloco; depois imprime$_
no final.fonte
dc,
2221 bytesExplicado:
Há um erro: quando a entrada é
1
, a saída consiste em dois1
s.fonte