Tìm số nhỏ nhất lớn hơn đầu vào có tổng số là đầu vào


28

"Tổng số" dùng để chỉ tổng của tất cả các chữ số trong một số.

Ví dụ, tổng kỹ thuật số 132410, bởi vì 1+3+2+4 = 10.

Thách thức là viết một chương trình / hàm để tính số nhỏ nhất lớn hơn đầu vào có tổng số là đầu vào.

Ví dụ với hướng dẫn

Ví dụ, lấy số 9làm đầu vào:

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

Đầu ra hợp lệ sẽ là số nhỏ nhất ở trên 18.

Thông số kỹ thuật

Lưu ý rằng đó 9không phải là đầu ra hợp lệ cho ví dụ này, vì số bị đảo ngược phải lớn hơn số ban đầu.

Lưu ý rằng đầu vào sẽ là tích cực.

Các trường hợp thử nghiệm:

 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)

Tài liệu tham khảo:

Đây là OEIS A161561 .

Chỉnh sửa: Đã thêm một Testcase (18)

Cảm ơn Martin Ender cho Đoạn trích bảng dẫn

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
Tiêu đề này làm cho não của tôi bị tổn thương.
Gây tử vong vào

Câu trả lời:


4

05AB1E, 19 17 8 byte

Mã số:

