38
\$\begingroup\$

A self number (also called a Colombian or Devlali number) is a natural number, x, where the equation n + <digit sum of n> = x has no solutions for any natural number n. For example, 21 is not a self number, as n = 15 results in 15 + 1 + 5 = 21. On the other hand, 20 is a self number, as no n can be found which satisfies such an equality.

As this definition references the digit sum, it is base dependent. For the purposes of this challenge, we will only be considering base 10 self numbers, which are sequence A003052 in the OEIS. Binary (A010061) and base 100 (A283002) self numbers have also been calalogued.

The Challenge

Given a positive integer x as input, output a truthy value if x is a self number in base 10, and a falsey value otherwise. For clarification of truthy and falsey values, refer to this meta post on the subject.

You may write a full program or function, and input and output may be provided on any of the usual channels. Standard loopholes are, of course, banned.

This is , so the shorter your answer (in bytes) the better!

Test cases

Truthy:

1
3
5
7
9
20
31
86
154
525

Falsey:

2
4
6
8
10
15
21
50
100
500

Sandbox link

Leaderboards

Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.

To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:

# Language Name, N bytes

where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

# Ruby, <s>104</s> <s>101</s> 96 bytes

If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:

# Perl, 43 + 2 (-p flag) = 45 bytes

You can also make the language name a link which will then show up in the leaderboard snippet:

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

\$\endgroup\$
5
  • \$\begingroup\$ There seems to be some discussion/disagreement of valid outputs, so I think I haven't been clear on what I was intending. I've added a sentence which should hopefully clear things up, referring to this meta post. Sorry if I've caused any confusion about this! \$\endgroup\$
    – Sok
    Commented Mar 22, 2018 at 14:23
  • \$\begingroup\$ Not to cause more confusion, but I think this discussion is relevant to why there was some confusion. Please consider this when making future challenges, as it can be difficult to post in languages that don't have if/else constructs if you use the old consensus. \$\endgroup\$ Commented Mar 22, 2018 at 15:07
  • \$\begingroup\$ @FryAmTheEggman I hadn't realised the consensus had shifted, I feel like a numpty now :/ Still, I've already added one clarification now, it seems wrong to change it again. I'll just bear it in mind for the next challenge I post. Thanks \$\endgroup\$
    – Sok
    Commented Mar 22, 2018 at 15:14
  • 4
    \$\begingroup\$ I am not any kind of number! I am a free man! \$\endgroup\$ Commented Mar 22, 2018 at 20:01
  • 2
    \$\begingroup\$ @DavidRicherby *sends white ball after you* \$\endgroup\$
    – Sok
    Commented Mar 23, 2018 at 8:20

45 Answers 45

9
\$\begingroup\$

Octave, 37 bytes

@(n)sum(dec2base(t=1:n,10)'-48,1)+t-n

Port of my MATL answer.

Try it online!

\$\endgroup\$
7
\$\begingroup\$

Java (JDK 10), 84 bytes

i->{for(int n=i;i-->1;)i|=((""+i).chars().map(x->x-48).sum()+i^n)-1>>-1;return~i<0;}

Try it online!

Explanation

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
}

Credits

\$\endgroup\$
2
  • 1
    \$\begingroup\$ -1 byte: n->{int i=n,r=0;for(;i-->0;)r=(""+i).chars().map(x->x-48).sum()+i==n?1:r;return r<1;} \$\endgroup\$ Commented Mar 22, 2018 at 15:08
  • 2
    \$\begingroup\$ 84 bytes: i->{for(int n=i;i-->1;)i|=((""+i).chars().map(x->x-48).sum()+i^n)-1>>-1;return~i<0;} \$\endgroup\$
    – Nevay
    Commented Mar 22, 2018 at 18:52
6
\$\begingroup\$

05AB1E, 8 bytes

LD€SO+ÊW

Try it online! or as a Test suite

Explanation

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
\$\endgroup\$
6
\$\begingroup\$

