디지털 합이 입력 인 입력보다 가장 작은 숫자 찾기


28

"디지털 합계"는 숫자의 모든 숫자의 합계를 나타냅니다.

예를 들면, 디지털 합 1324이다 10때문에 1+3+2+4 = 10.

문제는 디지털 합이 입력 인 입력보다 가장 작은 숫자를 계산하는 프로그램 / 기능을 작성하는 것입니다.

연습 예제

예를 들어, 숫자 9를 입력으로 사용하십시오.

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

유효한 출력은 위의 가장 작은 숫자 인입니다 18.

명세서

참고 9반전 된 번호가 원 전화 번호보다 커야하기 때문에, 본 실시 예에 대한 유효한 출력되지 않는다.

입력은 양수입니다.

테스트 사례 :

 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)

참고 문헌 :

이다 OEIS A161561 .

편집 : 추가 테스트 케이스 추가 (18)

리더 보드 스 니펫을 위한 Martin Ender 에게 감사합니다

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>


11
이 제목으로 인해 뇌가 아 hurt습니다.
치명적인

답변:


4

05AB1E, 19 17 8 바이트

암호:

[>DSO¹Q#

설명 :

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

온라인으로 사용해보십시오

편집 : @Adnan 덕분에 9 바이트가 절약되었습니다.


4
SO는 대신 자릿수를 얻는 더 짧은 방법 J`)O입니다. 또한 변수를 할당하지 않으면 [>DSO¹Q#:) 할 수 있습니다 .
Adnan

2
@Adnan. 좋은! 나는 S를 완전히 놓쳤다. 나는 변수가 필요 없다는 것을 깨달아야했다.
Emigna 2016 년

14

파이썬 2, 33 바이트

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

직접적인 표현. 끝에 9를, 나머지를 처음에 숫자 문자열로 만듭니다. 한 자리 숫자를 제외하고는을 n제공합니다 n+9.

일부 출력에는 앞에 0이 있습니다 ( 099for 18).


7

망막 , 39 31 바이트

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

단항으로 입력 받습니다.

온라인으로 사용해보십시오! (처음 두 줄은 여러 테스트 사례를 한 번에 실행할 수 있으며 편의상 10 진수에서 단항으로 변환합니다.)

실제로 결과를 선형으로 검색하지는 않지만 명시 적으로 계산합니다.

  • 입력이 있으면 n9보다 큰 우리로 대체 n % 9하였다 n / 9(내림) 화려.
  • 그렇지 않으면이를로 대체합니다 n + 9.

사용 !(또는 아닌 다른 것 1) 단항 자리에, 나는 다음과 같은 방법으로 한 번 더 바이트를 저장할 수 있습니다 :

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

그러나이 입력 형식은 약간의 확장입니다.


그래서 Retina는 Integer 입력을 허용하지 않거나 Integer 산술을 처리 할 수 ​​없습니까?
levanth

@levanth Retina에는 산술이 전혀 없습니다. 전체 언어는 정규식을 통한 문자열 처리를 기반으로하므로 모든 산술은 일반적으로 단항 표현으로 수행됩니다. Retina 십진 정수 입력을 가져 와서 먼저 단항으로 변환 할 수 있지만 6 바이트의 추가 비용이 소요되며, 챌린지에서 십진수를 지정하지 않으면 단항 입력이 허용됩니다. (소수점을 입력하기 위해 모든 답변을 요구하려면 사양에서 자유롭게 말하고 답변을 업데이트하겠습니다.)
Martin Ender

아니 아니 괜찮아 ^^ 나는 단항 입력에 대해 궁금했다
levanth


6

자바 7, 68 61 바이트

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

여기에있는 다른 많은 답변과 거의 똑같은 일을합니다. 문자열 조작 및 루프를 사용하지 않고 Java 방식을 보여주고 싶었습니다.

내가 바보라는 것을 상기시켜 준 FryAmTheEggman에게 감사합니다;)


최소한 SQL을 능가 했습니까?
Rɪᴋᴇʀ

Meh, 대부분의 python / ruby보다 두 배나 큰 응답이므로 지금은 Java에 너무 나쁘지 않습니다. 그래도 C를이기는 것이 좋았을 것입니다. : P
Geobits

: / 죄송합니다. 클래스 블록에서 가져 왔습니다. 나는 이것에 녹슬어 야한다.
Geobits

@Geobits 아마 C--를 이길 것입니다.
gcampbell 2016 년

@Fry 그 트릭을 완전히 잊었습니다. 고마워, 그것은 나를 C보다 앞서 뒀다;)
Geobits

3

MATL , 10 9 바이트

`QtV!UsG-

온라인으로 사용해보십시오!

설명

`        % 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

1
V!U나에게서 +1을 영리하게 사용했습니다 . MATL 관용구 목록에 들어가야합니다.
Suever

@Suever 네, 자주 사용됩니다
Luis Mendo

3

자바 스크립트 (ES7), 32 바이트

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

ES6으로 38 바이트 :

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

3

파이썬 3, 128 94 84 74 바이트

출력없이 직접 접근, 초보자 코드 골퍼;)

def r(n):
 m=n
 while 1:
  m+=1
  if sum(map(int,str(m)))==n:return(m)

1
우선, 많은 공간을 제거 할 수 있습니다. 예를 들어 전 / 후 = + ().
Emigna 2016 년

1
또한 당신은 대체 할 수 print(m)return m(모든 바이트를 저장하지 않습니다하지만 당신은 함수 자체에 인쇄 할 필요가 없습니다). 함수 print(r(n))를 테스트하기 위해 출력 함수 리턴을 계속 인쇄 할 수 있습니다.
levanth

1
줄 바꿈을 많이 제거 할 수도 있습니다. m=n+1;f=1if s==n:f=0
블루

1
인쇄를 반환으로 교체 할 경우 if 문에서 직접 인쇄하고 else 문뿐만 아니라 f도 제거 할 수 있습니다.
Emigna 2016 년

2
당신은 여전히 ​​f를 제거하고 단지 1 동안 사용하고 int (c)와 for 사이의 공간을 제거 할 수 있습니다
Emigna

2

실제로 17 바이트

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

온라인으로 사용해보십시오!

설명:

╗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

이 답변은 꼬리표 ( ;)) 이기 때문에 훌륭합니다
Fund Monica의 소송

2

C 73 65 바이트

도우미 기능이있는 매크로

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

e함수는 10의 멱수를 산출하고, F매크로 같은 해결 방법을 사용하여 이 루비이 파이썬 않음. 슬프게도, 그 것이다 이상 모두 그 답변을 합친 것과 같은 길이에 대해. 그러나 첫 번째 C 답변입니다.

(Lynn이 제거하는 트릭으로 8 바이트를 절약했습니다 int.)


을 모두 삭제 int하여 8 바이트를 절약 할 수 있습니다 .
Lynn

2

Brachylog , 8 바이트 (비경쟁)

<.=:ef+?

= 이 챌린지가 게시 된 후 수정되었으므로 이제는 무한 도메인에서 작동합니다.

설명

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

=Output 값이이 전체 술어를 true로 만들 때까지 역 추적 합니다.



1

파이썬 2, 39 바이트

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

순수한 정수 산술.

출력이 가능한 전체 프로그램

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

산출:

11
17
39
79
89
99
699
5999

나는이 공식이 선행 0을 피하는 방식을 좋아합니다.
Neil

@Neil 다른 사람은 다음을 사용하여 피할 수 있습니다.eval
Blue

1

PowerShell v2 +, 62 바이트

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

입력을받은 $n다음 for루프 를 실행합니다 . 우리는 목표 번호 $a를 1보다 크게 설정하여 루프를 초기화합니다 $n( 더 커야하기 때문에 1..9올바르게 작동 하기 때문에 ). 우리는 각각의 루프를 증가시킵니다 $a++. 루프에서 적절한 것은 발생하지 않지만 조건은 프로그램 논리가 발생하는 위치입니다. 우리는 문자 그대로 대상 번호를 문자열로 가져 와서 char-array로 캐스트 -join하고 배열과 함께 배열하고 (와 유사 ) +파이핑합니다 . 입력 번호와 같은지 테스트하고 그에 따라 계속 반복합니다. 루프를 종료하면 대상 번호가 입력 번호와 같은 숫자 합계에 도달하므로 파이프 라인에 배치되고 출력은 암시 적입니다.iexeval$a


참고로, 다음은 다른 사람들이 수행 한 "적절한 수의 9로 문자열 구성"방법입니다 ( 67 바이트).

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

또는 다른 사람들이 수행 한 "순수 정수 산술"방법 ( 70 바이트)

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

둘 다 짧지는 않지만 둘 다 더 흥미 롭습니다.


3 바이트를 절약 할 수 있습니다 :param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
mazzy

1

파이크, 9 8 7 바이트, 비경쟁-최신 버전 사용

.fhsq)h

여기 사용해보십시오!

.f      - first where true:
  h     - n+1
   sq    - digital_root(^) == input()
      h - that number +1

다시 테스트 한 결과, 솔루션은 입력 1 ~ 8에 대한 올바른 출력을 제공하지 않습니다
levanth

나는 그것을 깨뜨린 것 같아요 ... 숫자를 제외한 작품 1. 왜 Missing arg to Equals, evaling input그래? 나는 그것을 입력 번호를 알려 의미
levanth

@levanth 기본적으로 웹 인터페이스에 경고가 설정되어 있기 때문에 발생합니다. 방금 (10 분 전과 같이) 끄는 방법을 코딩했습니다. 왜 1에서 작동하지 않는지에 관해서는 숫자가 10보다 큰지 확인하고 계속 진행하고 있는지 확인했습니다.
Blue

1

자바 스크립트 (ES2015) 45 39 33 바이트

@Conor O'Brien과 @Shaun H 덕분에 6 바이트를 더 절약
했습니다.이 버전은 @Neil 의 답변과 다르기 때문에 그대로 두겠습니다 String.repeat().

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

이전 버전 (@Qwertiy 덕분에 6 바이트 절약) :

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

첫 번째 버전 :

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

1
~~(v/9)=> v/9|0, '1'+v-1=>v+9
Qwertiy 2016 년

@Qwertiy 대단히 감사합니다. 비트 연산자에 대해 더 자세히 알아야합니다. 두 번째 변경에 대해서는에 대한 사례가 너무 복잡해 보입니다 v <= 9. 모든 숫자 값을 반환 할 수 있다면 다른 바이트 저장 기 (.repeat () 없음 및 반환 값 + ())가 될 수 있다고 생각합니다.
Leibrug 2016 년

규칙에 따라 함수 이름
Conor O'Brien

1
v>92 바이트 더 짧고, string.repeat10 진수 값이 |0필요 하지 않습니다
Shaun H

또한 **물론 사용하지 않음으로 내 대답과 다릅니다 .
Neil

1

루아, 52 바이트

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

파일에 저장되어 Lua 인터프리터와 함께 실행되어야합니다. 예 : lua <file> <input number>

https://repl.it/CXom/1에서 시도해 볼 수도 있습니다.

(반복시 입력 번호는 테스트하기 쉽도록 하드 코딩되어 있음)


'... + 0'의 기능은 무엇입니까? 입력을 정수로 캐스트합니까?
Yytsi

1
그렇습니다. 숫자 (5.3 이전의 루아는 JavaScript와 같이 두 배만 사용했습니다). Lua는 표현식에서 문자열을 숫자로 자동 변환하지만 비교는하지 않습니다. 따라서 n>9제대로 작동하려면 먼저 숫자로 강제 변환해야합니다.
PiGuy

+1! 내가 참조. 그래서 ...+0>9일 것이다?
Yytsi 2016 년

1
네! 그것은 :)
PiGuy

1

라켓 70 자, 71 바이트

대부분의 다른 알고리즘과 거의 동일한 알고리즘입니다. 모듈로에 %를 사용하지 않거나, expt에 **를 사용하지 않거나, 기본적으로 정수 나누기를 사용하지 않는 것은 매우 슬픈 일입니다. 그렇지 않으면 훨씬 짧을 수 있으며 C와 Java를 능가 할 수 있습니다. 그래도 여전히 언어를 사랑

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

1

헥사 고니 , 40 31 30 바이트

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

또는 코드가 조금 덜 선형이고 다각형이 더 선호되는 경우 :

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

온라인으로 사용해보십시오!

아이디어와 영감을 주신 @FryAmTheEggman에게 감사합니다 : o)

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

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


1
이것은 작동하는 것 같다? 아직도 골프를 쳐다 본다.
FryAmTheEggman 2016

트윗 담아 가기 이것을 게시하고 2 분 후에 나는 훨씬 더 좋은 방법을 생각했다. 아마 터널 비전? 수정 버전을 작업 중입니다.
Sok

고마워 :) 단지 FYI 사람들은 종종 난해한 프로그래밍 언어 실 에서 Hexagony에 대해 이야기합니다 . 원하는 경우 참여하십시오 :)
FryAmTheEggman 2016

1
조금 더 매끄럽게 처리했습니다 : hexagony.tryitonline.net/…
FryAmTheEggman

1

펄 6 ,  38   29 바이트

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

(직접적인 접근은 더 짧습니다)

설명:

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

테스트:

#! /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

1

자바 10, 114 62 바이트

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

온라인으로 사용해보십시오.

편집 : 앞에 0이없는 130 73 바이트 ( @ levanth` 감사합니다 ) :

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

