«Цифровая сумма» относится к сумме всех цифр в числе.
Например, цифровая сумма 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)
Спасибо Мартину Эндеру за фрагмент таблицы лидеров
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
levanth
источник
источник
Ответы:
05AB1E,
19178 байтКод:
Разъяснение:
Попробуйте онлайн
Редактировать: 9 байтов сохранено благодаря @Adnan
источник
SO
это более короткий способ получить сумму цифр (вместоJ`)O
). Также без присвоения переменной можно обойтись[>DSO¹Q#
:).Python 2, 33 байта
Прямое выражение. Делает числовую строку с 9 в конце и остатком в начале. Кроме, для однозначного
n
, даетn+9
.Некоторые выходы имеют ведущие нули (
099
для18
).источник
Сетчатка ,
3931 байтПринимает участие в одинарных .
Попробуйте онлайн! (Первые две строки позволяют запускать несколько тестовых случаев одновременно и для удобства преобразуют из десятичной в унарную.)
Это на самом деле не ищет результат линейно, но вычисляет его явно:
n
значение больше 9, мы заменим его наn % 9
следующиеn / 9
девятки.n + 9
.Используя
!
(или что-либо еще, что не является1
) в качестве унарной цифры, я могу сохранить еще один байт следующим способом:Но я думаю, что этот формат ввода немного растянут.
источник
Pyth , 8 байт
Тестирование.
источник
Java 7,
6861 байтДелает примерно то же самое, что и многие другие ответы здесь. Хотел показать подход Java без использования строковых манипуляций и циклов.
Спасибо FryAmTheEggman за напоминание, что я тупой;)
источник
MATL ,
109 байтПопробуйте онлайн!
объяснение
источник
V!U
+1 от меня. Это должно войти в наш список идиом MATL.JavaScript (ES7), 32 байта
38 байтов как ES6:
источник
Python 3,
128948474 байтаБез выхода, прямой подход, начинающий программист;)
источник
print(m)
наreturn m
(не сохраняет байты, но вам не нужно печатать в самой функции). Вы все еще можете напечатать выходную функцию, возвращаемую с помощью,print(r(n))
чтобы проверить свою функциюm=n+1;f=1
иif s==n:f=0
На самом деле, 17 байтов
Попробуйте онлайн!
Объяснение:
источник
;)
)C
7365 байтМакрос с вспомогательной функцией.
e
Функция просто вычисляет полномочия десяти, аF
макрос использует тот же метод , как Решая этот рубин , и этот питон ответа. к сожалению, ондлиннее, чемпримерно такая же длина, как оба эти ответа вместе взятые. Но это первый ответ C.(8 байтов, спасенных уловкой Линн удаления
int
).источник
int
, сохранив 8 байтов.Brachylog , 8 байт (неконкурентный)
=
был изменен после того, как этот вызов был опубликован, так что теперь он работает на возможно бесконечных доменах, что имеет место здесь.объяснение
Это будет возвращаться,
=
пока значение Output не сделает весь этот предикат истинным.источник
TSQL (sqlserver 2012),
10799 байтПопробуйте онлайн!
источник
Python 2, 39 байт
Чисто целочисленная арифметика.
Полная программа с выходом
Выход:
источник
eval
PowerShell v2 +, 62 байта
Принимает ввод,
$n
затем выполняетfor
цикл. Мы инициализируем цикл, устанавливая наше целевое число, которое$a
должно быть на единицу больше$n
(поскольку оно должно быть больше, плюс это обеспечивает1..9
правильную работу). Каждый цикл мы увеличиваем$a++
. Ничего не происходит в собственном цикле, но условно, где происходит логика программы. Мы буквально принимаем целевое число в виде строки, приводим его к типу char-массив,-join
добавляем массив в массив+
и затем добавляем его в цепочкуiex
(аналогичноeval
). Мы проверяем, равно ли это нашему входному номеру или нет, и продолжаем цикл соответственно. После того, как мы вышли из цикла, мы достигли, где наше целевое число является цифрой-суммой, равной нашему входному номеру, поэтому$a
помещается в конвейер и вывод неявен.Для справки, вот метод «построить строку с соответствующим числом 9», который сделали другие люди, на 67 байтов
или «чистый целочисленный арифметический» метод, который сделали другие люди, в 70 байтов
Ни один из которых не короче, но оба из которых являются более интересными.
источник
param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
Pyke,
987 байт, не конкурирует - использует более свежую версиюПопробуй это здесь!
источник
1
. Кстати, почемуMissing arg to Equals, evaling input
подходит? Я имею в виду, я даю ему входной номерJavaScript (ES2015),
453933 байтаСохранено еще 6 байтов благодаря @Conor O'Brien и @Shaun H.
Думаю, я оставлю все как есть, потому что эта версия отличается от ответа @ Neil использованием
String.repeat()
.Предыдущая версия (сохранено 6 байт благодаря @Qwertiy):
Первая версия:
источник
~~(v/9)
=>v/9|0
,'1'+v-1
=>v+9
v <= 9
. Я подумаю, смогу ли я вернуть все числовые значения, которые могли бы быть другой заставкой байтов (без .repeat () и переносом возвращаемого значения в + ()).v>9
на 2 байта короче,string.repeat
будет|0
нужно**
конечно.Луа, 52 байта
Предназначен для сохранения в файле и запуска с интерпретатором Lua, например
lua <file> <input number>
Вы также можете попробовать это здесь: https://repl.it/CXom/1
(На repl.it вводимый номер жестко запрограммирован для удобства тестирования)
источник
n>9
чтобы работать должным образом, сначала нужно привести его к числу....+0>9
будет работать?Ракетка 70 символов, 71 байт
Тот же алгоритм, что и у большинства других. Довольно печально, что по умолчанию нет% для modulo, ** для expt или для целочисленного деления, иначе это может быть намного короче, и я мог бы превзойти C и Java. Все еще люблю язык, хотя
источник
Гексагония ,
40 3130 байтИли, если вы предпочитаете, чтобы ваш код был немного менее линейным и немного более многоугольным:
Попробуйте онлайн!
Спасибо @FryAmTheEggman за некоторые идеи и вдохновение: о)
Предыдущая версия:
<.:->+_.!(..'!.\><9!%>@.{.}|.?"
Предыдущая версия:
<><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\
источник
Perl 6 ,
3829 байт(видимо прямой подход короче)
Объяснение:
Тест:
источник
Java 10,
11462 байтаПопробуйте онлайн.
РЕДАКТИРОВАТЬ:
13073 байта без начальных нулей (благодаря @ levanth` ):Попробуйте онлайн.
Объяснение:
источник
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));}
""+
вint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Рубин, 33 байта
Это int-арифметическая версия, которая просто совпадает с ответом xnor на python. Это анонимная функция, которая принимает и возвращает int.
источник
MathGolf ,
87 байтПопробуйте онлайн!
Неявный ввод yay.
Объяснение:
источник
k
).Рубин, 38 байт
Этот ответ возвращает строку или int в зависимости от размера ввода. Это рекурсивное решение, которое запрашивает решение на 9 меньше, а затем добавляет «9» в конец.
Рубин, 39 байт
Для еще одного байта этот ответ всегда возвращает int. тот же алгоритм, что и выше, но с числами.
источник
C, 80 байтов
Ungolfed попробуйте онлайн
источник
PHP, 77 символов
источник
Oracle SQL 11.2,
165байтUn-golfed
источник
Python 3 55 байт
Принимает два одинаковых аргумента
то есть, чтобы вызвать его, вы бы использовали f (x, x)
источник
Japt , 9 байт
Попытайся
источник
Powershell, 54 байта
Тестовый скрипт:
Выход:
Expalantion
[$_-gt9]
возвращает первую цифру и хвост$_%9
)'9'*(($_-$_%9)/9))
($_+9)
источник