Brachylog, 12 bytes

¬{⟦∋Iẹ+;I+?}

Try it online!

Explanation

¬{         }    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
\$\endgroup\$
2
  • 1
    \$\begingroup\$ Is false. a truthy value by any objective method in a way that true. is not? I for one don't think so, and it looks like that would be supported by the meta consensus \$\endgroup\$
    – Sok
    Commented Mar 22, 2018 at 14:15
  • 1
    \$\begingroup\$ @Sok I added 3 uninteresting bytes to adress your concerns. \$\endgroup\$
    – Fatalize
    Commented Mar 22, 2018 at 14:25
5
\$\begingroup\$

Octave, 49 47 44 bytes

@(x)arrayfun(@(k)k+sum(num2str(k)-48)-x,1:x)

Try it online!

Explanation:

Trying to do the operation on a range is cumbersome and long, since num2str returns a string with spaces as separators if there are more than input number. Subtracting 48 would therefore give something like: 1 -16 -16 2 -16 -16 3 -16 -16 4 for an input range 1 ... 4. Getting rid of all the -16 takes a lot of bytes.

Therefore, we'll do this with a loop using arrayfun. For each of the numbers k = 1 .. x, where x is the input, we add k and its digit sum, and subtract x. This will return an array of with the result of that operation for each of the numbers in k. If any of the numbers in the array is a zero, the number is not a self number.

For inputs 20 and 21, the outputs are:

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

There are only non-zero elements for input 20, and at least one non-zero element for input 21. That means that 20 is a self number, and 21 is not.

Octave treats an array with at least one zero as false, as can be seen in the TIO-link.

\$\endgroup\$
5
\$\begingroup\$

C (gcc), 70 67 65 bytes

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;}

Try it online!

To shave off another 2 bytes, the truthy value returned is no longer 1, but the number itself.

\$\endgroup\$
5
\$\begingroup\$

J, 28, 24, 22 21 bytes

-1 byte thanks to Conor O'Brien

-2 byts thanks to ngn