[>DSO¹Q#

Giải thích:

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

Dùng thử trực tuyến

Chỉnh sửa: Đã lưu 9 byte nhờ @Adnan


4
SOlà một cách ngắn hơn để có được tổng các chữ số (thay vì J`)O). Ngoài ra, không có sự phân công biến, bạn có thể làm [>DSO¹Q#:).
Adnan

2
@Ad Nam. Tốt đẹp! Tôi hoàn toàn nhớ S. Nên đã nhận ra tôi không cần các biến.
Emigna

14

Python 2, 33 byte

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

Một biểu hiện trực tiếp. Tạo một chuỗi số có 9 ở cuối và phần còn lại ở đầu. Ngoại trừ, cho một chữ số n, cho n+9.

Một số đầu ra có các số 0 đứng đầu ( 099for 18).


7

Võng mạc , 39 31 byte

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

Đưa đầu vào trong unary .

Hãy thử trực tuyến! (Hai dòng đầu tiên cho phép chạy một số trường hợp thử nghiệm cùng một lúc và chuyển đổi từ số thập phân sang đơn vị để thuận tiện.)

Điều này không thực sự tìm kiếm kết quả một cách tuyến tính, nhưng tính toán nó một cách rõ ràng:

  • Nếu đầu vào nlớn hơn 9, chúng ta thay thế nó bằng các số n % 9theo sau n / 9(thả nổi).
  • Nếu không, chúng tôi thay thế nó bằng n + 9.

Sử dụng !(hoặc bất cứ thứ gì khác không phải 1) làm chữ số đơn, tôi có thể lưu thêm một byte bằng cách tiếp cận sau:

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

Nhưng định dạng đầu vào này là một chút kéo dài, tôi nghĩ vậy.


Vì vậy, Retina sẽ không cho phép nhập số nguyên hoặc chỉ không thể xử lý số học Integer?
levanth

@levanth Không có số học nào ở Retina - toàn bộ ngôn ngữ dựa trên xử lý chuỗi thông qua các biểu thức thông thường, vì vậy tất cả các số học thường được thực hiện trên các biểu diễn đơn nhất. Retina có thể lấy đầu vào số nguyên thập phân và chuyển đổi nó thành unary trước, nhưng chi phí thêm 6 byte và chính sách của chúng tôi cho phép đầu vào unary trừ khi thử thách chỉ định thập phân. (Nếu bạn muốn yêu cầu tất cả các câu trả lời lấy đầu vào thập phân, vui lòng nói như vậy trong thông số kỹ thuật và tôi sẽ cập nhật câu trả lời của tôi.)
Martin Ender

không, không sao cả ^^ Tôi chỉ tò mò về đầu vào đơn nhất
levanth


6

Java 7, 68 61 byte

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

Có đại khái điều tương tự như nhiều câu trả lời khác ở đây. Muốn hiển thị cách tiếp cận Java mà không cần sử dụng các thao tác chuỗi và vòng lặp.

Cảm ơn FryAmTheEggman đã nhắc nhở tôi rằng tôi thật ngốc;)


Ít nhất bạn đã vượt qua SQL?
Rɪᴋᴇʀ

Meh, chỉ lớn gấp đôi so với hầu hết các câu trả lời python / ruby ​​ở đây, vì vậy tôi không cảm thấy quá tệ cho Java ngay bây giờ. Dù vậy, thật tuyệt khi đánh bại C: P
Geobits

: / Rất tiếc, đã nhận được điều đó từ khối lớp của tôi. Tôi phải gỉ ở đây.
Geobits

@Geobits Nó có thể sẽ đánh bại C--.
gcampbell

@Fry Hoàn toàn quên mất mánh khóe đó. Cảm ơn, điều đó đã đưa tôi lên trước C ít nhất;)
Geobits

3

MATL , 10 9 byte

`QtV!UsG-

Hãy thử trực tuyến!

Giải trình

`        % 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
Khéo léo sử dụng V!U+1 từ tôi. Điều đó nên đi trong danh sách các thành ngữ MATL của chúng tôi.
Suever

@Suever Có, điều đó được sử dụng khá thường xuyên
Luis Mendo

3

JavaScript (ES7), 32 byte

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

38 byte dưới dạng ES6:

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

3

Python 3, 128 94 84 74 byte

Không có đầu ra, cách tiếp cận trực tiếp, codegolfer mới bắt đầu;)

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

1
Đối với người mới bắt đầu, có rất nhiều không gian có thể được loại bỏ. Trước / sau = + () chẳng hạn.
Emigna

1
Ngoài ra, bạn có thể thay thế print(m)bằng return m(không lưu bất kỳ byte nào nhưng bạn không phải in chính hàm đó). Bạn vẫn có thể in trả về chức năng đầu ra print(r(n))để kiểm tra chức năng của mình
levanth

1
Bạn cũng có thể loại bỏ rất nhiều dòng mới; m=n+1;f=1if s==n:f=0
Blue

1
Khi thay thế in bằng return, bạn có thể thực hiện trực tiếp trong câu lệnh if và xóa f cũng như câu lệnh khác.
Emigna

2
Bạn vẫn có thể xóa f và chỉ sử dụng trong khi 1: và cũng có thể xóa khoảng
trắng

2

Trên thực tế, 17 byte

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

Hãy thử trực tuyến!

Giải trình:

╗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

Câu trả lời này rất hay vì nó tán tỉnh ( ;))
Vụ kiện của Quỹ Monica ngày

2

C 73 65 byte

Một macro có chức năng trợ giúp.

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

Các echức năng chỉ tính toán, quyền hạn của mười, và Fvĩ mô sử dụng phương pháp giải quyết tương tự như ruby này , và trăn này câu trả lời. thật đáng buồn, nó dài hơn khoảng cùng chiều dài của cả hai câu trả lời. Nhưng đó là câu trả lời C đầu tiên.

(8 byte được lưu bởi thủ thuật xóa của Lynn int.)


Bạn có thể loại bỏ cả hai lần xuất hiện int, tiết kiệm 8 byte.
Lynn

2

Brachylog , 8 byte (Không cạnh tranh)

<.=:ef+?

= đã được sửa đổi sau khi thử thách này được đăng, để nó hiện hoạt động trên các miền có thể vô hạn, đó là trường hợp ở đây.

Giải trình

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

Điều này sẽ quay lại =cho đến khi giá trị của Đầu ra làm cho toàn bộ vị từ này trở thành đúng.



1

Python 2, 39 byte

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

Số nguyên nguyên.

Chương trình đầy đủ với đầu ra

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

Đầu ra:

11
17
39
79
89
99
699
5999

Tôi thích cách mà công thức này tránh được số 0 hàng đầu.
Neil

@Neil người khác có thể tránh nó bằng cách sử dụngeval
Blue

1

PowerShell v2 +, 62 byte

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

Đưa đầu vào $nsau đó thực hiện một forvòng lặp. Chúng tôi khởi tạo vòng lặp bằng cách đặt số mục tiêu của chúng tôi, $alớn hơn một số $n(vì nó phải lớn hơn, cộng với điều này đảm bảo 1..9hoạt động chính xác). Mỗi vòng lặp chúng tôi tăng lên $a++. Không có gì xảy ra trong vòng lặp thích hợp, nhưng điều kiện là nơi logic chương trình xảy ra. Chúng tôi thực sự lấy số mục tiêu là một chuỗi, chuyển nó thành một mảng char, -joinlấy mảng +đó và sau đó chuyển nó sang iex(tương tự như eval). Chúng tôi kiểm tra xem có bằng số đầu vào của chúng tôi hay không và tiếp tục lặp lại cho phù hợp. Khi chúng tôi đã thoát khỏi vòng lặp, chúng tôi đã đạt đến nơi số mục tiêu của chúng tôi là tổng số bằng với số đầu vào của chúng tôi, do đó, $ađược đặt trên đường ống và đầu ra là ẩn.


Để tham khảo, đây là phương pháp "xây dựng một chuỗi với số lượng 9" thích hợp mà những người khác đã thực hiện, ở mức 67 byte

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

hoặc phương pháp "số học số nguyên thuần túy" mà những người khác đã làm, ở mức 70 byte

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

Không phải cái nào cũng ngắn hơn, nhưng cả hai đều thú vị hơn.


Bạn có thể lưu 3 byte:param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
mazzy

1

Pyke, 9 8 7 byte, không cạnh tranh - sử dụng phiên bản mới hơn

.fhsq)h

Hãy thử nó ở đây!

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

Đã kiểm tra lại, giải pháp của bạn không cung cấp đầu ra chính xác cho các đầu vào 1 đến 8
levanth

Tôi nghĩ rằng tôi đã phá vỡ nó ... Hoạt động ngoại trừ số 1. Btw tại sao Missing arg to Equals, evaling inputđi lên? Ý tôi là tôi cho nó một số đầu vào
levanth

@levanth Điều đó xảy ra vì theo mặc định, giao diện web đã bật cảnh báo. Tôi vừa mã hóa một cách để tắt nó đi (như 10 phút trước). Về lý do tại sao nó không hoạt động cho 1, tôi đã kiểm tra xem con số có lớn hơn 10 không và liệu có tiếp tục không.
Màu xanh

1

JavaScript (ES2015), 45 39 33 byte

Đã lưu thêm 6 byte nhờ @Conor O'Brien và @Shaun H.
Tôi nghĩ rằng tôi sẽ để nguyên như vậy, vì phiên bản này khác với câu trả lời của @ Neil bằng cách sử dụng String.repeat().

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

Phiên bản trước (đã lưu 6 byte nhờ @Qwertiy):

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

Phiên bản đầu tiên:

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

@Qwertiy Cảm ơn bạn rất nhiều. Tôi cần tìm hiểu thêm về các toán tử bitwise. Về sự thay đổi thứ hai, có vẻ như tôi đã quá phức tạp cho trường hợp này v <= 9. Tôi sẽ nghĩ nếu tôi có thể trả về tất cả các giá trị số, đó có thể là một trình tiết kiệm byte khác (không có .repeat () và gói giá trị trả về trong + ()).
Leibrug

Bạn không cần đặt tên hàm theo quy tắc của chúng tôi
Conor O'Brien

1
v>9ngắn hơn 2 byte, string.repeatsẽ tạo ra giá trị thập phân không |0cần thiết
Shaun H

Cũng khác với câu trả lời của tôi bằng cách không sử dụng **tất nhiên.
Neil

1

Lua, 52 byte

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

Có nghĩa là được lưu trong một tệp và chạy với trình thông dịch Lua, vd lua <file> <input number>

Bạn cũng có thể dùng thử tại đây: https://repl.it/CXom/1

(Trên repl.it số đầu vào được mã hóa cứng để dễ kiểm tra)


'... + 0' làm gì ...? Liệu nó đúc đầu vào cho một số nguyên?
Yytsi

1
Đúng, đến một số (Lua trước 5.3 chỉ được sử dụng gấp đôi, như JavaScript). Lua sẽ tự động chuyển đổi chuỗi thành số trong biểu thức, nhưng không so sánh. Vì vậy, n>9để hoạt động đúng, nó cần phải được ép buộc trước một số.
PiGuy

+1! Tôi hiểu rồi. Vì vậy, ...+0>9sẽ làm việc?
Yytsi

1
Vâng! Nó sẽ :)
PiGuy

1

Vợt 70 ký tự, 71 byte

Thuật toán giống như hầu hết những người khác khá nhiều. Khá buồn về việc không có% cho modulo, hoặc ** cho expt hoặc chia số nguyên theo mặc định, nếu không, điều này có thể ngắn hơn rất nhiều và tôi có thể vượt qua C và Java. Vẫn yêu ngôn ngữ

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

1

Lục giác , 40 31 30 byte

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

Hoặc, nếu bạn thích mã của mình ít tuyến tính hơn và đa giác hơn một chút:

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

Hãy thử trực tuyến!

Cảm ơn @FryAmTheEggman vì một số ý tưởng và cảm hứng: o)

Phiên bản trước: <.:->+_.!(..'!.\><9!%>@.{.}|.?"

Phiên bản trước: <><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\


1
Điều này dường như để làm việc? Vẫn có vẻ golf.
FryAmTheEggman

@FryAmTheEggman Làm việc tốt! 2 phút sau khi đăng bài này, tôi nghĩ ra một cách tốt hơn để làm, tốt, khá nhiều thứ. Tầm nhìn đường hầm, có lẽ? Tôi đang làm việc trên một phiên bản sửa đổi.
Sok

Cảm ơn :) Chỉ là một người FYI thường trò chuyện về Hexagony trong phòng ngôn ngữ lập trình bí truyền . Tham gia nếu bạn muốn :)
FryAmTheEggman

1
Quản lý để smoosh nó trong một chút nữa: hexagony.tryitonline.net/ Kẻ
FryAmTheEggman

1

Perl 6 ,  38   29 byte

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

(rõ ràng cách tiếp cận trực tiếp ngắn hơn)

Giải trình:

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

Kiểm tra:

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

Java 10, 114 62 byte

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

Hãy thử trực tuyến.

EDIT: 130 73 byte mà không có số 0 đứng đầu (Cảm ơn @ levanth` ):

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

Hãy thử trực tuyến.

Giải trình:

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
Nếu bất cứ ai quan tâm: Bản sửa lỗi sẽ dài hơn bảy byte, thay thế String c(int n){return""+(n>9?(n%9)+s(n):n+9);}bằngint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
levanth

@levanth Tôi đã chỉnh sửa nó. Btw, bạn đã quên ""+trongint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Kevin Cruijssen

1

Ruby, 33 byte

Đây là một phiên bản số học int, giống như câu trả lời python của xnor. Đây là một hàm ẩn danh nhận và trả về một int.

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

Tôi không biết ruby ​​nhiều nhưng là -> khi bắt đầu một chức năng ẩn danh?
levanth

@levanth: vâng. Tôi sẽ làm rõ ở trên
MegaTom

Không hoạt động cho n = 9
GB

@GB cảm ơn bạn đã chỉ ra điều đó. Bây giờ nó đã được sửa.
MegaTom

1

MathGolf , 8 7 byte

Æ)_Σk=▼

