Encontre o menor número maior que a entrada cuja soma digital é a entrada

28

"Soma digital" refere-se à soma de todos os dígitos de um número.

Por exemplo, a soma digital de 1324é 10, porque 1+3+2+4 = 10.

O desafio é escrever um programa / função para calcular o menor número maior que a entrada cuja soma digital é a entrada.

Exemplo com explicação passo a passo

Como exemplo, considere o número 9como entrada:

9 = 1+8 -> 18
9 = 2+7 -> 27
9 = 3+6 -> 36
...
9 = 8+1 -> 81
9 = 9+0 -> 90

A saída válida seria o menor número acima, que é 18.

Especificações

Observe que 9não é a saída válida para este exemplo, porque o número revertido deve ser maior que o número original.

Observe que a entrada será positiva.

Casos de teste:

 2 => 11      (2 = 1 + 1)
 8 => 17      (8 = 1 + 7)
12 => 39     (12 = 3 + 9)
16 => 79     (16 = 7 + 9)
18 => 99     (18 = 9 + 9)
24 => 699    (24 = 6 + 9 + 9)
32 => 5999   (32 = 5 + 9 + 9 + 9)

Referências:

Este é o OEIS A161561 .

Editar: adicionada uma caixa de teste adicional (18)

Agradecimentos a Martin Ender pelo snippet da tabela de classificação

var QUESTION_ID=81047,OVERRIDE_USER=31373;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>

levanth
fonte
11
Este título fez meu cérebro doer.
Fatalize

Respostas:

4

05AB1E, 19 17 8 bytes

Código:

[>DSO¹Q#

Explicado:

[            # start infinite loop
 >           # increase loop variable, will initially be input
  DSO        # make a copy and sum the digits
     ¹Q#     # if it equals the input, break
             # else return to start of loop
             # implicitly print

Experimente online

Editar: salvou 9 bytes graças a @Adnan

Emigna
fonte
4
SOé uma maneira mais curta de obter a soma dos dígitos (em vez de J`)O). Além disso, sem atribuição de variável, você pode fazer [>DSO¹Q#:).
Adnan
2
@Adnan. Agradável! Senti muita falta de S. Deveria ter percebido que não precisava das variáveis.
Emigna
14

Python 2, 33 bytes

lambda n:[n+9,`n%9`+n/9*'9'][n>9]

Uma expressão direta. Cria uma sequência numérica com 9 no final e o restante no início. Exceto, para um dígito n, dá n+9.

Algumas saídas têm zeros à esquerda ( 099para 18).

xnor
fonte
7

Retina , 39 31 bytes

r`1{1,9}
$.&
T`d`_d`^.$
^.$
1$&

Recebe entrada em unário .

Experimente online! (As duas primeiras linhas permitem executar vários casos de teste ao mesmo tempo e converte de decimal em unário por conveniência.)

Na verdade, isso não procura o resultado linearmente, mas o calcula explicitamente:

  • Se a entrada nfor maior que 9, substituí-la por n % 9seguida por n / 9nove (no chão).
  • Caso contrário, substituí-lo por n + 9.

Usando !(ou qualquer outra coisa que não seja 1) como o dígito unário, posso salvar mais um byte com a seguinte abordagem:

^!(?!!{9})
1
r`!{0,9}
$.&
0\B

Mas esse formato de entrada é um pouco exagerado, eu acho.

Martin Ender
fonte
Então o Retina não permite entrada de número inteiro ou simplesmente não pode lidar com aritmética de número inteiro?
levanth
@levanth Não há aritmética na Retina - todo o idioma é baseado no processamento de strings por meio de expressões regulares, portanto toda a aritmética é geralmente feita em representações unárias. A retina pode pegar a entrada inteira decimal e convertê-la em unária primeiro, mas isso custa 6 bytes adicionais, e nossas políticas permitem entrada unária, a menos que o desafio especifique decimal. (Se você preferir exigir que todas as respostas para receber a entrada decimal, fique à vontade para dizer isso na especificação e eu vou atualizar a minha resposta.)
Martin Ender
não, não tem problema ^^ Eu estava apenas curioso sobre a entrada unário
levanth
6

Pitão , 8 bytes

fqQsjT;h

Suíte de teste.

fqQsjT;h

f      h first number T from (input+1) onward where:
 qQ          the input is equal to
   s         the sum of
    jT;      the base-10 representation of T
Freira Furada
fonte
6

Java 7, 68 61 bytes

int f(int n){return n>9?-~(n%9)*(int)Math.pow(10,n/9)-1:n+9;}

Faz aproximadamente a mesma coisa que muitas das outras respostas aqui. Queria mostrar a abordagem Java sem usar manipulação e loops de string.

Agradeço a FryAmTheEggman por me lembrar que sou burra;)

Geobits
fonte
Pelo menos você superou o SQL?
Rɪᴋᴇʀ
Meh, apenas o dobro do tamanho da maioria das respostas em python / ruby ​​aqui, então não me sinto tão mal pelo Java agora. Teria sido bom derrotar C: P
Geobits 2/16
: / Opa, peguei isso no meu bloco de aula. Eu devo estar enferrujado com isso.
Geobits
@ Geobits Provavelmente venceria C--.
gcampbell
@ Fry Esqueci completamente esse truque. Obrigado, isso me colocou à frente de C, pelo menos;)
Geobits
3

MATL , 10 9 bytes

`QtV!UsG-

Experimente online!

Explicação

`        % Do...while
  Q      %   Add 1. Takes input implicitly the first time
  t      %   Duplicate
  V!Us   %   To string, transpose, to number, sum. Gives sum of digits
  G-     %   Subtract input. If 0, the loop ends and the stack is implicitly displayed
Luis Mendo
fonte
1
Uso inteligente de V!U+1 de mim. Isso deve constar em nossa lista de idiomas MATL.
Suever
@Suever Sim, isso é usado muitas vezes
Luis Mendo
3

JavaScript (ES7), 32 bytes

n=>(n%9+1)*10**(n/9|0)-(n>9||-8)

38 bytes como ES6:

n=>parseFloat(n%9+1+'e'+n/9)-(n>9||-8)
Neil
fonte
3

Python 3, 128 94 84 74 bytes

Sem saída, abordagem direta, codegolfer iniciante;)

