Vamos definir a função a nos números naturais , escritos como base 10 dígitos , da seguinte maneira:
Contanto que haja dígitos adjacentes iguais , substitua-os pela soma da esquerda para a direita. Se houver esses dígitos, repita o mesmo procedimento.
Em outras palavras, em cada iteração, tomamos avidamente todos os pares de dígitos adjacentes iguais e os substituímos por sua soma ao mesmo tempo (usando o par mais à esquerda, se eles se sobrepõem).
Exemplo
Vamos considerar por exemplo:
- Os primeiros dígitos adjacentes iguais são os dois
- Então, nós os substituímos por que nos dá
- Como ainda estamos no primeiro percurso da esquerda para a direita e ainda havia dois s, precisamos primeiro substituí-los
- Então obtemos
- Algo mudou, então precisamos fazer outra iteração
- Mas como não existem esses dígitos, paramos
Portanto, o número nessa sequência é .
Desafio
Os primeiros 200 termos são:
0,1,2,3,4,5,6,7,8,9,10,2,12,13,14,15,16,17,18,19,20,21,4,23,24,25,26,27,28,29,30,31,32,6,34,35,36,37,38,39,40,41,42,43,8,45,46,47,48,49,50,51,52,53,54,10,56,57,58,59,60,61,62,63,64,65,12,67,68,69,70,71,72,73,74,75,76,14,78,79,80,81,82,83,84,85,86,87,16,89,90,91,92,93,94,95,96,97,98,18,10,101,102,103,104,105,106,107,108,109,20,21,4,23,24,25,26,27,28,29,120,121,14,123,124,125,126,127,128,129,130,131,132,16,134,135,136,137,138,139,140,141,142,143,18,145,146,147,148,149,150,151,152,153,154,20,156,157,158,159,160,161,162,163,164,165,4,167,168,169,170,171,172,173,174,175,176,24,178,179,180,181,182,183,184,185,186,187,26,189,190,191,192,193,194,195,196,197,198,28
Sua tarefa é gerar essa sequência, seja
- dado , retorne o número nessa sequência,
- dado , retorne os primeiros números nessa sequência
- ou gere a sequência indefinidamente.
Você pode escolher seu envio para usar indexação ou , mas especifique qual.
Casos de teste
Você pode usar os termos acima, mas aqui estão alguns maiores:
222 -> 42
1633 -> 4
4488 -> 816
15519 -> 2019
19988 -> 2816
99999 -> 18189
119988 -> 21816
100001 -> 101
999999 -> 181818
Python 2 ,
979693 bytesExperimente online!
Versão não regex:
Python 2 ,
13313012211298 bytesExperimente online!
fonte
Gelatina , 11 bytes
Este é um programa desnecessariamente lento e completo.
Experimente online!
Versão alternativa, 12 bytes
Um byte a mais, mas muito mais rápido. Funciona como um programa ou uma função.
Experimente online!
Como funciona
A versão de 11 bytes faz o mesmo, exceto que chama o link n vezes para a entrada n , em vez de chamá-lo até que um ponto fixo seja alcançado.
fonte
Haskell, 70 bytes
A entrada é tomada como uma sequência.
Experimente online!
fonte
|x<-b:c=a:f x
ou mesmof(a:c)=a:f c
, caso uma ou outra possa realmente levar a uma melhoria :)JavaScript,
484746 bytesEntrada e saída como seqüências de caracteres. Retorna o
nth
termo da sequência.Experimente online
fonte
x[0]*2
->x/5.5
Perl 6 , 37 bytes
Experimente online!
Esta é uma função que gera o enésimo termo da sequência, dado n como argumento.
($_, { ... } ... * == *)
é a sequência de alterações sucessivas no número de entrada, gerada pela expressão entre colchetes (uma simples substituição de regex) e interrompida quando* == *
, ou seja, quando os dois últimos números na sequência são iguais. Em seguida,[*-1]
assume apenas o elemento final dessa sequência como o valor de retorno.fonte
==*
e substituindo*-1
por$_
, pois sempre há menos quen
substituições para um númeron
. 33 bytesRetina , 16 bytes
Experimente online! O link inclui casos de teste. Explicação:
Repita até que a entrada pare de mudar.
Substitua pares de dígitos adjacentes ...
... com o dobro do dígito. (
$1*
gera uma sequência de$1
_
s,2*
duplica isso e$.(
leva o comprimento. Na verdade, o mecanismo Retina é mais inteligente que isso e apenas dobra$1
.)fonte
C # (.NET Core) ,
231,203,200,196, 192 bytesEDIT: A função está agora em 185 bytes mais 18 para
using System.Linq;
Obrigado ao BMO (pois 1> 0 é igual a true mais remoção de nova linha) e ao Sr. XCoder (pelas declarações f =! F)!
EDIT2: até 182 bytes mais 18,
using System.Linq
graças à dana por compartilhar algumas dicas de golfe!EDIT3: Agradecimentos à Modalidade de Ignorância pelo int [] -> var, remoção de curto-circuito && -> & e alteração do ToArray -> ToList! (178 bytes + 18 usando)
EDIT4: Modalidade de ignorância caiu 4 bytes alterando uma atribuição. Dummy me deveria contar! Mais uma vez obrigado: D
Experimente online!
fonte
Perl 5
-p
, 21 bytesExperimente online!
fonte
Japt v2.0a0
-h
,1514 bytesRetorna o
nth
termo da sequência.Tente
Isso deve funcionar para 10 bytes, mas parece haver um erro no método de substituição recursiva do Japt.
fonte
Groovy , 63 bytes
Experimente online!
fonte
05AB1E , 11 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Wolfram Language 108 bytes
Explicação
IntegerDigits
transforma o número de entrada em uma lista de seus dígitos.Split
agrupa dígitos repetidos consecutivos.Partition[#, UpTo@2]&/@
divide execuções de dígitos semelhantes em listas de, no máximo, comprimentos de 2.Flatten[...,1]
elimina chaves ocasionais demais aninhadas - por exemplo, {{2,2}} se torna {2,2}Total/@
soma totais de dígitos emparelhados. Dígitos isolados não precisam ser somados.ToString
converte os totais (e dígitos isolados) em seqüências de caracteres.""<>
junta todas as seqüências de caracteres na lista.ToExpression
converte o resultado em um número inteiro....~FixedPoint~#&
aplica a função até o resultado deixar de ser alterado.fonte
C # (compilador interativo do Visual C #) com sinalizador
/u:System.Text.RegularExpressions.Regex
, 70 bytesSaídas modificando a entrada. Recebe uma lista contendo uma sequência de caracteres para entrada.
Obrigado a @dana por jogar um total de 23 bytes!
Experimente online!
fonte
Limpo , 118 bytes
Experimente online!
Obtém o primeiro valor repetido (
limit
) da lista infinita de aplicativos (iterate
) de um lambda executando uma única etapa do processo de recolhimento. Entrada tomada como a[Char]
.fonte
Vermelho ,
848380 bytesExperimente online!
Retorna o
nth
termo da sequência.Explicação:
fonte
Scala , 84 bytes
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 111 bytes
Experimente online!
MUITO crédito a @ASCIIOnly pelo golfe ~ 30;) No começo, nós dois estávamos postando atualizações simultaneamente, mas em algum momento ele claramente foi à cidade!
-2 graças a @EmbodimentOfIgnorance!
Menos código de golfe ...
fonte
(s[i++]-48)*2
=>s[i++]*2-96