Само число (также называемое колумбийским или Devlali числом) представляет собой натуральное число, x
, где уравнение n + <digit sum of n> = x
не имеет решений для любого натурального числа n
. Например, 21 не является собственным числом, как n = 15
результат 15 + 1 + 5 = 21
. С другой стороны, 20 является собственным числом, поскольку не n
может быть найдено, которое удовлетворяет такому равенству.
Поскольку это определение ссылается на сумму цифр, оно зависит от базы. Для целей этой задачи мы будем рассматривать только базовые 10 номеров, которые являются последовательностью A003052 в OEIS. Двоичные ( A010061 ) и базовые 100 ( A283002 ) собственные номера также были сопоставлены.
Соревнование
Если в x
качестве входных данных задано положительное целое число , выведите истинное значение if, x
являющееся собственным числом в базе 10, а значение false в противном случае. Для разъяснения истинных и ложных ценностей, обратитесь к этому мета-посту на эту тему .
Вы можете написать полную программу или функцию, а ввод и вывод могут быть предоставлены на любом из обычных каналов. Стандартные лазейки , конечно, запрещены.
Это код-гольф , поэтому чем короче ваш ответ (в байтах), тем лучше!
Контрольные примеры
Truthy:
1
3
5
7
9
20
31
86
154
525
Falsey:
2
4
6
8
10
15
21
50
100
500
Песочница ссылка
Leaderboards
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=159881,OVERRIDE_USER=41020;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>
Ответы:
Октава , 37 байт
Порт моего MATL ответа.
Попробуйте онлайн!
источник
Java (JDK 10) , 84 байта
Попробуйте онлайн!
объяснение
кредиты
источник
n->{int i=n,r=0;for(;i-->0;)r=(""+i).chars().map(x->x-48).sum()+i==n?1:r;return r<1;}
i->{for(int n=i;i-->1;)i|=((""+i).chars().map(x->x-48).sum()+i^n)-1>>-1;return~i<0;}
05AB1E , 8 байтов
Попробуйте онлайн! или как тестовый набор
объяснение
источник
Брахилог , 12 байт
Попробуйте онлайн!
объяснение
источник
false.
ли истинная ценность каким-либо объективным способом таким, каким этоtrue.
не является? Я, например, так не думаю, и похоже, что это будет поддержано мета-консенсусомC (gcc) ,
706765 байтПопробуйте онлайн!
Чтобы сбрить еще 2 байта, возвращаемое истинное значение больше не 1, а само число.
источник
Октава ,
494744 байтаПопробуйте онлайн!
Объяснение:
Попытка выполнить операцию с диапазоном является громоздкой и длительной, поскольку
num2str
возвращает строку с пробелами в качестве разделителей, если их больше, чем входное число. Следовательно, вычитание 48 даст что-то вроде:1 -16 -16 2 -16 -16 3 -16 -16 4
для диапазона ввода 1 ... 4 . Избавление от всех-16
занимает много байтов.Поэтому мы сделаем это с помощью цикла
arrayfun
. Для каждого из чисел k = 1 .. x , где x - это ввод, мы добавляемk
и его сумму цифр, и вычитаемx
. Это вернет массив с результатом этой операции для каждого из чисел в k . Если любое из чисел в массиве является нулем, число не является собственным числом.Для входов
20
и21
выходов:Есть только ненулевые элементы для ввода
20
и по крайней мере один ненулевой элемент для ввода21
. Это означает, что20
это собственный номер, а21
не его.Octave обрабатывает массив, по крайней мере, с одним нулем как ложный, что можно увидеть в TIO-ссылке.
источник
MATL , 11 байт
Выходными данными является непустой массив, который является правдивым, если все его записи отличны от нуля, и ложным, если он содержит один или несколько нулей.
Попробуйте онлайн! Или проверьте все контрольные примеры , включая проверку на достоверность / ложность.
объяснение
Рассмотрим ввод
n = 10
в качестве примера.источник
APL (Dyalog) , 14 байтов
Попробуйте онлайн!
Как?
источник
+/⍎¨∘⍕
->#+.⍎⍕
Желе , 6 байт
Для ввода n это возвращает [n], если n является собственным числом, [] если нет.
Попробуйте онлайн!
Как это работает
источник
Пари / ГП , 32 байта
Попробуйте онлайн!
источник
Haskell , 46 байтов
Попробуйте онлайн!
источник
J ,
28, 24, 2221 байт-1 байт благодаря Конору О'Брайену
-2 байта благодаря ngn
Попробуйте онлайн!
Объяснение:
i.
список 0 .. н-1( )"+
для каждого элемента в списке.,.&.":
преобразовать его в список цифр,1#
найти их сумму+
и добавьте его в товар$@-.
исключить список из аргумента и найти формуисточник
"0 i.
может быть"+i.
(-1 байт).-.@e.
->$@-.
[:(
)"+i.
->(
)"+@i.
Python 2,
7066 байтРЕДАКТИРОВАТЬ: -4 благодаря @ user56656
источник
`i`
вместо того,str(i)
чтобы сохранить 4 байта.[
и]
внутриsum
lambda x:[i for i in range(x)if i+sum(map(int,`i`))==x]==[]
lambda x:all(i+sum(map(int,`i`))-x for i in range(x))
Pyth , 8 байт
Тестирование.
Если допускается замена значений «истина / ложь», мы можем отбросить
!
и получить вместо них 7 байтов. Одно из предложений Сока помогло мне сыграть в гольф 2 байта.объяснение
источник
.AmnQ+dsjdT
, я понятия не имел о/
. Кажется, я давно не использовал Pyth правильно! +1/
основном подсчитывает вхождения элемента в списке. Я также могу использовать}
, который проверяет, появляется ли объект в списке, но я думаю, что это то же самое количество байтов.S
это не обязательно - входные данные будут положительным целым числом, поэтому наличие0
в списке отображения не будет проблемой? По крайней мере, кажется, что это работает для данных тестов.+sjdT
добавитьsjdT
кd
? Я никогда не видел ничего подобногоPerl 6 ,
3933 байтаПопробуйте!
Пустой блок с неявным единственным параметром, который называется так:
Поскольку
n + digits(n) >= n
мы можем просто вычислить колумбийское число для всех чисел до значения нашего запроса и посмотреть, совпадает ли какое-либо из них. Таким образом, это вычисляет колумбийское число для данного ввода:Который мы применяем ко всем значениям до нашей цели:
Но нас интересует только то, совпадает ли какое-либо из них, а не то, что это за значения, поэтому, как указал @nwellenhof, мы можем выполнить команду grep:
Остальное - просто принуждение к булу и завертывание в блок.
39 байт
Тестовая ссылка TIO предоставлена @Emigna
@nwellenhof отметил, что использование grep сэкономит 6 байт!
источник
{!grep $_,map {$_+[+] .comb},^$_}
для 33 байтов.Python 3 ,
60,56,55, 54 байтаПопробуйте онлайн!
-4 используя все обратное вместо любого
-1 путем изменения! = На ^ с помощью @ jonathan-allan
-1 с использованием наборов @ovs
источник
Japt
-d!
, 6 байтПопытайся
Оригинал, 8 байт
Возвращает введенный номер для истины или
0
фальси. Если бы в JavaScript был только пустой массив, то это могло бы быть 7 байтов.Попытайся
объяснение
альтернатива
Попытайся
источник
Сетчатка , 55 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Преобразовать ввод
x
в унарный.Создайте диапазон от
x
вниз до1
.Добавьте суффикс десятичного значения каждого
n
к его унарному значению.Сделайте копию
x
.Преобразуйте каждую десятичную цифру
n
в унарную, добавляя тем самым цифры к существующей копииn
.Проверьте,
x
появляется ли какой-либо из результатов.Инвертировать результат.
источник
JavaScript (ES6),
5251 байтСохранено 1 байт благодаря @ l4m2
Возвращает 0 или 1 .
Попробуйте онлайн!
источник
n=>(g=k=>k?n-eval([...k+'k'].join`+`)&&g(k-1):1)(n)
Haskell ,
6358 байтПопробуйте онлайн!
источник
Perl 5
-a
, 34 байтаПопробуйте онлайн!
источник
Рубин , 38 байт
Попробуйте онлайн!
источник
Сетчатка , 24 байта
Попробуйте онлайн!
Может быть 18 байт с вводом в унарном формате, но другой ответ Retina также использует десятичную дробь, поэтому я подумал, что использование десятичной дроби сделает более справедливое сравнение.
объяснение
Преобразовать ввод в унарный, используя
_
в качестве унарной цифры.В каждой позиции в строке (то есть в начале, конце и между каждой парой символов) вставьте:,
$.`
длину префикса (или позицию совпадения с нулевым индексом),¶
перевод строки$`
, сам префикс (т.е. унарное представление позиции с нулевым индексом). Например, если вход был3
и у нас было бы унарное представление___
, то это привело бы к:Другими словами, мы получаем одну строку для каждого числа от 0 до ввода (включительно), которое содержит как унарное, так и десятичное представление этого числа.
Мы конвертируем каждую цифру в унарную, которая эффективно вычисляет сумму цифр в каждой строке и добавляет ее к самому числу (все в унарной форме).
Дублированные строки. Это на самом деле не удаляет повторяющиеся строки, а просто очищает их до пустых строк. Таким образом, если любое число от 0 до входа плюс его сумма цифр равно входу, последняя строка будет очищена. В противном случае последняя строка остается на месте.
Проверьте, есть ли еще символ в последней строке. Мы не можем использовать
$
, потому что это также совпадает с конечным переводом строки (это именно то, где мы не хотим смотреть).источник
Bash + GNU Coreutils, 91 байт
Возвращает правду или ложь.
источник
Котлин , 48 байтов
Попробуйте онлайн!
Объяснение:
источник
Добавить ++ , 27 байт
Попробуйте онлайн!
Как это работает
источник
Эликсир ,
6665 байтПопробуйте онлайн!
источник
Stax , 8 байт
Запустите и отладьте его
объяснение
ASCII эквивалент:
fcE+|+x=
является программой Stax, которая выводит все числа, чья сумма цифр, добавленных к себе, равна входу Например, для101
вывода будет91
и100
, каждый на отдельной строке.Запустите и отладьте его
источник
Пыть , 7 байт
Попробуйте онлайн!
Если допускается обмен значениями «истина / ложь», то
¬
в конце значение может быть отброшено на 6 байтов.Объяснение:
источник
J , 20 байт
Попробуйте онлайн!
источник