def r(n):
 m=n
 while 1:
  m+=1
  if sum(map(int,str(m)))==n:return(m)
ShadowFlame
fonte
1
Para iniciantes, há muitos espaços que podem ser removidos. Antes / depois = + () por exemplo.
Emigna 01/06
1
Além disso, você pode substituí-lo print(m)por return m(não salva bytes, mas não precisa imprimir na própria função). Você ainda pode imprimir a função de retorno de saída com print(r(n))a testar a sua função
levanth
1
Você também pode remover muitas novas linhas; m=n+1;f=1eif s==n:f=0
Blue
1
Ao substituir a impressão por devolução, você pode fazê-lo diretamente na instrução if e remover f, bem como na instrução else.
Emigna
2
Você ainda pode remover f e usar apenas enquanto 1: e também remover o espaço entre int (c) e para
Emigna
2

Na verdade, 17 bytes

╗1`;$♂≈Σ╜;)=)>*`╓

Experimente online!

Explicação:

╗1`;$♂≈Σ╜;)=)>*`╓
╗                  save input to reg0
 1`;$♂≈Σ╜;)=)>*`╓  first integer n (>= 0) where:
   ;$♂≈Σ╜;)=         the base-10 digital sum equals the input and
            )>*      is greater than the input
Mego
fonte
Esta resposta é grande, porque é sedutor ( ;))
Ação do Fundo Monica
2

C 73 65 bytes

Uma macro com uma função auxiliar.

e(y){return y?10*e(y-1):1;}
#define F(n) n<9?n+9:(1+n%9)*e(n/9)-1