온라인으로 사용해보십시오.

설명:

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`

1
사람이 관심이 있다면 : 수정 일곱 바이트 이상이 될 것입니다, 교체 String c(int n){return""+(n>9?(n%9)+s(n):n+9);}int c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
levanth

@levanth 내가 그것을 편집했습니다. Btw, 당신은 ""+에서 잊었int c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
케빈 Cruijssen

1

루비, 33 바이트

이것은 xnor의 python answer와 동일한 int arithmetic 버전입니다. int를 가져오고 반환하는 익명 함수입니다.

->n{n<10?n+9:(1+n%9)*10**(n/9)-1}

나는 루비를 많이 모르지만 처음에는 익명 함수입니까?
levanth

@levanth : 그렇습니다. 위에서 명확하게 설명하겠습니다
MegaTom

n = 9에서 작동하지 않음
GB

@GB를 지적 해 주셔서 감사합니다. 이제 수정되었습니다.
MegaTom

1

MathGolf , 8 7 바이트

Æ)_Σk=▼

온라인으로 사용해보십시오!

암시 적 입력 예.

설명:

          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

나는 이것이 오래된 대답이라는 것을 알고 있지만 암시 적 입력으로 7 바이트로 해결할 수 있습니다 (첫 번째 건너 뛰기 k).
maxb

0

루비, 38 바이트

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

이 답변은 입력 크기에 따라 문자열 또는 int를 반환합니다. 9 미만의 솔루션을 요청한 다음 끝에 "9"를 추가하는 순환 솔루션입니다.


루비, 39 바이트

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

하나 이상의 바이트에 대해이 답변은 항상 int를 반환합니다. 위와 동일한 알고리즘이지만 숫자가 있습니다.


0

C, 80 바이트

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 온라인 시도

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

0

PHP, 77 자

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

0

Oracle SQL 11.2, 165 바이트

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;

언 골프

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

0

파이썬 3 55 바이트

동일한 두 가지 인수를 취합니다.

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

즉, 그것을 호출하려면 f (x, x)



0

파워 쉘, 54 바이트

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

테스트 스크립트 :

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

산출:

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

설명

  • [$_-gt9]첫 번째 숫자와 꼬리를 반환하는 경우
    • 첫 번째 숫자는 $ _와 9의 합의 차이입니다 ( $_%9)
    • 꼬리는 몇 구입니다- '9'*(($_-$_%9)/9))
    • 마지막으로 결과 문자열을 숫자로 변환하여 선행 0을 제거합니다.
  • 그렇지 않으면 반환 ($_+9)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.