Hãy thử trực tuyến!

Ngẫu nhiên đầu vào yay.

Giải trình:

          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

Tôi biết đây là một câu trả lời cũ hơn, nhưng bạn có thể giải quyết nó trong 7 byte ngay bây giờ với đầu vào ẩn (chỉ cần bỏ qua đầu tiên k).
maxb

0

Ruby, 38 byte

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

Câu trả lời này trả về một chuỗi hoặc int tùy thuộc vào kích thước đầu vào. Đó là một giải pháp đệ quy yêu cầu một giải pháp cho 9 ít hơn sau đó thêm "9" vào cuối.


Ruby, 39 byte

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

Đối với một byte nữa, câu trả lời này luôn trả về một int. thuật toán tương tự như trên nhưng với số.


0

C, 80 byte

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 thử trực tuyến

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 ký tự

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

0

Oracle SQL 11.2, 165 byte

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;

Không chơi gôn

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

Python 3 55 byte

Có hai đối số giống nhau

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

tức là để gọi nó, bạn sẽ sử dụng f (x, x)



0

Powershell, 54 byte

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

Kịch bản thử nghiệm:

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

Đầu ra:

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

Giá cả

  • nếu [$_-gt9]trả về một chữ số đầu tiên và một cái đuôi
    • một chữ số đầu tiên là sự khác biệt giữa $ _ và tổng của 9 ( $_%9)
    • một cái đuôi là một vài dây - '9'*(($_-$_%9)/9))
    • cuối cùng, chuyển đổi một chuỗi kết quả thành một số để loại bỏ số 0 đứng đầu
  • khác trả lại ($_+9)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.