A efunção apenas calcula potências de dez, e a Fmacro usa o mesmo método de solução que esse ruby e essa resposta python . infelizmente, é mais longo que o mesmo comprimento das duas respostas. Mas é a primeira resposta C.

(8 bytes salvos pelo truque de remoção de Lynn int.)

MegaTom
fonte
Você pode eliminar as duas ocorrências de int, economizando 8 bytes.
Lynn
2

Brachylog , 8 bytes (Não concorrente)

<.=:ef+?

= foi modificado após o lançamento deste desafio, para que agora funcione em domínios possivelmente infinitos, como é o caso aqui.

Explicação

<.       Output > Input
  =      Label the Output (i.e. unify it with an integer)
   :ef   Get the list of digits of the Output
      +? Input is the sum of all those digits

Isso voltará =até que o valor de Output torne todo esse predicado verdadeiro.

Fatalizar
fonte
2

TSQL (sqlserver 2012), 107 99 bytes

DECLARE @ INT = 32

,@2 char(99)WHILE @>0SELECT
@2=concat(x,@2),@-=x FROM(SELECT IIF(@>9,9,IIF(@2>0,@,@-1))x)y PRINT @2

Experimente online!

t-clausen.dk
fonte
1
Uau! Eu não esperava isso!
levanth
1

Python 2, 39 bytes

lambda n:[n+9,(1+n%9)*10**(n/9)-1][n>9]

Aritmético inteiro puro.

Programa completo com saída

f=lambda n:[n+9,(1+n%9)*10**(n/9)-1][n>9]

print(f(2))
print(f(8))
print(f(12))
print(f(16))
print(f(17))
print(f(18))
print(f(24))
print(f(32))

Saída:

11
17
39
79
89
99
699
5999
Freira Furada
fonte
Gosto da maneira como essa formulação evita o zero inicial.
Neil
@Neil o outro poderia evitá-lo usandoeval
Azul
1

PowerShell v2 +, 62 bytes

param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-ne$n;$a++){}$a

Recebe entrada $ne executa um forloop. Inicializamos o loop definindo nosso número de destino,, $apara ser um número maior que $n(já que ele precisa ser maior, além disso, garante que 1..9funcione corretamente). Cada loop incrementamos $a++. Nada acontece no loop adequadamente, mas o condicional é o local onde a lógica do programa acontece. Estamos literalmente pegando o número de destino como uma string, lançando-o como um array de caracteres, -joininserindo o array em um +pipeline iex(semelhante a eval). Testamos se é igual ao nosso número de entrada ou não e continuamos fazendo o loop de acordo. Depois que saímos do loop, chegamos ao ponto em que nosso número de destino é soma de dígitos igual ao nosso número de entrada, então $aé colocado no pipeline e a saída é implícita.


Para referência, aqui está o método "construir uma string com o número apropriado de 9" que outras pessoas fizeram, em 67 bytes

param($n)(($n+9),(+(""+($n%9)+'9'*(($n/9)-replace'\..*'))))[$n-gt9]

ou o método "aritmética de número inteiro puro" que outras pessoas fizeram, a 70 bytes

param($n)(($n+9),("(1+$n%9)*1e$(($n/9)-replace'\..*')-1"|iex))[$n-gt9]

Nenhum dos quais é mais curto, mas ambos são mais interessantes.

AdmBorkBork
fonte
Você pode salvar 3 bytes:param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
mazzy
1

Pyke, 9 8 7 bytes, não concorrente - usa a versão mais recente

.fhsq)h

Experimente aqui!

.f      - first where true:
  h     - n+1
   sq    - digital_root(^) == input()
      h - that number +1
Azul
fonte
Testado novamente, sua solução não dá a saída correta para as entradas de 1 a 8
levanth
Acho que quebrei ... Funciona, exceto o número 1. Btw por que Missing arg to Equals, evaling inputsurge? Quero dizer, dou-lhe um número de entrada
levanth 1/16/16
@levanth Isso acontece porque, por padrão, a interface da web tem avisos ativados. Acabei de codificar uma maneira de desativar isso (como 10 minutos atrás). Quanto ao motivo pelo qual não funcionou para 1, eu estava verificando se o número era maior que 10 e se continuava.
Azul
1

