Dado um número inteiro n> 2 , imprima ou retorne o menor número inteiro não negativo k, de modo que a (n, k) = 9 , onde a (n, k) seja definido por:
- a (n, 0) = n
- a (n, k + 1) =
- a (n, k) / 2 + 1 se a (n, k) for par
- a soma dos dígitos de a (n, k) ² (na base 10) se a (n, k) for ímpar
Exemplos
Para n = 5 , a saída esperada é k = 4 :
a(5, 0) = 5
a(5, 1) = 7 (5² = 25 and 2 + 5 = 7)
a(5, 2) = 13 (7² = 49 and 4 + 9 = 13)
a(5, 3) = 16 (13² = 169 and 1 + 6 + 9 = 16)
a(5, 4) = 9 (16 / 2 + 1)
Para n = 40 , a saída esperada é k = 2 :
a(40, 0) = 40
a(40, 1) = 21 (40 / 2 + 1)
a(40, 2) = 9 (21² = 441 and 4 + 4 + 1 = 9)
Esclarecimentos e regras
- A entrada é garantida como superior a 2.
- Seu programa deve, teoricamente, funcionar com qualquer valor de n . (Na prática, pode ser limitado pelo tamanho máximo inteiro suportado pelo seu idioma.)
- k pode ser indexado em 0 ou 1. Por favor, indique-o na sua resposta.
- Isso é código-golfe , então a resposta mais curta em bytes vence!
Primeiros valores
Estes são os primeiros valores de n = 3 para n = 422 , com k 0-indexado. (Para indexação 1, basta adicionar 1
a esses valores.)
1 2 4 3 3 5 0 4 3 4 2 6 1 1 6 5 5 4 1 5 2 3 3 7 6 2 3 2 2 7
6 6 5 6 6 5 1 2 2 6 6 3 1 4 3 4 4 8 1 7 6 3 5 4 6 3 2 3 3 8
7 7 3 7 4 6 6 7 5 7 6 6 6 2 4 3 3 3 6 7 3 7 2 4 7 2 6 5 6 4
7 5 2 5 6 9 6 2 3 8 2 7 1 4 6 6 6 5 1 7 4 4 3 3 7 4 3 4 2 9
6 8 6 8 6 4 6 8 2 5 3 7 6 7 3 8 2 6 7 8 6 7 5 7 6 7 4 3 3 5
6 4 3 4 4 4 6 7 6 8 3 4 6 8 7 3 6 5 6 8 3 3 2 7 6 6 5 7 6 5
7 8 2 6 3 3 6 6 6 7 4 10 6 7 3 3 6 4 1 9 2 3 3 8 7 2 6 5 2 7
7 7 6 7 3 6 7 2 4 8 3 5 6 5 6 4 2 4 6 8 3 5 6 4 7 5 2 3 6 10
7 7 3 9 2 7 1 9 5 7 6 5 6 7 4 9 6 3 6 6 3 4 2 8 7 7 6 8 6 4
7 9 4 3 3 7 7 8 3 9 4 7 6 8 3 6 6 8 7 7 7 8 6 5 7 4 6 4 2 6
7 7 6 5 3 4 7 5 4 5 3 5 7 7 6 8 2 7 1 9 6 4 6 5 7 7 2 9 6 8
7 4 3 7 4 6 6 7 6 9 3 4 6 4 2 3 3 8 1 7 6 7 2 6 7 8 3 7 5 6
7 8 2 9 3 3 6 7 6 4 4 4 6 7 6 7 6 7 6 8 7 5 6 11 7 7 3 8 4 4
7 4 6 7 3 5 6 2 2 10 6 3 6 4 3 4 4 9 7 8 3 3 6 7 7 6 4 3 6 8
9! ≠ 9
an opinion or conclusion formed on the basis of incomplete information.
Respostas:
Casca , 13 bytes
Isso é indexado em 1. Experimente online!
Explicação
Nada muito chique aqui.
fonte
Lω
resolvesse isso.Perl 6 , 41 bytes (40 caracteres)
Experimente online!
Ele usa a indexação 1 de k, portanto fornece 1 respostas maiores que os exemplos no OP. Se não é isso que significa a indexação 1, terei que adicionar mais 1 byte.
Explicação : É uma função anônima. Nós apenas usamos o recurso do Perl 6 para gerar listas usando a recursão :—). Parece que este:
(first element),(block that takes the previous element and gives the next)...(end condition)
. Nesse caso, o primeiro elemento é$_
(argumento da função principal) e a condição final é9
(preenchida quando geramos um 9). No bloco do meio, usamos$_
para nos referir a seu argumento (= o elemento anterior da sequência). o?? !!
é o antigo operador ternário (mais conhecido como? :
). Finalmente, levamos o comprimento dessa lista forçando o contexto numérico por+(...)
.A última coisa estranha aqui é a soma dos dígitos. Os números são
Cool
(se comportam como seqüências de caracteres e números); portanto, usamos um método de sequência.comb
em$_²
(forneça uma lista de caracteres = dígitos) e, em seguida, adicione os caracteres (que os converte novamente em números).fonte
Geléia , 17 bytes
Experimente online!
Abordagem direta. Usa indexação baseada em 0.
Explicação
fonte
do-while n != 9
vez de umwhile n!= 9
Python 2 ,
129126766867645453 bytes-3 bytes graças a Jonathan Frech. -8 bytes graças a Maltysen. -7 bytes graças a Jonathan Allan. -1 byte graças ao Sr. Xcoder.
Experimente online!
De alguém que provavelmente não conhece matemática o suficiente, isso parece completamente arbitrário. : P
fonte
)%2and sum
por)%2*sum
, salvando três bytes.k
completamente e salvar outros sete bytes #Mathematica, 58 bytes
Indexado 1
Experimente online! (para trabalhar em matemática,
Tr
é substituído porTotal
)aqui está a versão de -1 byte por @JungHwanMin (mas não funciona em matemática, por isso guardei os dois)
Mathematica, 57 bytes
fonte
2∣#
vez deOddQ@#
e troque as duas expressões deIf
.JavaScript (ES6),
5950 bytesIndexado a 0.
Tente
Explicação
A primeira coisa que fazemos é calcular
n-9
. Sen==9
então isso, obviamente, dá0
e as coisas param por aí. Se,n!=9
entãon-9
, fornecer um valor diferente de zero, o que, sendo verdade, significa que podemos continuar com o AND lógico. Chamamos a função novamente, passando uma novan
para ela, calculada da seguinte forma:Se o
n
módulo2
é verdadeiro - ou seja,n
é ímpar.Multiplique
n
por si só, converta-o em uma sequência e destrua-a em uma matriz de caracteres individuais (dígitos).Volte a juntar os caracteres a uma string usando
+
, dando-nos uma expressão matemática.Avalie essa expressão, dando-nos a soma dos dígitos de
n*n
.Se
n%2
for falsey (ou seja,n
for par), simplesmente dividimosn
por2
e adicionamos1
.Ao resultado da chamada da função novamente, adicionamos
1
. Portanto, usando uma entrada inicial de5
, o processo é o seguinte:fonte
Geléia ,
1615 bytes-1 byte graças a milhas (uso de ternário se)
Um link monádico que recebe e retorna números.
Indexado 1
Experimente online! ou veja uma suíte de testes (restringe os resultados a serem indexados a 0 e formatos como bloco de código OP)
Quão?
fonte
²DSµH‘$Ḃ?n9$пL
Haskell,
6259 bytesExperimente online!
Edit: -3 bytes graças a @ Ørjan Johansen.
fonte
last$x:[y|odd a]
pode ser reduzido paracycle[x,y]!!a
.Perl 5 , 56 + 1 (-n) = 57 bytes
Experimente online!
fonte
9
.05AB1E , 16 bytes
Experimente online!
Explicação
fonte
VB.NET (.NET 4.5.2), 107 + 20 (importações) = 117 bytes
Requer
Imports System.Linq
Função que recebe
n
como uma entrada inteira e retorna um valor baseado em 0k
.Ungolfed:
fonte
Golfscript, 34 bytes
Experimente online!
Eu realmente preciso de uma maneira melhor do que a soma dos dígitos de um número.
fonte
Pitão ,
2322 bytesPor enquanto, essa é uma função recursiva,
mas tentarei mudar para..W
(funcional while) para salvar bytesExperimente aqui! (com código adicional para chamar a função - use- sem espaços)
y
<your_number>
fonte
Java 8,
11098 bytesIndexado a 0
Explicação:
Experimente aqui.
fonte
Clojure v1.8,
124113112 bytesIndexado a 0
Experimente online!
Explicação
fonte
Pitão, 18 bytes
Experimente online: Demonstração
Explicação:
fonte
Japt,
2221 bytesIndexado a 0.
Tente
Explicação
Entrada implícita de número inteiro
U
.Gere uma matriz de números inteiros de
0
paraU-1
e passe cada um por uma função.Defina o valor de
U
.Se
U
é divisível por 2.U
dividido por 2, mais 1 (Ä
).Senão:
U
com a potência de 2 (²
), divida em uma matriz de dígitos (ì
) e reduzida pela adição (x
).Anexe a matriz resultante à matriz de entradas.
Encontre o índice da primeira ocorrência de
9
na matriz. Saída implícita do resultado.fonte
@¥9}a@=u ?U²ìx :U/2Ä;°T
se houvesse um método que retornasse o número de iterações até que um valor parasse de mudar ...