Está tudo no título ...
Tome como entrada um número inteiro positivo n>=12
e ... faça o que o título diz.
Sim, isso está no OEIS A187924 .
Alguns casos de teste
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
Isso é código-golfe . O menor código em bytes vence!
Respostas:
Befunge, 81 bytes
Experimente online!
Pode lidar com até n = 70, pelo menos, após o qual alguns valores começarão a exceder o tamanho da célula da pilha na maioria das implementações e naquelas que não o fizerem, levará tanto tempo que não vale a pena esperar para descobrir.
Dadas essas restrições, nem tentamos manipular valores de n maiores que 99, o que significa que podemos testar mais facilmente se o valor termina em n com simplesmente comparando o valor módulo 100 com n .
Abaixo está uma descrição mais detalhada do código.
Leia n do stdin e salve na memória.
Inicialize o valor do teste v para 0 e inicie o loop principal, incrementando v na frente.
Teste se
v%n == 0
, e se não, retorne ao início do loop principal.Teste se
v%100 == n
, e se não, retorne ao início do loop principal.Soma os dígitos em v adicionando repetidamente v módulo 10 e dividindo v por 10.
Teste se a soma é igual a n e, se não, retorne ao início do loop principal.
Caso contrário, imprima ve saia.
fonte
05AB1E , 14 bytes
Experimente online!
Explicação
As soluções que exigem prefixos grandes expiram no TIO
fonte
JavaScript (ES6),
5554 bytesRecebe a entrada como uma sequência. Precisa de um navegador com suporte à recursão de cauda para obter resultados maiores. Editar: salvou 1 byte graças a @Arnauld.
fonte
eval([s,...a].join`-`)?
também funcionaria, embora não seja mais curta ...||
.Brachylog v2,
1210 bytesExperimente online!
Esta é uma submissão de função que recebe entrada via
.
e produz saída via?
(o oposto da convenção normal; todas as funções Brachylog têm exatamente dois argumentos, que podem ser argumentos de entrada ou saída, mas a linguagem não impõe nenhum uso específico de argumento). Nós normalmente não considerar convenções para o uso do argumento de ser relevante na PPCG .Explicação
Uma versão anterior desta solução tinha um caso especial (
Ḋ|
ou seja, "dígitos de retorno literalmente") para dígitos únicos, mas aparentemente a pergunta afirma que você não precisa verificar isso (obrigado @DLosc por capturar isso), então removi isto. (A solução escrita não funcionará em um dígito, pois Brachylog não considerará 1 como uma possibilidade para um desconhecido em uma multiplicação, para evitar loops infinitos; suas multiplicações são de aridade arbitrária.)Portanto, esta resposta agora vale para uma tradução direta da especificação. Começando com
?
(a saída / número que estamos tentando encontrar; um predicado Brachylog sempre começa implicitamente com?
) usamosa₁.
para afirmar que ele tem.
(a entrada) como sufixo. Então;A×?
significa que podemos multiplicar (×
) o resultado por algo (;A
) a produzir?
(a saída). Finalmente,ẹ+
soma (+
) os dígitos (ẹ
) de?
, e há por padrão uma asserção implícita no final de cada programa Brachylog que o resultado final produz.
. Portanto, em outras palavras, este programa é ".
é um sufixo?
,.
multiplicado por algo?
,.
é a soma de dígitos de?
", que está muito próximo de uma tradução literal do programa original.A
≜
é necessária para a exigência soma dígito a ser aplicadas. Eu suponho que algo sobreẹ
não goste de incógnitas, então o≜
Brachylog diz para usar uma abordagem de força bruta para essa parte do programa, em vez de álgebra.fonte
Haskell , 72 bytes
Experimente online!
Observe que o número encontrado menos n deve ser um múltiplo de n e 10 ^ de comprimento (n).
Inspirado por Laikoni e totalmente humano
fonte
lcm n(10^length(show n))
paralcm(10^length(show n))n
para 1 byteAlice , 35 bytes
Experimente online!
Explicação
Este programa possui uma mistura e interação realmente agradáveis entre o modo Cardinal (processamento inteiro) e Ordinal (processamento de string).
A estrutura usual para desafios com E / S decimal, que operam amplamente no modo Cardinal:
E o programa atual:
fonte
Java (OpenJDK 8) ,
13611010392 bytes-26 graças a JollyJoker
-7 novamente graças a JollyJoker
-11 graças a Oliver Grégoire
Experimente online!
Conseguiu amar Java! Pode ser que eu esteja usando uma abordagem ineficiente, mas não tendo uma função de soma de verificação incorporada e a conversão dupla em String para verificar o final do número de bytes de custos ...
Ungolfed:
fonte
(""+i).endsWith(""+a)
Deveria trabalhar.n/=10
em vez den=n/10
também. Além disso,i+=a
no loop for, para que você possa pular a verificação de divisibilidade.Mathematica, 72 bytes
-18 bytes de @MartinEnder
Experimente online!
Aqui está outra versão de Martin Ender
Essa abordagem pode ir até
n=40
(41 excede o limite de iteração padrão)Mathematica, 65 bytes
Experimente online!
fonte
Python 2 , 74 bytes
Esta solução assume isso
n <= sys.maxint
.Experimente online!
fonte
str(x)
porx
back-ticks duas vezes para economizar 6 bytes (como escapar de back-ticks dentro de back-ticks?).`
barra invertida @ChasBrown dentro de backticks.L
que poderia atrapalhar o algoritmo.C (gcc)
7169 bytes, falha em 100Eu tentei com longo e% 1000, mas o tempo limite
-2 bytes graças ao stablebox
Experimente online
fonte
Casca ,
20 1917 bytesObrigado @Zgarb por -2 bytes!
Experimente online!
fonte
C # (.NET Core) ,
90 8483 + 18 = 101 bytesExperimente online!
(""+n)
em alguns lugares en.ToString()
em outros.fonte
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
salva 20 bytes.n%100
? E sen>100
?Julia, 70 bytes
fonte
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Você pode salvar 5 bytes com isso. Experimente online!Ohm v2 , 16 bytes
Experimente online!
fonte
Pip , 18 bytes
Algoritmo inspirado na resposta de Emigna . Experimente online!
Como funciona
fonte
JavaScript REPL (ES5),
6059 bytesfonte
Haskell , 75 bytes
Experimente online!
Explicação:
Gostaria de saber se a parte "termina em
n
" pode ser reduzida. Eu também tenteishow n`elem`scanr(:)""(show x)
, mas é mais longo.fonte
Ruby ,
65 63 5453 bytesExperimente online!
fonte
Pitão ,
2221 bytesExperimente aqui!
fonte
Haskell , 75 bytes
Experimente online!
fonte
PowerShell , 84 bytes
Experimente online!
Construção simples, mas comandos longos. O tempo limite é excedido no TIO para
n=100
, mas se definirmos explicitamentei
para fechar, ele será exibido corretamente.Este é apenas um
for
loop simples que continua enquanto qualquer uma das condições for verdadeira. As três condições são 1)$i%$n
, ou seja, temos um restante; 2)$i-notmatch"$n$"
, ou seja, não regex corresponde ao último par de dígitos; e 3)([char[]]"$i"-join'+'|iex)-$n
, ou seja, os dígitos somados não são iguais a$n
(aqui verificado por subtração simples, pois valores diferentes de zero são verdadeiros). Dentro do loop, estamos simplesmente incrementando$i
.Assim, se não tivermos um restante, a regex corresponde e os números são iguais, todas as três condições são
$false
e saímos do loop. Como resultado, podemos apenas deixar$i
o pipeline e a produção está implícita.fonte
PHP, 73 + 1 bytes
Corra como cano com
-R
.laços
$i
através de múltiplos de<input>
atésum_of_digits-<input>
etail_of_i-$n
são falsas; depois imprimei
.fonte
m4, 210 bytes
Define uma macro
f
que calcula a resposta. É um pouco lento - inutilizável -, mas prometo que funciona.Eu pensei que m4 seria bom porque trata números inteiros como seqüências de caracteres por padrão, mas isso é muito ruim.
fonte
Scala, 120 bytes
Isso funciona até
n = 70
, após o qual os números excedem. Para um caractere extra, oInt
pode mudar para aLong
e permitir que os valoresn > 100
sejam calculados.Aqui está a versão não-gasta, um pouco mais longa:
fonte
R , 115 bytes
Experimente online!
Terrível função R. Incrementa
F
(começa em0
)n
até que seja encontrado um valor que satisfaça as propriedades necessárias, que ele retornará. O uso deany
em umadouble
expressão envia um aviso para cada iteração do loop, mas não afeta a correção.O tempo limite é excedido no TIO para entradas grandes o suficiente (n = 55 ou superior), mas deve calcular corretamente a solução, com tempo / espaço suficiente.
fonte
Perl 5,
4644 + 1 (-p) = 45 bytes2 bytes salvos graças ao Xcali, não conseguiram encontrar melhor
primeira resposta
Experimente online
fonte
Geléia ,
2221 bytesExperimente online!
Editar: compactado em uma única linha
Explicação
Levei muitas horas para escrever porque estou aprendendo Jelly, mas agora que terminei, estou muito satisfeito. Durante muito tempo, não percebi que precisava
¤
e simplesmente não consegui fazê-lo funcionar. Olhar para [este] [1] código bem explicado me ajudou a fechar o acordo. Muitas outras respostas da Jelly no PPCG também me guiaram.fonte
Javascript, 224 bytes
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Un-golf:Uso: 1. getNumber (12) 2. getNumber (13) 3. ....
fonte
getNumber
ousumDigits
.J ,
3733 bytesExperimente online!
Anexar o contador de iteração é ~ 5 vezes mais rápido, mas 5 bytes mais:
Experimente online!
Incrementando 100, 27 bytes :
Experimente online!
fonte
Python 2 , 70 bytes
Experimente online!
fonte