JavaScript (ES2015), 45 39. 33 bytes

Salvou outros 6 bytes graças a @Conor O'Brien e @Shaun H.
Acho que vou deixar como está, porque esta versão difere da resposta de @ Neil usando String.repeat().

v=>+(v>9?v%9+'9'.repeat(v/9):v+9)

Versão anterior (salva 6 bytes graças a @Qwertiy):

f=v=>+(v/9>1?v%9+'9'.repeat(v/9|0):v+9)

Primeira versão:

f=v=>+(v/9>1?v%9+'9'.repeat(~~(v/9)):'1'+v-1)
Leibrug
fonte
1
~~(v/9)=> v/9|0, '1'+v-1=>v+9
Qwertiy
@ Qwertiy Muito obrigado. Preciso aprender mais sobre operadores bit a bit. Sobre a segunda alteração, parece que eu compliquei demais o caso v <= 9. Penso que se eu puder retornar todos os valores numéricos, que poderiam ser outro economizador de bytes (sem .repeat () e agrupar o valor de retorno em + ()).
precisa saber é o seguinte
Você não precisa nomear a função de acordo com nossas regras
Conor O'Brien
1
v>92 bytes é mais curto, string.repeatandar vontade um valor decimal não |0necessário
Shaun H
Também difere da minha resposta por não usar, é **claro.
Neil
1

Lua, 52 bytes

n=...+0
print(n>9 and(n%9)..string.rep(9,n/9)or n+9)

Era para ser salvo em um arquivo e executado com o intérprete Lua, por exemplo lua <file> <input number>

Você também pode tentar aqui: https://repl.it/CXom/1

(No repl.it, o número de entrada é codificado para facilitar o teste)

PiGuy
fonte
O que o '... + 0' faz ...? Ele lança a entrada para um número inteiro?
Yytsi
1
Sim, para um número (Lua antes da 5.3 só usava dobros, como JavaScript). Lua converterá automaticamente seqüências de caracteres em números em expressões, mas não em comparações. Portanto, para n>9funcionar corretamente, ele precisa ser coagido a um número primeiro.
PiGuy
+1! Entendo. Então ...+0>9funcionaria?
Yytsi
1
Sim! Seria :)
PiGuy
1

Raquete 70 caracteres, 71 bytes

Mesmo algoritmo que a maioria dos outros. Muito triste por não ter% para módulo, ou ** para expt, ou divisão inteira por padrão, caso contrário, isso poderia ser muito mais curto e eu poderia ter superado C e Java. Ainda amo o idioma

(λ(x)(if(> x 9)(-(*(+(modulo x 9)1)(expt 10(floor(/ x 9))))1)(+ x 9)))
kronicmage
fonte
1

Hexagonia , 40 31 30 bytes

<_:->.(.+><.'!.\@"9!%>!/{.}|.?

Ou, se você preferir que seu código seja um pouco menos linear e um pouco mais poligonal:

    < _ : -
   > . ( . +
  > < . ' ! .
 \ @ " 9 ! % >
  ! / { . } |
   . ? . . .
    . . . .

Experimente online!

Obrigado a @FryAmTheEggman por algumas idéias e inspiração: o)

Versão anterior: <.:->+_.!(..'!.\><9!%>@.{.}|.?"

Versão anterior: <><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\

Sok
fonte
1
Isso parece funcionar? Ainda parece jogável.
FryAmTheEggman 6/06/16
@FryAmTheEggman Nice work! Dois minutos depois de postar isso, pensei em uma maneira muito melhor de fazer, bem, praticamente tudo. Visão de túnel, provavelmente? Estou trabalhando em uma versão revisada.
Sok
Obrigado :) Apenas um pessoal da FYI costuma conversar sobre Hexagony na sala de linguagens de programação esotérica . Junte-se se você quiser :)
FryAmTheEggman
1
Conseguiu smoosh-lo em um pouco mais: hexagony.tryitonline.net/...
FryAmTheEggman
1

