자기 번호 (또한 콜롬비아 또는 Devlali 번호라고 함)은 자연수 인 x
, 방정식 여기서 n + <digit sum of n> = x
임의의 자연수에 대한 해결책이 없다 n
. 예를 들어 21 은 n = 15
결과 로 표시 되는 자체 번호가 아닙니다 15 + 1 + 5 = 21
. 한편, 20 은n
그러한 평등을 만족하는 것을 찾을 수 없기 때문에 자기 번호 입니다.
이 정의는 숫자 합을 참조하므로 기본에 따라 다릅니다. 이 도전의 목적을 위해, 우리는 OEIS의 시퀀스 A003052 인 기본 10 자릿수 만 고려할 것 입니다. 이진 ( A010061 ) 및 기본 100 ( A283002 ) 자체 번호도 계산되었습니다.
도전
x
입력 으로 양의 정수가 주어지면 x
10 진수의 자릿수이면 참 값을, 그렇지 않으면 거짓 값을 출력하십시오. 진실과 거짓 값에 대한 설명은 주제에 대한이 메타 게시물을 참조하십시오 .
전체 프로그램 또는 기능을 작성할 수 있으며 일반적인 채널에서 입력 및 출력을 제공 할 수 있습니다. 물론 표준 허점 은 금지되어 있습니다.
이것은 code-golf 이므로 답이 짧을수록 (바이트) 더 좋습니다!
테스트 사례
진실한 :
1
3
5
7
9
20
31
86
154
525
팔시 :
2
4
6
8
10
15
21
50
100
500
리더 보드
다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.
답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.
# 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>
답변
답변
자바 (JDK 10) , 84 바이트
i->{for(int n=i;i-->1;)i|=((""+i).chars().map(x->x-48).sum()+i^n)-1>>-1;return~i<0;}
설명
i->{ // IntPredicate
for(int n=i;i-->1;) // for each number below n
i|=( // keep the sign of
(""+i).chars().map(x->x-48).sum() // sum of digits
+i // plus the number
^n // xor n (hoping for a zero)
)-1>>-1; // changing that into a negative number if equals to zero
return~i<0; // return i>=0
}
크레딧
- Kevin Cruijssen 덕분에 -1 바이트
- Nevay 덕분에 -1 바이트
답변
05AB1E , 8 바이트
LD€SO+ÊW
설명
L # push range [1 ... input]
D # duplicate
€S # split each number into a list of digits
O # sum digit lists
+ # add (n + digitSum(n))
Ê # check for inequality with input
W # min
답변
Brachylog , 12 바이트
¬{⟦∋Iẹ+;I+?}
설명
¬{ } Fails if succeeds, suceeds if fails:
⟦∋I I ∈ [0, ..., Input]
Iẹ+ The sum of the elements (i.e. digits) of I...
;I+? ... with I itself results in the Input
답변
C (gcc) , 70 67 65 바이트
i,r,d,j;f(n){for(r=i=n;d=j=--i;r*=d!=n)for(;j;j/=10)d+=j%10;i=r;}
다른 2 바이트를 제거하기 위해 반환 된 값은 더 이상 1이 아니라 숫자 자체입니다.
답변
옥타브 , 49 47 44 바이트
@(x)arrayfun(@(k)k+sum(num2str(k)-48)-x,1:x)
설명:
num2str
입력 숫자보다 많은 경우 공백을 구분 기호로 포함하는 문자열을 반환 하므로 범위에서 작업을 수행하는 것은 번거롭고 길다 . 따라서 48을 빼면 다음과 같이 1 -16 -16 2 -16 -16 3 -16 -16 4
입력 범위가 1 … 4 입니다. 모든 -16
바이트를 제거하려면 많은 바이트가 필요합니다.
따라서 우리는 이것을 사용하여 루프로 이것을 할 것 arrayfun
입니다. 번호의 각각에 대해 K = 1 … X , x는 입력이고, 우리는 추가 k
하고 그 자리 합 뺀다 x
. 이것은 k의 각 숫자에 대한 연산 결과와 함께 배열을 반환합니다 . 배열의 숫자 중 하나가 0이면 숫자는 자체 숫자가 아닙니다.
입력 20
및 21
의 경우 출력은 다음과 같습니다.
20: -18, -16, -14, -12, -10, -8, -6, -4, -2, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 2
21: -19, -17, -15, -13, -11, -9, -7, -5, -3, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 1, 3
input의 20
경우 0이 아닌 요소와 input의 경우 0이 아닌 요소가 하나 이상 21
있습니다. 그것은 그것이 20
자기 번호이며, 21
그렇지 않다는 것을 의미합니다 .
옥타브는 TIO- 링크에서 볼 수 있듯이 하나 이상의 0을 가진 배열을 false로 취급합니다.
답변
MATL , 11 바이트
t:tFYA!Xs+-
출력은 비어 있지 않은 배열이며, 모든 항목이 0이 아닌 경우에는 진실이며 하나 이상의 0이 포함 된 경우에는 거짓입니다.
온라인으로 사용해보십시오! 또는 진실 / 거짓 테스트를 포함한 모든 테스트 사례를 확인하십시오 .
설명
n = 10
예를 들어 입력 을 고려하십시오 .
t % Implicit input, n. Duplicate
% STACK: 10, 10
: % Range
% STACK: 10, [1 2 3 4 5 6 7 8 9 10]
t % Duplicate
% STACK: 10, [1 2 3 4 5 6 7 8 9 10], [1 2 3 4 5 6 7 8 9 10]
FYA! % Convert to base 10 digits and transpose
% STACK: 10, [1 2 3 4 5 6 7 8 9 10], [0 0 0 0 0 0 0 0 0 1
1 2 3 4 5 6 7 8 9 0]
Xs % Sum of each column
% STACK: 10, [1 2 3 4 5 6 7 8 9 10], [1 2 3 4 5 6 7 8 9 1]
+ % Add, element-wise
% STACK: 10, [2 4 6 8 10 12 14 16 18 11]
- % Subtract, element-wise
% STACK: [8 6 4 2 0 -2 -4 -6 -8 -1]
% Implicit display