$@-.(+1#.,.&.":)"+@i.

Try it online!

Explanation:

i. a list 0 .. n-1

( )"+ for each item in the list

.,.&.": convert it to a list of digits,

1# find their sum

+ and add it to the item

$@-. exclude the list from the argument and find the shape

\$\endgroup\$
6
  • 1
    \$\begingroup\$ I realize this is an old post, but "0 i. can be "+i. (-1 byte). \$\endgroup\$ Commented Jul 23, 2019 at 2:22
  • 1
    \$\begingroup\$ @ConorO'Brien Thank you! I think I didn't know this kind of golfs back then; now I use it (when I remember :) ) \$\endgroup\$ Commented Jul 23, 2019 at 6:17
  • 1
    \$\begingroup\$ -.@e. -> $@-. \$\endgroup\$
    – ngn
    Commented Jul 23, 2019 at 6:53
  • \$\begingroup\$ @ngn Thank you, really nice! \$\endgroup\$ Commented Jul 23, 2019 at 7:10
  • 1
    \$\begingroup\$ @GalenIvanov also [:( )"+i. -> ( )"+@i. \$\endgroup\$
    – ngn
    Commented Jul 23, 2019 at 7:13
4
\$\begingroup\$

MATL, 11 bytes

t:tFYA!Xs+-

The output is a non-empty array, which is truthy if all its entries are non-zero, and falsy if it contains one or more zeros.

Try it online! Or verify all test cases, including truthiness/falsihood test.

Explanation

Consider input n = 10 as an example.

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
\$\endgroup\$
3
\$\begingroup\$

APL (Dyalog), 14 bytes

~⊢∊⍳+(+/⍎¨∘⍕)¨∘⍳

Try it online!

How?

               ⍳   range
     (  ⍎¨∘⍕)      digits
     (+/    )      digit sums
   ⍳+              vectorized addition with the range
 ⊢∊                is the input included?
~                  negate
\$\endgroup\$
1
  • \$\begingroup\$ that's 16 bytes. to make them 15: +/⍎¨∘⍕ -> #+.⍎⍕ \$\endgroup\$
    – ngn
    Commented Jul 23, 2019 at 6:45
3
\$\begingroup\$

Jelly, 6 bytes

ḟDS+Ɗ€

For input n, this returns [n] if n is a self number, [] if not.

Try it online!

How it works

ḟDS+Ɗ€  Main link. Argument: n

     €  Call the link to the left for each k in [1, ..., n].
    Ɗ     Drei; combine the three links to the left into a monadic chain.
 D          Decimal; map k to the array of its digits in base 10.
  S         Take the sum.
   +        Add k to the sum of the k's digits.
ḟ       Filterfalse; promote n to [n], then remove all elements that appear in the
        array to the right.
        This returns [n] if the array doesn't contain n, [] if it does.
\$\endgroup\$
2
  • \$\begingroup\$ What encoding packs these six characters into only six bytes? \$\endgroup\$
    – WGroleau
    Commented Mar 23, 2018 at 1:51
  • 1
    \$\begingroup\$ Jelly uses a custom code page. \$\endgroup\$
    – Dennis
    Commented Mar 23, 2018 at 1:56
3
\$\begingroup\$

Pari/GP, 32 bytes

n->!sum(i=1,n,i+sumdigits(i)==n)

Try it online!

\$\endgroup\$
3
\$\begingroup\$

Haskell, 46 bytes

f x=and[x/=n+sum[read[d]|d<-show n]|n<-[1..x]]

Try it online!

\$\endgroup\$
3
\$\begingroup\$

Scala, 44 42 bytes

x=>0 to x forall(n=>x!=(n/:s"$n")(_+_-48))

Try it online

\$\endgroup\$
2
\$\begingroup\$

Perl 5 -a, 34 bytes

#!/usr/bin/perl -a
say!grep{s/./$_+=$&/reg;/@F/}1..$_

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Ruby, 38 bytes

->x{(1..x).all?{|n|n+n.digits.sum!=x}}

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Python 2, 70 66 Bytes

lambda x:[i for i in range(x)if i+sum([int(j)for j in`i`])==x]==[]

EDIT: -4 thanks to @user56656

\$\endgroup\$
6
  • 1
    \$\begingroup\$ in python2 you can use `i` instead of str(i) to save 4 bytes. \$\endgroup\$
    – Wheat Wizard
    Commented Mar 22, 2018 at 12:48
  • \$\begingroup\$ @user56656 thanks, I didn't know about that \$\endgroup\$
    – AvahW
    Commented Mar 22, 2018 at 13:26
  • 1
    \$\begingroup\$ You can drop the [ and ] inside the sum \$\endgroup\$
    – Mr. Xcoder
    Commented Mar 22, 2018 at 13:32
  • \$\begingroup\$ lambda x:[i for i in range(x)if i+sum(map(int,`i`))==x]==[] \$\endgroup\$
    – B. Eckles
    Commented Mar 22, 2018 at 19:31
  • \$\begingroup\$ lambda x:all(i+sum(map(int,`i`))-x for i in range(x)) \$\endgroup\$
    – B. Eckles
    Commented Mar 22, 2018 at 20:05
2
\$\begingroup\$

Pyth, 8 bytes

!/m+sjdT

Test suite.

If swapping truthy / falsy values is allowed, then we can drop the ! and get 7 bytes instead. One of Sok's suggestions helped me golf 2 bytes.

Explanation

!/m+sjdT – Full program. Takes an input Q from STDIN, outputs either True or False.
  m      – Map over the range [0 ... Q) with a variable d.
     jdT – Convert d to base 10.
    s    – Sum.
   +     – And add the sum to d itself.
 /       – Count the occurrences of Q in the result.
!        – Negate. Implicitly output the result.
\$\endgroup\$
7
  • \$\begingroup\$ I had .AmnQ+dsjdT, I had no idea about /. I've not used Pyth properly in a long time it seems! +1 \$\endgroup\$
    – Sok
    Commented Mar 22, 2018 at 13:43
  • \$\begingroup\$ @Sok / basically counts the occurrences of an element in a list. I can also use }, which tests whether an object appears in a list, but I think that's the same byte count. \$\endgroup\$
    – Mr. Xcoder
    Commented Mar 22, 2018 at 13:44
  • \$\begingroup\$ I think the S isn't required - input will be a positive integer, so having 0 in the mapping list won't be a problem? At least, it seems to work for the given test cases. \$\endgroup\$
    – Sok
    Commented Mar 22, 2018 at 13:47
  • \$\begingroup\$ @Sok Great, you're right! I shaved off one more byte thanks to this. \$\endgroup\$
    – Mr. Xcoder
    Commented Mar 22, 2018 at 13:50
  • \$\begingroup\$ How does +sjdT add sjdT to d? I've never seen anything like that \$\endgroup\$
    – RK.
    Commented Apr 4, 2018 at 21:32