Perl 6 ,  38   29 bytes

{$_>9??(1+$_%9)*10**Int($_/9)-1!!$_+9}
{first *.comb.sum==$_,$_^..*}

(aparentemente a abordagem direta é mais curta)

Explicação:

{
  first
    *.comb.sum == $_, # lambda that does the check
    $_ ^.. *          # Range.new: $_, Inf, :excludes-min
}

Teste:

#! /usr/bin/env perl6

use v6.c;
use Test;

my @tests = (
   2 => 11,
   8 => 17,
   9 => 18,
  12 => 39,
  16 => 79,
  18 => 99,
  24 => 699,
  32 => 5999,
);

plan +@tests;

my &next-digital-sum = {first *.comb.sum==$_,$_^..*}

for @tests -> $_ ( :key($input), :value($expected) ) {
  is next-digital-sum($input), $expected, .gist;
}
1..8
ok 1 - 2 => 11
ok 2 - 8 => 17
ok 3 - 9 => 18
ok 4 - 12 => 39
ok 5 - 16 => 79
ok 6 - 18 => 99
ok 7 - 24 => 699
ok 8 - 32 => 5999
Brad Gilbert b2gills
fonte
1

Java 10, 114 62 bytes

n->{var r="";for(int i=0;i++<n/9;r+=9);return(n>9?n%9:n+9)+r;}

Experimente online.

