Znajdź najmniejszą liczbę większą niż wejście, którego suma cyfrowa jest wejściem

28

„Suma cyfrowa” odnosi się do sumy wszystkich cyfr w liczbie.

Na przykład cyfrowa suma 1324to 10, ponieważ 1+3+2+4 = 10.

Wyzwanie polega na napisaniu programu / funkcji do obliczenia najmniejszej liczby większej niż wejście, którego suma cyfrowa jest wejściem.

Przykład z instrukcją

Jako przykład weź liczbę 9jako dane wejściowe:

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

Prawidłowy wynik będzie najmniejszą liczbą powyżej, czyli 18.

Okular

Należy zauważyć, że 9nie jest to poprawny wynik dla tego przykładu, ponieważ liczba odwrócona musi być większa niż liczba oryginalna.

Zauważ, że dane wejściowe będą dodatnie.

Przypadki testowe:

 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)

Referencje:

To jest OEIS A161561 .

Edycja: Dodano dodatkową walizkę testową (18)

Podziękowania dla Martina Endera za fragment tabeli wyników

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
źródło
11
Ten tytuł spowodował ból mojego mózgu.
Fatalize

Odpowiedzi:

4

05AB1E, 19 17 8 bajtów

Kod:

[>DSO¹Q#

Wyjaśnił:

[            # 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

Wypróbuj online

Edycja: Zapisano 9 bajtów dzięki @Adnan

Emigna
źródło
4
SOjest krótszym sposobem uzyskania sumy cyfr (zamiast J`)O). Ponadto bez przypisywania zmiennych możesz to zrobić [>DSO¹Q#:).
Adnan
2
@Adnan. Miły! Całkowicie tęskniłem za S. Powinienem był zrozumieć, że nie potrzebowałem zmiennych.
Emigna
14

Python 2, 33 bajty

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

Bezpośredni wyraz. Tworzy ciąg liczbowy z 9 na końcu, a resztą na początku. Z wyjątkiem, dla jednocyfrowych n, daje n+9.

Niektóre wyjścia mają wiodące zera ( 099dla 18).

xnor
źródło
7

Retina , 39 31 bajtów

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

Pobiera dane wejściowe jednoargumentowe .

Wypróbuj online! (Pierwsze dwa wiersze pozwalają na uruchomienie kilku przypadków testowych jednocześnie i dla wygody konwertuje z dziesiętnego na jednoargumentowy).

To tak naprawdę nie wyszukuje wyniku liniowo, ale oblicza go jawnie:

  • Jeżeli sygnał wejściowy njest większy niż 9, zastąpić je n % 9następnie n / 9(podłogą) dziewiątkami.
  • W przeciwnym razie zamieniamy go na n + 9.

Używając !(lub czegokolwiek innego, co nie jest 1) jako jednoznacznej cyfry, mogę zapisać jeszcze jeden bajt, stosując następujące podejście:

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

Ale myślę, że ten format wejściowy jest trochę rozciągnięty.

Martin Ender
źródło
Więc Retina nie zezwala na wprowadzanie liczb całkowitych lub po prostu nie obsługuje arytmetyki liczb całkowitych?
levanth
@levanth W Retinie nie ma wcale arytmetyki - cały język opiera się na przetwarzaniu ciągów za pomocą wyrażeń regularnych, więc cała arytmetyka jest zwykle wykonywana na reprezentacjach jednoargumentowych. Siatkówka może pobierać dziesiętne liczby całkowite i konwertować je najpierw na jednoargumentowe, ale to kosztuje 6 dodatkowych bajtów, a nasze zasady zezwalają na jednokierunkowe wprowadzanie danych, chyba że wyzwanie określa dziesiętny. (Jeśli wolisz, aby wszystkie odpowiedzi pobierały dane dziesiętne, możesz to powiedzieć w specyfikacji, a ja zaktualizuję swoją odpowiedź.)
Martin Ender
nie nie, wszystko w porządku ^^ Byłem ciekawy
pojedynczego
6

Pyth , 8 bajtów

fqQsjT;h

Zestaw testowy.

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
Leaky Nun
źródło
6

Java 7, 68 61 bajtów

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

Robi mniej więcej to samo, co wiele innych odpowiedzi tutaj. Chciał pokazać podejście Java bez korzystania z manipulacji ciągami i pętli.

Dzięki FryAmTheEggman za przypomnienie mi, że jestem głupi;)

Geobity
źródło
Przynajmniej wygrałeś SQL?
Rɪᴋᴇʀ
Meh, tylko dwa razy większy niż większość odpowiedzi w python / ruby, więc nie czuję się teraz tak źle dla Javy. Byłoby miło pokonać C: P
Geobits
: / Ups, mam to z mojego bloku zajęć. Muszę być zardzewiały.
Geobits
@Geobits To prawdopodobnie pokonałoby C--.
gcampbell
@Fry Całkowicie zapomniałem o tej sztuczce. Dzięki, że przynajmniej wyprzedziłem C;)
Geobits
3

MATL , 10 9 bajtów

`QtV!UsG-

Wypróbuj online!

Wyjaśnienie

`        % 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
źródło
1
Sprytne użycie V!U+1 ode mnie. To powinno znaleźć się na naszej liście idiomów MATL.
Suever
@ Suver Tak, przyzwyczaja się dość często
Luis Mendo
3

JavaScript (ES7), 32 bajty

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

38 bajtów jako ES6:

n=>parseFloat(n%9+1+'e'+n/9)-(n>9||-8)
Neil
źródło
3

Python 3, 128 94 84 74 bajtów

Bez wyjścia, bezpośrednie podejście, początkujący kodegolfer;)

def r(n):
 m=n
 while 1:
  m+=1
  if sum(map(int,str(m)))==n:return(m)
ShadowFlame
źródło
1
Na początek istnieje wiele miejsc, które można usunąć. Na przykład przed / po = + ().
Emigna
1
Ponadto można wymienić print(m)z return m(nie zapisuje żadnych bajtów ale nie trzeba drukować w samej funkcji). Nadal możesz wydrukować return funkcji wyjściowej, print(r(n))aby przetestować swoją funkcję
levanth
1
Możesz także usunąć wiele nowych linii; m=n+1;f=1orazif s==n:f=0
Blue
1
Zamieniając print na return, możesz to zrobić bezpośrednio w instrukcji if i usunąć f, a także instrukcję else.
Emigna
2
Nadal możesz usunąć f i po prostu użyć podczas 1: a także usunąć spację między int (c) a for
Emigna
2

Właściwie 17 bajtów

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

Wypróbuj online!

Wyjaśnienie:

╗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
źródło
Ta odpowiedź jest świetna, ponieważ jest zalotna ( ;))
pozew Fund Moniki
2

C 73 65 bajtów

Makro z funkcją pomocnika.

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

eFunkcja po prostu wylicza moce dziesięciu, a Fmakro wykorzystuje tę samą metodę rozwiązywania jak to rubin , a tym python odpowiedź. niestety, jest dłuższy niż mniej więcej tyle samo, ile obie odpowiedzi razem wzięte. Ale to pierwsza odpowiedź C.

(8 bajtów zaoszczędzonych dzięki sztuczce Lynna w usuwaniu int).

MegaTom
źródło
Możesz usunąć oba wystąpienia int, oszczędzając 8 bajtów.
Lynn
2

Brachylog , 8 bajtów (niekonkurencyjny)

<.=:ef+?

= został zmodyfikowany po opublikowaniu tego wyzwania, aby działało teraz na domenach nieskończonych, co ma miejsce w tym przypadku.

Wyjaśnienie

<.       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

Spowoduje to powrót =do momentu, aż wartość Output sprawi, że cały predykat będzie prawdziwy.

Fatalizować
źródło
2

TSQL (sqlserver 2012), 107 99 bajtów

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

Wypróbuj online!

t-clausen.dk
źródło
1
Łał! Nie spodziewałem się tego!
levanth
1

Python 2, 39 bajtów

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

Czysta arytmetyka liczb całkowitych.

Pełny program z wyjściem

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))

Wydajność:

11
17
39
79
89
99
699
5999
Leaky Nun
źródło
Podoba mi się sposób, w jaki ten preparat unika wiodącego zera.
Neil
@Neil ten drugi może tego uniknąć, używająceval
Blue
1

PowerShell v2 +, 62 bajty

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

Pobiera dane wejściowe, $na następnie wykonuje forpętlę. Inicjalizujemy pętlę, ustawiając nasz numer docelowy $a, na jeden większy niż $n(ponieważ musi być większy, a to zapewnia 1..9prawidłowe działanie). Każdą pętlę zwiększamy $a++. Nic nie dzieje się w odpowiedniej pętli, ale warunek jest tam, gdzie dzieje się logika programu. Jesteśmy dosłownie biorąc numer docelowy jako ciąg, rzucając go jako char-tablicy, -joining tablicę z +czym rurociągów go iex(podobnie jak eval). Sprawdzamy, czy jest to nasza liczba wejściowa, czy nie, i odpowiednio zapętlamy. Po wyjściu z pętli dotarliśmy do miejsca, w którym nasza liczba docelowa jest sumą cyfr równą naszej liczbie wejściowej, więc $ajest umieszczana w potoku i dane wyjściowe są niejawne.


Dla porównania, oto „konstruuj ciąg z odpowiednią liczbą 9”, który zrobili inni ludzie, przy 67 bajtach

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

lub metodą „czystej arytmetyki liczb całkowitych”, którą zrobili inni ludzie, przy 70 bajtach

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

Żaden z nich nie jest krótszy, ale oba są bardziej interesujące.

AdmBorkBork
źródło
Możesz zapisać 3 bajty:param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
mazzy
1

Pyke, 9 8 7 bajtów, niekonkurujące - używa nowszej wersji

.fhsq)h

Wypróbuj tutaj!

.f      - first where true:
  h     - n+1
   sq    - digital_root(^) == input()
      h - that number +1
niebieski
źródło
Przetestowane ponownie, twoje rozwiązanie nie zapewnia poprawnej wydajności dla sygnałów wejściowych od 1 do 8
levanth
Chyba to zepsułem ... Działa z wyjątkiem numeru 1. A właściwie dlaczego się Missing arg to Equals, evaling inputpojawia? Mam na myśli, że podam mu numer wejściowy
levanth
@levanth Dzieje się tak, ponieważ domyślnie w interfejsie internetowym są włączone ostrzeżenia. Właśnie kodowałem sposób, aby to wyłączyć (jak 10 minut temu). Jeśli chodzi o to, dlaczego to nie zadziałało dla 1, sprawdzałem, czy liczba jest większa niż 10 i czy tak dalej.
Blue
1

JavaScript (ES2015), 45 39 33 bajty

Zaoszczędziłem kolejne 6 bajtów dzięki @Conor O'Brien i @Shaun H.Myślę
, że zostawię go takim, jakim jest, ponieważ ta wersja różni się od odpowiedzi @ Neila przy użyciu String.repeat().

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

Poprzednia wersja (zapisano 6 bajtów dzięki @Qwertiy):

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

Pierwsza wersja:

f=v=>+(v/9>1?v%9+'9'.repeat(~~(v/9)):'1'+v-1)
Leibrug
źródło
1
~~(v/9)=> v/9|0, '1'+v-1=>v+9
Qwertiy
@Qwertiy Dziękuję bardzo. Muszę dowiedzieć się więcej o operatorach bitowych. Jeśli chodzi o drugą zmianę, wygląda na to, że nadmiernie skomplikowałem sprawę v <= 9. Pomyślę, czy mogę zwrócić wszystkie wartości liczbowe, co może być kolejnym oszczędzaniem bajtów (no .repeat () i zawijaniem zwracanej wartości w + ()).
Leibrug
Nie musisz nazywać tej funkcji zgodnie z naszymi zasadami
Conor O'Brien
1
v>9jest o 2 bajty krótszy, string.repeatwprowadzi |0niepotrzebną wartość dziesiętną
Shaun H
Różni się także od mojej odpowiedzi, **oczywiście nie używając .
Neil
1

Lua, 52 bajty

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

Przeznaczony do zapisania w pliku i uruchomienia za pomocą interpretera Lua, np lua <file> <input number>

Możesz także spróbować tutaj: https://repl.it/CXom/1

(Przy repl.it numer wejściowy jest zakodowany na stałe dla ułatwienia testowania)

PiGuy
źródło
Co robi „... + 0” ... Czy rzutuje dane wejściowe na liczbę całkowitą?
Yytsi
1
Tak, do pewnej liczby (Lua przed 5.3 używał tylko dubletów, takich jak JavaScript). Lua automatycznie konwertuje ciągi na liczby w wyrażeniach, ale nie porównania. Aby więc n>9działać poprawnie, należy najpierw zmusić go do liczby.
PiGuy,
+1! Widzę. Więc ...+0>9by działało?
Yytsi
1
Tak! Byłoby :)
PiGuy
1

Rakieta 70 znaków, 71 bajtów

Ten sam algorytm jak większość innych. Bardzo smutne, że nie mam domyślnie% dla modulo lub ** dla expt, lub dzielenia liczb całkowitych, w przeciwnym razie mogłoby to być znacznie krótsze i mógłbym przerobić C i Javę. Nadal jednak kocham ten język

(λ(x)(if(> x 9)(-(*(+(modulo x 9)1)(expt 10(floor(/ x 9))))1)(+ x 9)))
kronicmage
źródło
1

Sześciokąt , 40 31 30 bajtów

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

Lub, jeśli wolisz, aby Twój kod był trochę mniej liniowy i bardziej wielokątny:

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

Wypróbuj online!

Dzięki @FryAmTheEggman za kilka pomysłów i inspiracji: o)

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

Wersja poprzednia: <><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\

Sok
źródło
1
To wydaje się działać? Nadal wygląda na golfa.
FryAmTheEggman
@FryAmTheEggman Dobra robota! 2 minuty po opublikowaniu tego pomyślałem o znacznie lepszym sposobie zrobienia, cóż, prawie wszystkiego. Prawdopodobnie wizja tunelu? Pracuję nad poprawioną wersją.
Sok
Dzięki :) Po prostu FYI często rozmawiają o Hexagony w ezoterycznym pokoju języków programowania . Dołącz, jeśli chcesz :)
FryAmTheEggman
1
Udało mu się to zrobić trochę bardziej: hexagony.tryitonline.net/…
FryAmTheEggman
1

Perl 6 ,  38   29 bajtów

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

(najwyraźniej bezpośrednie podejście jest krótsze)

Wyjaśnienie:

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

Test:

#! /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
źródło
1

Java 10, 114 62 bajty

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

Wypróbuj online.

EDYCJA: 130 73 bajtów bez wiodących zer (dzięki @ levanth` ):

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

Wypróbuj online.

Wyjaśnienie:

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
źródło
1
Jeśli ktoś jest zainteresowany: Rozwiązaniem byłoby siedem bajtów dłużej, należy wymienić String c(int n){return""+(n>9?(n%9)+s(n):n+9);}zint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
levanth
@levanth Zredagowałem to. Btw, zapomniałeś ""+wint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Kevin Cruijssen
1

Rubinowy, 33 bajty

Jest to wersja arytmetyczna, która akurat jest taka sama jak odpowiedź python xnora. Jest to anonimowa funkcja, która przyjmuje i zwraca wartość int.

->n{n<10?n+9:(1+n%9)*10**(n/9)-1}
MegaTom
źródło
Nie znam tak dużo ruby, ale czy -> na początku jest anonimową funkcją?
levanth
@levanth: tak.
Wyjaśnię
Nie działa dla n = 9
GB,
@ GB dziękuję za zwrócenie na to uwagi. Zostało to naprawione.
MegaTom,
1

MathGolf , 8 7 bajtów

Æ)_Σk=▼

Wypróbuj online!

Tak, domniemane wejście.

Wyjaśnienie:

          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
Jo King
źródło
Wiem, że jest to starsza odpowiedź, ale możesz rozwiązać ją teraz w 7 bajtach, stosując niejawne dane wejściowe (po prostu pomiń pierwszy k).
maxb
0

Rubinowy, 38 bajtów

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

Ta odpowiedź zwraca ciąg znaków lub liczbę int w zależności od wielkości wejściowej. Jest to rozwiązanie rekurencyjne, które prosi o rozwiązanie za 9 mniej niż dodaje „9” na końcu.


Rubin, 39 bajtów

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

Dla jeszcze jednego bajtu ta odpowiedź zawsze zwraca liczbę całkowitą. ten sam algorytm jak powyżej, ale z liczbami.

MegaTom
źródło
0

C, 80 bajtów

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;}

Ungolfed spróbuj 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
źródło
0

PHP, 77 znaków

$n=$argv[1];$m=$n+1;while(1){if(array_sum(str_split($m))==$n)die("$m");$m++;}
kuldeep.kamboj
źródło
0

Oracle SQL 11.2, 165 bajtów

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;

Nie grał w golfa

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
źródło
0

Python 3 55 bajtów

Przyjmuje dwa identyczne argumenty

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

tzn. aby to nazwać, użyłbyś f (x, x)

Jerzy
źródło
0

PowerShell, 54 bajty

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

Skrypt testowy:

$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"
}

Wydajność:

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

  • jeśli [$_-gt9]zwraca pierwszą cyfrę i ogon
    • pierwsza cyfra to różnica między $ _ a sumą 9 ( $_%9)
    • ogon to kilka dziewiątek - '9'*(($_-$_%9)/9))
    • na koniec konwertuje ciąg wyniku na liczbę, aby usunąć wiodące 0
  • inaczej powraca ($_+9)
mazzy
źródło