2
\$\begingroup\$

Perl 6, 39 33 bytes

{!grep $_,map {$_+[+] .comb},^$_}

Try it out!

A bare block with implicit single parameter, called thus:

say {!grep $_,map {$_+[+] .comb},^$_}(500);
> False
say {!grep $_,map {$_+[+] .comb},^$_}(525);
> True

Since n + digits(n) >= n, we can just calculate the Colombian number for all the numbers up to our query value and see if any of them match. So this calculates the Colombian number for a given input:

{$_ + [+] .comb}

Which we apply to all the values up to our target:

(^$_).map({$_+[+] .comb})

But we only care whether any of them match, not what those values are, so as pointed out by @nwellenhof, we can grep:

grep $_, map {$_+[+] .comb}, ^$_

The rest is just coercion to bool and wrapping in a block.

39 bytes

{!((^$_).map({$_+[+] .comb}).any==$_)}

TIO test link provided by @Emigna

@nwellenhof pointed out that using grep would save 6 bytes!

\$\endgroup\$
3
2
\$\begingroup\$

Python 3, 60, 56, 55, 54 bytes

lambda x:{x}-{n+sum(map(int,str(n)))for n in range(x)}

Try it online!

-4 using all inverse instead of any
-1 by changing != to ^ by @jonathan-allan
-1 by using sets by @ovs

\$\endgroup\$
0
2
\$\begingroup\$

J, 20 bytes

#@-.i.+1#.10#.inv i.

Try it online!

                  i.     Range [0,n-1]
          10#.inv        To base 10
       1#.               Sum the digits
    i.+                  Plus the corresponding number
  -.                     Remove from the input, leaves an empty list if it was a self number.
#@                       An empty list is truthy, so return the length instead.
\$\endgroup\$
2
\$\begingroup\$

Japt -d!, 6 bytes

N¥U+ìx

Try it


Original, 8 bytes

Returns the input number for truthy or 0 for falsey. If only the empty array were falsey in JavaScript, this could be 7 bytes.

ÂNkUÇ+ìx

Try it


Explanation

             :Implicit input of integer U
   UÇ        :Generate the range [0,U) and pass each Z through a function
      ì      :  Digits of Z
       x     :  Reduce by addition
     +       :  Add to Z
  k          :Remove the elements in that array
 N           :From the array of inputs
            :Bitwise NOT NOT (~~), casts an empty array to 0 or a single element array to an integer 

Alternative

Ç+ìxÃe¦U

Try it

             :Implicit input of integer U
Ç            :Generate the range [0,U) and pass each Z through a function
  ì          :  Digits of Z
   x         :  Reduce by addition
 +           :  Add to Z
    Ã        :End function
     e       :Every
      ¦U     :  Does not equal U
\$\endgroup\$
2
\$\begingroup\$

Add++, 27 18 bytes