EDIT: 130 73 bytes sem zeros à esquerda (Graças a @ levanth` ):

n->{var r="";for(int i=0;i++<n/9;r+=9);return new Long((n>9?n%9:n+9)+r);}

Experimente online.

Explicação:

n->                           // Method with integer parameter and long return-type
  var r="";                   //  Result-String, starting empty
  for(int i=0;i++<n/9;r+=9);  //  Append `n` integer-divided by 9 amount of 9's to `r`
  return new Long(            //  Cast String to number to remove any leading zeroes:
    (n>9?                     //   If the input `n` is 10 or larger
      n%9                     //    Use `n` modulo-9
     :                        //   Else (`n` is smaller than 10):
      n+9)                    //    Use `n+9`
    +r);}                     //   And append `r`
Kevin Cruijssen
fonte
1
Se alguém estiver interessado: A correção seria sete bytes mais, substitua String c(int n){return""+(n>9?(n%9)+s(n):n+9);}comint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
levanth
@levanth Eu editei-lo em Btw, você esqueceu o. ""+emint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Kevin Cruijssen
1

Ruby, 33 bytes

Esta é uma versão aritmética int que, por acaso, é igual à resposta python do xnor. É uma função anônima que recebe e retorna um int.

->n{n<10?n+9:(1+n%9)*10**(n/9)-1}
MegaTom
fonte
Não conheço muito o ruby, mas o -> no início é uma função anônima?
#
@levanth: sim. Vou esclarecer acima
MegaTom 1/16/16
Não funciona para n = 9
GB
@ GB obrigado por apontar isso. Agora está consertado.
MegaTom 20/09/19
1

MathGolf , 8 7 bytes

Æ)_Σk=▼

Experimente online!

Entrada implícita yay.

Explicação:

          Implicit input
 Æ     ▼  Do while false loop that pops the condition
  )       Increment top of stack
   _      Duplicate
    Σ     Get the digit sum
     k    Get input
      =   Is equal?
          Implicit output
Brincadeira
fonte
Eu sei que essa é uma resposta mais antiga, mas você pode resolvê-la em 7 bytes agora com entrada implícita (basta pular a primeira k).
maxb 27/09/18
0

Ruby, 38 bytes

f=->n{n<11?n+9:"#{n<19?n-9:f.(n-9)}9"}

Esta resposta retorna uma string ou int, dependendo do tamanho da entrada. É uma solução recursiva que pede uma solução para menos 9 e depois adiciona um "9" ao final.


Ruby, 39 bytes

f=->n{n<11?n+9:(n<19?n-9:f.(n-9))*10+9}

Para mais um byte, essa resposta sempre retorna um int. mesmo algoritmo acima, mas com números.

MegaTom
fonte
0

C, 80 bytes

i;s;g(j){s=0;for(;j;j/=10)s+=j%10;return s;}f(n){i=n;while(n-g(i))i++;return i;}

Tentativa sem golfe online

int g(int j)
{
    int s=0;
    for(;j;j/=10) s += j%10;
    return s;
}

int f(int n)
{
    int i=n;
    for(;n-g(i);i++);
    return i;
}
Khaled.K
fonte
0

PHP, 77 caracteres

$n=$argv[1];$m=$n+1;while(1){if(array_sum(str_split($m))==$n)die("$m");$m++;}
kuldeep.kamboj
fonte
0

Oracle SQL 11.2, 165 bytes

SELECT l FROM(SELECT LEVEL l,TO_NUMBER(XMLQUERY(REGEXP_REPLACE(LEVEL,'(\d)','+\1')RETURNING CONTENT)) s FROM DUAL CONNECT BY 1=1)WHERE s=:1 AND l!=s AND rownum=1;

Sem golfe

SELECT l   
FROM   (
         SELECT LEVEL l, -- Number to evaluate
                XMLQUERY( 
                          REGEXP_REPLACE(LEVEL,'(\d)','+\1')  -- Add a + in front of each digit 
                          RETURNING CONTENT
                        ).GETNUMBERVAL()s                     -- Evaluate le expression generated by the added + 
                FROM DUAL 
                CONNECT BY 1=1 -- Run forever            
       )
WHERE s=:1      -- The sum must be equal to the input
  AND l!=s      -- The sum must not be the input 
  AND rownum=1  -- Keep only the first result
Jeto
fonte
0

Python 3 55 bytes

Toma dois argumentos que são iguais

f=lambda a,b:a if sum(map(int,str(a)))==b else f(-~a,b)

ou seja, para chamá-lo, você usaria f (x, x)

George
fonte
0

Powershell, 54 bytes

$args|%{(($_+9),+(''+$_%9+'9'*(($_-$_%9)/9)))[$_-gt9]}

Script de teste:

$f = {

$args|%{(($_+9),+(''+$_%9+'9'*(($_-$_%9)/9)))[$_-gt9]}

}

@(
    ,(  1,  10   )
    ,(  2 , 11   )
    ,(  8 , 17   )
    ,(  9 , 18   )
    ,( 10,  19   )
    ,( 11,  29   )
    ,( 12 , 39   )
    ,( 16 , 79   )
    ,( 18 , 99   )
    ,( 19 , 199  )
    ,( 24 , 699  )
    ,( 27 , 999  )
    ,( 32 , 5999 )
    ,( 52 , 799999 )
    ,( 128, 299999999999999 )
) | % {
    $a,$e = $_
    $r = &$f $a
    "$($r-eq$e): $r"
}

Saída:

True: 1 : 10
True: 2 : 11
True: 8 : 17
True: 9 : 18
True: 10 : 19
True: 11 : 29
True: 12 : 39
True: 16 : 79
True: 18 : 99
True: 19 : 199
True: 24 : 699
True: 27 : 999
True: 32 : 5999
True: 52 : 799999
True: 128 : 299999999999999

Expalantion

  • se [$_-gt9]retorna um primeiro dígito e uma cauda
    • um primeiro dígito é a diferença entre $ _ e a soma de 9 ( $_%9)
    • um rabo é alguns noves - '9'*(($_-$_%9)/9))
    • finalmente, converte uma sequência de resultados em um número para remover o número 0 inicial
  • else retorna ($_+9)
confuso
fonte