"Jumlah digital" mengacu pada jumlah semua digit dalam suatu angka.
Sebagai contoh, jumlah digitalnya 1324
adalah 10
, karena 1+3+2+4 = 10
.
Tantangannya adalah untuk menulis program / fungsi untuk menghitung angka terkecil yang lebih besar dari input yang jumlah digitalnya adalah input.
Contoh dengan walkthrough
Sebagai contoh, ambil nomor 9
sebagai input:
9 = 1+8 -> 18
9 = 2+7 -> 27
9 = 3+6 -> 36
...
9 = 8+1 -> 81
9 = 9+0 -> 90
Output yang valid akan menjadi angka terkecil di atas, yaitu 18
.
Spesifikasi
Perhatikan bahwa 9
ini bukan output yang valid untuk contoh ini, karena angka yang dibalik harus lebih besar dari angka aslinya.
Perhatikan bahwa input akan positif.
Kasus-Uji:
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)
Referensi:
Ini adalah OEIS A161561 .
Sunting: Menambahkan Testcase tambahan (18)
Terima kasih kepada Martin Ender untuk Cuplikan Leaderboard
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>
code-golf
arithmetic
Levant
sumber
sumber
Jawaban:
05AB1E,
19178 byteKode:
Dijelaskan:
Cobalah online
Sunting: Disimpan 9 byte berkat @Adnan
sumber
SO
adalah cara yang lebih pendek untuk mendapatkan jumlah digit (bukanJ`)O
). Juga, tanpa penugasan variabel, Anda dapat melakukan[>DSO¹Q#
:).Python 2, 33 byte
Ekspresi langsung. Membuat string angka dengan 9 di akhir dan sisanya di awal. Kecuali, untuk satu digit
n
, berin+9
.Beberapa output memiliki angka nol terdepan (
099
untuk18
).sumber
Retina ,
3931 byteMengambil input di unary .
Cobalah online! (Dua baris pertama memungkinkan menjalankan beberapa test case sekaligus dan mengkonversi dari desimal ke unary untuk kenyamanan.)
Ini sebenarnya tidak mencari hasil secara linear, tetapi menghitungnya secara eksplisit:
n
lebih besar dari 9, kami menggantinya dengann % 9
diikuti olehn / 9
sembilan (lantai).n + 9
.Dengan menggunakan
!
(atau hal lain yang bukan1
) sebagai digit unary, saya dapat menyimpan satu byte lagi dengan pendekatan berikut:Tapi format input ini agak sulit, saya pikir.
sumber
Pyth , 8 byte
Suite uji.
sumber
Java 7,
6861 byteApakah kira-kira hal yang sama dengan banyak jawaban lain di sini. Ingin menunjukkan pendekatan Java tanpa menggunakan manipulasi string dan loop.
Terima kasih kepada FryAmTheEggman untuk mengingatkan saya bahwa saya bodoh;)
sumber
MATL ,
109 byteCobalah online!
Penjelasan
sumber
V!U
+1 secara cerdas dari saya. Itu harus masuk dalam daftar idiom MATL kami.JavaScript (ES7), 32 byte
38 byte sebagai ES6:
sumber
Python 3,
128948474 BytesTanpa output, pendekatan langsung, codegolfer pemula;)
sumber
print(m)
denganreturn m
(tidak menyimpan byte tetapi Anda tidak harus mencetak dalam fungsi itu sendiri). Anda masih dapat mencetak pengembalian fungsi keluaran denganprint(r(n))
untuk menguji fungsi Andam=n+1;f=1
danif s==n:f=0
Sebenarnya, 17 byte
Cobalah online!
Penjelasan:
sumber
;)
)C
7365 byteMakro dengan fungsi pembantu.
The
e
Fungsi hanya menghitung kekuatan sepuluh, danF
makro menggunakan metode pemecahan yang sama seperti ruby ini , dan python ini jawabannya. Sayangnya, inilebih panjang daripanjang yang sama dengan kedua jawaban itu disatukan. Tetapi ini adalah jawaban C pertama.(8 byte disimpan oleh trik Lynn untuk menghapus
int
.)sumber
int
, menghemat 8 byte.Brachylog , 8 byte (Tidak bersaing)
=
telah dimodifikasi setelah tantangan ini diposting, sehingga sekarang berfungsi pada domain yang mungkin tidak terbatas, yang merupakan kasus di sini.Penjelasan
Ini akan mundur
=
hingga nilai Output membuat seluruh predikat ini menjadi kenyataan.sumber
TSQL (sqlserver 2012),
10799 byteCobalah online!
sumber
Python 2, 39 byte
Aritmatika integer murni.
Program penuh dengan output
Keluaran:
sumber
eval
PowerShell v2 +, 62 byte
Mengambil input
$n
lalu menjalankan satufor
loop. Kami menginisialisasi loop dengan menetapkan nomor target kami$a
,, menjadi satu lebih besar dari$n
(karena itu harus lebih besar, ditambah ini memastikan1..9
bekerja dengan benar). Setiap loop kami bertambah$a++
. Tidak ada yang terjadi di loop yang tepat, tetapi kondisional adalah tempat logika program terjadi. Kami benar-benar mengambil nomor target sebagai string, melemparkannya sebagai array char,-join
memasukkan array dengan+
dan kemudian memipangnya keiex
(mirip denganeval
). Kami menguji apakah itu sama dengan nomor input kami atau tidak, dan melanjutkan pengulangan sesuai. Setelah kami keluar dari loop, kami telah mencapai di mana nomor target kami adalah digit-jumlah sama dengan nomor input kami, jadi$a
ditempatkan pada pipa dan output tersirat.Untuk referensi, inilah metode "buat string dengan jumlah 9 yang tepat" yang telah dilakukan orang lain, sebesar 67 byte
atau metode "bilangan bulat murni" metode yang telah dilakukan orang lain, pada 70 byte
Tak satu pun dari yang lebih pendek, tetapi keduanya lebih menarik.
sumber
param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
Pyke,
987 byte, tidak bersaing - menggunakan versi yang lebih baruCoba di sini!
sumber
1
. Btw mengapa tidakMissing arg to Equals, evaling input
muncul? Maksud saya, saya memberikan nomor inputJavaScript (ES2015),
453933 byteMenyimpan 6 byte lagi berkat @Conor O'Brien dan @Shaun H.
Saya pikir saya akan membiarkannya apa adanya, karena versi ini berbeda dari jawaban @ Neil dengan menggunakan
String.repeat()
.Versi sebelumnya (disimpan 6 byte berkat @Qwertiy):
Versi pertama:
sumber
~~(v/9)
=>v/9|0
,'1'+v-1
=>v+9
v <= 9
. Saya akan berpikir jika saya bisa mengembalikan semua nilai numerik, yang bisa berupa byte-saver (no .repeat () dan membungkus nilai pengembalian dalam + ()).v>9
lebih pendek 2 byte,string.repeat
akan menurunkan nilai desimal tidak|0
diperlukan**
tentu saja.Lua, 52 byte
Dimaksudkan untuk disimpan dalam file dan dijalankan dengan penerjemah Lua, mis
lua <file> <input number>
Anda juga dapat mencobanya di sini: https://repl.it/CXom/1
(Pada repl.it nomor input berupa kode keras untuk kemudahan pengujian)
sumber
n>9
dapat bekerja dengan baik, perlu dipaksa ke nomor terlebih dahulu....+0>9
apakah akan berhasil?Racket 70 karakter, 71 byte
Algoritma yang sama seperti kebanyakan yang lain cukup banyak. Cukup sedih karena tidak memiliki% untuk modulo, atau ** untuk expt, atau pembagian integer secara default, jika tidak, ini bisa menjadi jauh lebih pendek dan saya bisa mengalahkan C dan Java. Masih suka bahasa
sumber
Hexagony ,
40 3130 byteAtau, jika Anda lebih suka kode Anda sedikit lebih linier dan sedikit lebih poligonal:
Cobalah online!
Terima kasih kepada @FryAmTheEggman untuk beberapa ide dan inspirasi: o)
Versi sebelumnya:
<.:->+_.!(..'!.\><9!%>@.{.}|.?"
Versi sebelumnya:
<><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\
sumber
Perl 6 ,
3829 byte(tampaknya pendekatan langsung lebih pendek)
Penjelasan:
Uji:
sumber
Java 10,
11462 byteCobalah online.
EDIT:
13073 byte tanpa nol di depan (Terima kasih kepada @ levanth` ):Cobalah online.
Penjelasan:
sumber
String c(int n){return""+(n>9?(n%9)+s(n):n+9);}
denganint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
""+
diint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Ruby, 33 byte
Ini adalah versi aritmatika int yang kebetulan sama dengan jawaban python xnor. Ini adalah fungsi anonim yang mengambil dan mengembalikan int.
sumber
MathGolf ,
87 byteCobalah online!
Masukan implisit yay.
Penjelasan:
sumber
k
).Ruby, 38 byte
Jawaban ini mengembalikan string atau int tergantung pada ukuran input. Ini adalah solusi rekursif yang meminta solusi untuk kurang dari 9 kemudian menambahkan "9" di akhir.
Ruby, 39 byte
Untuk satu byte lagi, jawaban ini selalu mengembalikan int. algoritma yang sama seperti di atas tetapi dengan angka.
sumber
C, 80 byte
Tidak dicoba coba online
sumber
PHP, 77 karakter
sumber
Oracle SQL 11.2,
165byteTidak bermain golf
sumber
Python 3 55 Bytes
Membawa dua argumen yang sama
yaitu untuk menyebutnya Anda akan menggunakan f (x, x)
sumber
Japt , 9 byte
Cobalah
sumber
Powershell, 54 byte
Skrip uji:
Keluaran:
Ekspansi
[$_-gt9]
mengembalikan digit pertama dan ekor$_%9
)'9'*(($_-$_%9)/9))
($_+9)
sumber