L,RFBDB+B]ARz€b+Ae

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Perl 5 -apl -MList::Util=sum,all, 28 bytes

$_=all{"@F"-sum/./g,$_}1..$_

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Lua, 81 bytes

for i=1,...do a=i+0(i..''):gsub('.',load'a=a+...')b=b or a==0+...end print(not b)

Try it online!

for i=1,...do
    a=i+0                            -- +0 is needed to avoid an error
    (i..''):gsub('.',load'a=a+...')  -- Sums up all the digits of i
    b=b or a==0+...                  -- Sets b to true if a equals the input
end 
print(not b)
\$\endgroup\$
2
\$\begingroup\$

FunStack alpha, 46 bytes

All? Minus Plus foldl ToBase 10 hook map From0

Try it at Replit!

Explanation

First, we construct a function that adds a number to its base-10 digit sum:

Plus foldl                 Left-fold second argument on addition, with first
                           argument as starting value
                     hook  Take a single argument; pass it to the above function
                           twice: first, unchanged, and second, passed through
                           the following function:
           ToBase 10       Convert to list of base-10 digits

This is a bit shorter than the alternatives:

Plus Sum ToBase 10 over hook
Sum Pair ToBase 10 compose3

Then:

                   From0  Range of integers from 0 up to input-1
           ... map        Map the above function to each
     Minus                Subtract each from the input
All?                      Are all results truthy (non-zero)?
\$\endgroup\$
2
\$\begingroup\$

Pip, 18 12 bytes

aNI:_+$+_M,a

Attempt This Online!

-6 thanks to @DLosc

Explanation

aNI:_+$+_M,a  ; Full program. Input (a) on command line
         M,a  ; Map over the range from 0 to a (_)
      $+_     ;  Sum _
    _+        ;  And add this to _
aNI:          ; Is a not in this list?
              ; Implicit output

Old:

$*Y{\a!=a+$+a}M\,a  ; Full program. Input (n) on command line.
               \,a  ; Range from 1 to n
   {         }M     ; Map over this list (a):
          $+a       ;  Sum the digits of a
        a+          ;  Add to a
    \a!=            ;  And check if it's not equal to n
$*Y                 ; Get the product of this list
                    ; Implicit output
\$\endgroup\$
1
  • \$\begingroup\$ @DLosc thanks, updated \$\endgroup\$
    – The Thonnu
    Commented Apr 19, 2023 at 6:33
2
\$\begingroup\$

Arturo, 36 34 bytes

$->x[every? x'n->x<>+∑digits<=n]

Try it

\$\endgroup\$
1
\$\begingroup\$

Retina, 55 bytes

.+
*
Lv`_+
_+
$&$.&
^_+
$&¶$&
\d
*
Cms`^(_+)\b.*¶\1\b
0

Try it online! Link includes test cases. Explanation:

.+
*

Convert input x to unary.

Lv`_+

Create a range from x down to 1.

_+
$&$.&

Suffix the decimal value of each n to its unary value.

^_+
$&¶$&

Make a copy of x.

\d
*

Convert each decimal digit of n to unary, thus adding the digits to the existing copy of n.

Cms`^(_+)\b.*¶\1\b

Check whether x appears in any of the results.

0

Invert the result.

\$\endgroup\$
1
\$\begingroup\$

JavaScript (ES6), 52 51 bytes

Saved 1 byte thanks to @l4m2

Returns 0 or 1.

n=>(g=k=>k?eval([...k+'k'].join`+`)-n&&g(k-1):1)(n)

Try it online!

\$\endgroup\$
1
  • \$\begingroup\$ n=>(g=k=>k?n-eval([...k+'k'].join`+`)&&g(k-1):1)(n) \$\endgroup\$
    – l4m2
    Commented Mar 22, 2018 at 9:59
1
\$\begingroup\$

Haskell, 63 58 bytes

s 0=0
s x=x`mod`10+s(x`div`10)
f n=all(\x->x+s x/=n)[1..n]

Try it online!

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.