Vamos definir uma sequência: a seqüência de soma de n dígitos (n-DSS) é uma sequência que começa com n . Se o último número for k , o próximo número será k + soma dos dígitos (k) . Aqui estão os primeiros n-DSS:
1-DSS: 1, 2, 4, 8, 16, 23, 28, 38, 49, 62, 70...
2-DSS: 2, 4, 8, 16, 23, 28, 38, 49, 62, 70, 77...
3-DSS: 3, 6, 12, 15, 21, 24, 30, 33, 39, 51, 57...
4-DSS: 4, 8, 16, 23, 28, 38, 49, 62, 70, 77, 91...
5-DSS: 5, 10, 11, 13, 17, 25, 32, 37, 47, 58, 71...
6-DSS: 6, 12, 15, 21, 24, 30, 33, 39, 51, 57, 69...
7-DSS: 7, 14, 19, 29, 40, 44, 52, 59, 73, 83, 94...
8-DSS: 8, 16, 23, 28, 38, 49, 62, 70, 77, 91, 101...
9-DSS: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99...
Para 1, esse é A004207 , embora os primeiros dígitos sejam diferentes devido a uma definição ligeiramente diferente. Para 3, é A016052 ; para 9, A016096 .
O desafio de hoje é encontrar a menor seqüência de soma de n dígitos em que um determinado número aparece. Isso é chamado de "Função Colombiana Inversa" e é A036233 . Os primeiros vinte termos, começando com 1, são:
1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 5, 3, 5, 7, 3, 1, 5, 9, 7, 20
Alguns outros bons casos de teste:
117: 9
1008: 918
Você só precisa manipular números inteiros maiores que 0 e pode receber entrada e saída em qualquer formato padrão. Como sempre, esse é o código-golfe , e a resposta mais curta em cada idioma vence.
Respostas:
Haskell ,
1046463 bytes(-26 graças a H.PWiz, -14 graças a Sriotchilism O'Zaic, -1 adicionais a cole)
Esta é uma função.
Experimente online!
Explicação:
Sequência de funções compostas que retornam y + soma digital de y. Converte primeiro a string e depois faz ginástica de mônada para obter a soma dos caracteres e o número original (graças a Cole).
O
<*>
operador neste contexto possui tipo e definiçãopara que possamos escrever o acima como
Isso
read . pure
converte aChar
em número e, portanto,(+) . read . pure :: Char -> Int -> Int
adiciona um dígito a um valor acumulado. Este valor é inicializado para o número especificado na dobra.until
aplica repetidamente uma função ao seu resultado (nesse caso, y + soma digital y) até atender a um requisito especificado por uma função no primeiro argumento. Isso fornece o menor elemento y-DSS maior ou igual a x.Lista preguiçosa infinita de y, de modo que o menor elemento y-DSS> = x seja realmente x. Usa a notação de compreensão de lista de Haskell (que eu também esqueci totalmente, obrigado a todos).
Primeiro elemento dessa lista, que é o menor y que satisfaz os requisitos do desafio.
fonte
fmap
em primeiro lugar me confunde um pouco.Python 2 ,
7371 bytes-2 bytes graças a Erik .
Experimente online!
fonte
l
ak>n
.Perl 6 , 44 bytes
Experimente online!
Solução ingênua que verifica todas as seqüências até encontrar uma que contenha a entrada
Explicação:
fonte
Ruby , 51 bytes
Experimente online!
fonte
Gelatina , 11 bytes
Experimente online!
Programa completo.
fonte
MATL , 18 bytes
Experimente online! Ou verifique os 20 primeiros valores .
Explicação
Para entrada
i
, isso continua aumentandon
até que os primeirosi
termos dan
-ésima sequência sejam incluídosi
. É suficiente testari
termos para cada sequência porque a sequência está aumentando.fonte
Quarto (gforth) , 106 bytes
Experimente online!
Código Explicação
fonte
Pitão , 13 bytes
Experimente aqui ou confira a suíte de testes .
Como funciona
fonte
fqQ.W<HQ+sjZ10
por 14. Eu continuo esquecendo `es como uma maneira de obter dígitos de um número inteiro!Geléia , 9 bytes
Um link monádico que aceita um número inteiro positivo
n
que gera um número inteiro positivoa(n)
, o colombiano inverso den
.Experimente online! Ou veja a suíte de testes .
Quão
Efetivamente, trabalhamos para trás, procurando repetidamente o valor que agregamos até não encontrarmos um:
Usando
13
como exemplo ...fonte
Python 2 , 85 bytes
Experimente online!
Isso certamente funciona para todos os casos de teste, além de todas as 1..88 entradas fornecidas no OEIS; mas ainda não tenho certeza de que seja comprovadamente correto. (Essa é uma das minhas reclamações sobre a Igreja de testes de unidade :)).
fonte
a.index(n)
Wolfram Language (Mathematica) , 61 bytes
Experimente online!
fonte
MathGolf , 13 bytes
Experimente online!
Grande desafio! Isso me levou a encontrar alguns bugs no comportamento pop implícito do MathGolf, que adicionou 1-2 bytes à solução.
Para provar que isso sempre funcionará, é fácil ver isso
n <= input
, porqueinput
é o primeiro elemento dainput
quinta sequência. Tecnicamente, não provei que esta solução é sempre válida, mas passa em todos os casos de teste que testei.fonte
05AB1E , 13 bytes
Experimente online!
fonte
Limpo , 86 bytes
Experimente online!
Expandido:
Incomoda-me que
digitToInt d
seja mais do quetoInt d-48
fonte
C (gcc) , 102 bytes
Experimente online!
fonte
JavaScript, 65 bytes
Experimente online!
Também funciona como C, mas custa mais um byte
C (gcc) , 66 bytes
Experimente online!
fonte
C # (Compilador interativo do Visual C #) ,
83, 82 bytesExperimente online!
fonte
Japonês ,
1514 bytesO ternário para lidar com casos em que
input=output
está me irritando!Tente
fonte
cQuents , 18 bytes
Experimente online!
Explicação
fonte
Quarto (gforth) , 99 bytes
Experimente online!
Muito semelhante ao envio de reffu (106 bytes) . As peças golfadas são:
Como funciona
fonte
Carvão , 26 bytes
Experimente online! Link é a versão detalhada do código. Usa o algoritmo do @ ChasBrown. Se isso for inválido, então para 29 bytes:
Experimente online! Link é a versão detalhada do código. Funciona calculando o primeiro membro de cada sequência de soma de dígitos não inferior a
n
. Explicação:Entrada
n
.Faça um loop até encontrarmos uma sequência de soma de dígitos contendo
n
.A próxima sequência começa com uma mais que o número de seqüências até agora.
Loop enquanto o membro da sequência é menor que
n
.Adicione a soma dos dígitos para obter o próximo membro da sequência.
Envie o membro final para a lista.
Imprima o número de listas calculadas até encontrarmos uma que contenha
n
.fonte
Vermelho , 103 bytes
Experimente online!
fonte
CJam , 25 bytes
Experimente online!
fonte
Gaia , 16 bytes
Experimente online!
Retorna uma lista contendo o menor número inteiro.
Gaia , 16 bytes
Experimente online!
Usa a observação feita pelo Sr. Xcoder . Não é mais curto que o outro, mas é uma abordagem interessante.
Gaia , 16 bytes
Experimente online!
Terceira abordagem não usando
N-find
,#
mas ainda contando com a mesma observação que a abordagem do meio. Retorna um número inteiro em vez de uma lista.fonte
Clojure , 106 bytes
Experimente online!
São 99 bytes, mas resultam em estouro de pilha em entradas maiores (talvez ajustar a JVM ajudaria):
fonte
C # (compilador interativo do Visual C #) , 75 bytes
Experimente online!
fonte
Casca ,
1410 bytes-4 graças a @ H.PWiz
Experimente online!
fonte
€mΩ≥¹SF+dN
(eu ainda acho que há mais curto)V£⁰m¡SF+dN
tinta ,
130127 bytesExperimente online!
-3 bytes
convertendo para um programa completo que requer entrada unária.Parece muito tempo para não ser jogável.
Ungolfed
fonte
C (gcc) ,
807978 bytesExperimente online!
-2 do tetocat
fonte