Is it a Munchausen Number?
$begingroup$
A Munchausen Number in base $b$, also known as a Perfect digit-to-digit invariant or PDDI is a peculiar type of positive integer where the sum of its base-$b$ digits raised to themselves is equal to the number itself. They are named for the fictional Baron Munchausen, who apparently hoisted himself up via his own ponytail to save himself from drowning. A related concept is Narcissistic numbers.
For instance, $1$ is trivially a Munchausen number in every base because $1^1=1$. Additionally, every positive integer is a base-1 Munchausen number by definition.
More interestingly, $3435$ is a base-10 Munchausen number because $3^3+4^4+3^3+5^5=3435$, and in fact is the only other base-10 Munchausen number.
A partial list of Munchausen numbers in every base up to 35 can be found on the OEIS as sequence A166623.
Given a positive integer $n>0$, determine if it is a Munchausen number in any base $bgeq2$.
Rules
- Default I/O rules apply, so:
- Full program or functions are acceptable.
- Input can be from STDIN, as a function argument, and output can be to STDOUT, as a function return value, etc.
- Default loopholes apply.
- The output must be one of two distinct, consistent results. So
TRUE
is fine for truthy andFALSE
is fine for falsy, but you can reverse that or returnNone
for truthy and1
for falsy or whatever. Please specify the selected results in your answer. - Your answer has to work at least theoretically for any positive integer.
- Munchausen numbers use the convention $0^0=1$, so $2$ is a base-2 Munchausen number as $1^1+0^0=2$. Your code must follow this convention.
- Explanations are strongly encouraged, even though submissions will most likely use the brute-force search method.
- Using esoteric languages earns you brownie points since Munchausen was apparently a strange person.
Test Cases
Truthy
1 (all bases)
2 (base 2)
5 (base 3)
28 (base 9 and base 25)
29 (base 4)
55 (base 4)
3435 (base 10)
923362 (base 9)
260 (base 128)
257 (base 64 and base 253)
Falsy
3
4
591912
3163
17
This is code-golf, so the shortest answer in each language (in bytes) wins!
code-golf number decision-problem
$endgroup$
add a comment |
$begingroup$
A Munchausen Number in base $b$, also known as a Perfect digit-to-digit invariant or PDDI is a peculiar type of positive integer where the sum of its base-$b$ digits raised to themselves is equal to the number itself. They are named for the fictional Baron Munchausen, who apparently hoisted himself up via his own ponytail to save himself from drowning. A related concept is Narcissistic numbers.
For instance, $1$ is trivially a Munchausen number in every base because $1^1=1$. Additionally, every positive integer is a base-1 Munchausen number by definition.
More interestingly, $3435$ is a base-10 Munchausen number because $3^3+4^4+3^3+5^5=3435$, and in fact is the only other base-10 Munchausen number.
A partial list of Munchausen numbers in every base up to 35 can be found on the OEIS as sequence A166623.
Given a positive integer $n>0$, determine if it is a Munchausen number in any base $bgeq2$.
Rules
- Default I/O rules apply, so:
- Full program or functions are acceptable.
- Input can be from STDIN, as a function argument, and output can be to STDOUT, as a function return value, etc.
- Default loopholes apply.
- The output must be one of two distinct, consistent results. So
TRUE
is fine for truthy andFALSE
is fine for falsy, but you can reverse that or returnNone
for truthy and1
for falsy or whatever. Please specify the selected results in your answer. - Your answer has to work at least theoretically for any positive integer.
- Munchausen numbers use the convention $0^0=1$, so $2$ is a base-2 Munchausen number as $1^1+0^0=2$. Your code must follow this convention.
- Explanations are strongly encouraged, even though submissions will most likely use the brute-force search method.
- Using esoteric languages earns you brownie points since Munchausen was apparently a strange person.
Test Cases
Truthy
1 (all bases)
2 (base 2)
5 (base 3)
28 (base 9 and base 25)
29 (base 4)
55 (base 4)
3435 (base 10)
923362 (base 9)
260 (base 128)
257 (base 64 and base 253)
Falsy
3
4
591912
3163
17
This is code-golf, so the shortest answer in each language (in bytes) wins!
code-golf number decision-problem
$endgroup$
$begingroup$
Can we assume the maximum base we need to calculate is 35/36?
$endgroup$
– Benjamin Urquhart
May 8 at 16:52
7
$begingroup$
@BenjaminUrquhart no you may not;determine if it's a Munchausen number in any base b≥2.
$endgroup$
– Giuseppe
May 8 at 17:00
$begingroup$
How about just guessing "no." There are a countably infinite number of integers and a provably finite number of Munchausens, so probability of choosing a Munchausen number is (n)/(Infinity) = 0 . //ducks and runs
$endgroup$
– Carl Witthoft
May 10 at 18:52
$begingroup$
@CarlWitthoft I laughed at the suggestion, but of course that would be an invalid submission :-)
$endgroup$
– Giuseppe
May 10 at 19:01
add a comment |
$begingroup$
A Munchausen Number in base $b$, also known as a Perfect digit-to-digit invariant or PDDI is a peculiar type of positive integer where the sum of its base-$b$ digits raised to themselves is equal to the number itself. They are named for the fictional Baron Munchausen, who apparently hoisted himself up via his own ponytail to save himself from drowning. A related concept is Narcissistic numbers.
For instance, $1$ is trivially a Munchausen number in every base because $1^1=1$. Additionally, every positive integer is a base-1 Munchausen number by definition.
More interestingly, $3435$ is a base-10 Munchausen number because $3^3+4^4+3^3+5^5=3435$, and in fact is the only other base-10 Munchausen number.
A partial list of Munchausen numbers in every base up to 35 can be found on the OEIS as sequence A166623.
Given a positive integer $n>0$, determine if it is a Munchausen number in any base $bgeq2$.
Rules
- Default I/O rules apply, so:
- Full program or functions are acceptable.
- Input can be from STDIN, as a function argument, and output can be to STDOUT, as a function return value, etc.
- Default loopholes apply.
- The output must be one of two distinct, consistent results. So
TRUE
is fine for truthy andFALSE
is fine for falsy, but you can reverse that or returnNone
for truthy and1
for falsy or whatever. Please specify the selected results in your answer. - Your answer has to work at least theoretically for any positive integer.
- Munchausen numbers use the convention $0^0=1$, so $2$ is a base-2 Munchausen number as $1^1+0^0=2$. Your code must follow this convention.
- Explanations are strongly encouraged, even though submissions will most likely use the brute-force search method.
- Using esoteric languages earns you brownie points since Munchausen was apparently a strange person.
Test Cases
Truthy
1 (all bases)
2 (base 2)
5 (base 3)
28 (base 9 and base 25)
29 (base 4)
55 (base 4)
3435 (base 10)
923362 (base 9)
260 (base 128)
257 (base 64 and base 253)
Falsy
3
4
591912
3163
17
This is code-golf, so the shortest answer in each language (in bytes) wins!
code-golf number decision-problem
$endgroup$
A Munchausen Number in base $b$, also known as a Perfect digit-to-digit invariant or PDDI is a peculiar type of positive integer where the sum of its base-$b$ digits raised to themselves is equal to the number itself. They are named for the fictional Baron Munchausen, who apparently hoisted himself up via his own ponytail to save himself from drowning. A related concept is Narcissistic numbers.
For instance, $1$ is trivially a Munchausen number in every base because $1^1=1$. Additionally, every positive integer is a base-1 Munchausen number by definition.
More interestingly, $3435$ is a base-10 Munchausen number because $3^3+4^4+3^3+5^5=3435$, and in fact is the only other base-10 Munchausen number.
A partial list of Munchausen numbers in every base up to 35 can be found on the OEIS as sequence A166623.
Given a positive integer $n>0$, determine if it is a Munchausen number in any base $bgeq2$.
Rules
- Default I/O rules apply, so:
- Full program or functions are acceptable.
- Input can be from STDIN, as a function argument, and output can be to STDOUT, as a function return value, etc.
- Default loopholes apply.
- The output must be one of two distinct, consistent results. So
TRUE
is fine for truthy andFALSE
is fine for falsy, but you can reverse that or returnNone
for truthy and1
for falsy or whatever. Please specify the selected results in your answer. - Your answer has to work at least theoretically for any positive integer.
- Munchausen numbers use the convention $0^0=1$, so $2$ is a base-2 Munchausen number as $1^1+0^0=2$. Your code must follow this convention.
- Explanations are strongly encouraged, even though submissions will most likely use the brute-force search method.
- Using esoteric languages earns you brownie points since Munchausen was apparently a strange person.
Test Cases
Truthy
1 (all bases)
2 (base 2)
5 (base 3)
28 (base 9 and base 25)
29 (base 4)
55 (base 4)
3435 (base 10)
923362 (base 9)
260 (base 128)
257 (base 64 and base 253)
Falsy
3
4
591912
3163
17
This is code-golf, so the shortest answer in each language (in bytes) wins!
code-golf number decision-problem
code-golf number decision-problem
edited May 9 at 17:06
Giuseppe
asked May 8 at 16:40
GiuseppeGiuseppe
18.6k31358
18.6k31358
$begingroup$
Can we assume the maximum base we need to calculate is 35/36?
$endgroup$
– Benjamin Urquhart
May 8 at 16:52
7
$begingroup$
@BenjaminUrquhart no you may not;determine if it's a Munchausen number in any base b≥2.
$endgroup$
– Giuseppe
May 8 at 17:00
$begingroup$
How about just guessing "no." There are a countably infinite number of integers and a provably finite number of Munchausens, so probability of choosing a Munchausen number is (n)/(Infinity) = 0 . //ducks and runs
$endgroup$
– Carl Witthoft
May 10 at 18:52
$begingroup$
@CarlWitthoft I laughed at the suggestion, but of course that would be an invalid submission :-)
$endgroup$
– Giuseppe
May 10 at 19:01
add a comment |
$begingroup$
Can we assume the maximum base we need to calculate is 35/36?
$endgroup$
– Benjamin Urquhart
May 8 at 16:52
7
$begingroup$
@BenjaminUrquhart no you may not;determine if it's a Munchausen number in any base b≥2.
$endgroup$
– Giuseppe
May 8 at 17:00
$begingroup$
How about just guessing "no." There are a countably infinite number of integers and a provably finite number of Munchausens, so probability of choosing a Munchausen number is (n)/(Infinity) = 0 . //ducks and runs
$endgroup$
– Carl Witthoft
May 10 at 18:52
$begingroup$
@CarlWitthoft I laughed at the suggestion, but of course that would be an invalid submission :-)
$endgroup$
– Giuseppe
May 10 at 19:01
$begingroup$
Can we assume the maximum base we need to calculate is 35/36?
$endgroup$
– Benjamin Urquhart
May 8 at 16:52
$begingroup$
Can we assume the maximum base we need to calculate is 35/36?
$endgroup$
– Benjamin Urquhart
May 8 at 16:52
7
7
$begingroup$
@BenjaminUrquhart no you may not;
determine if it's a Munchausen number in any base b≥2.
$endgroup$
– Giuseppe
May 8 at 17:00
$begingroup$
@BenjaminUrquhart no you may not;
determine if it's a Munchausen number in any base b≥2.
$endgroup$
– Giuseppe
May 8 at 17:00
$begingroup$
How about just guessing "no." There are a countably infinite number of integers and a provably finite number of Munchausens, so probability of choosing a Munchausen number is (n)/(Infinity) = 0 . //ducks and runs
$endgroup$
– Carl Witthoft
May 10 at 18:52
$begingroup$
How about just guessing "no." There are a countably infinite number of integers and a provably finite number of Munchausens, so probability of choosing a Munchausen number is (n)/(Infinity) = 0 . //ducks and runs
$endgroup$
– Carl Witthoft
May 10 at 18:52
$begingroup$
@CarlWitthoft I laughed at the suggestion, but of course that would be an invalid submission :-)
$endgroup$
– Giuseppe
May 10 at 19:01
$begingroup$
@CarlWitthoft I laughed at the suggestion, but of course that would be an invalid submission :-)
$endgroup$
– Giuseppe
May 10 at 19:01
add a comment |
19 Answers
19
active
oldest
votes
$begingroup$
05AB1E, 7 bytes
LвDmOQZ
Try it online!
The larger test cases will time out on TIO.
Explanation
L # push range [1 ... input]
в # convert input to a digit list in each of these bases
Dm # raise each digit to the power of itself
O # sum each
Q # check each for equality with input
Z # max
$endgroup$
3
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
1
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for1^1
is 1.
$endgroup$
– Emigna
May 9 at 6:14
add a comment |
$begingroup$
Jelly, 8 bytes
bŻ*`§ċ⁸Ị
Yields 0
for Munchausen and 1
otherwise.
Try it online!
Or see the first five hundred positive integers split up as [[Munchausen], [non-Munchausen]]
.
How?
bŻ*`§ċ⁸Ị - Link: integer, n
Ż - zero-range -> [0,1,2,3,4,...,n]
b - (n) to base (vectorises)
` - with left as both arguments:
* - exponentiation (vectorises)
§ - sums
ċ - count occurrences of:
⁸ - n
Ị - is insignificant (abs(x) <= 1)
Alternative for 1
for Munchausen and 0
otherwise:
bŻ*`§ċ>1
$endgroup$
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
I think my previous version was invalid since it did not say that1
was Munchausen.
$endgroup$
– Jonathan Allan
May 8 at 17:59
add a comment |
$begingroup$
J, 3328 27 bytes
e.1#.i.@>:^~@(#.inv ::1)"0]
Try it online!
e.
is the input an element of...
1#.
the sum of each row of...
i.@>: ... ]
0..input and the input itself, passed as left and right args to...
^~@(#.inv)"0
convert the right arg (input) to each base in the left arg and raise each result elementwise to itself^~@
.
::1
finally this is needed because you can't convert uniquely to base 1, so it errors. in this case, we simply return 1, which won't match for any number except 1, which is what we want
$endgroup$
add a comment |
$begingroup$
R, 72 69 bytes
-1 byte thanks to digEmAll
function(x){for(b in 1+1:x)F=F|!sum((a=x%/%b^(0:log(x,b))%%b)^a)-x;F}
Try it online!
Outputs TRUE
for Munchausen numbers and FALSE
otherwise.
x%/%b^(0:log(x,b))%%b)
converts x
to base b
, and the for loop does the rest of the work (reassigning F
, which is FALSE
by default).
We need to allow the base b
to go all the way to x+1
instead of x
to handle the case x=1
.
$endgroup$
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing+
with|
and removing!
, then I realized I wrote 71 but my code was actually 70 :D
$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
|
show 2 more comments
$begingroup$
Japt, 13 bytes
õ@ìXÄ x_pZ
øN
Saved one byte thanks to @Shaggy
Try it
$endgroup$
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
You can get that byte back by replacingÃÃøU
with<newline>øN
.
$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
@Shaggy Nice trick withN
, I never used it before!
$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
add a comment |
$begingroup$
Perl 6, 51 bytes
{?grep {$_==sum [Z**] .polymod($^a xx*)xx 2},^$_+2}
Try it online!
Explanation:
{ } # Anonymous code block
?grep { } # Do any
,^$_+2 # Of the bases from 2 to n+1
sum # Have the sum of
.polymod($^a xx*) # The digits of n in that base
[Z**] xx 2 # Raised to the power of themselves
$_== # Equal to the original number?
$endgroup$
add a comment |
$begingroup$
Ruby, 50 bytes
TIO timed out on 591912. Somehow edges out Perl by 1 byte... (at time of writing)
->n{(2..n+1).any?{|b|n.digits(b).sum{|d|d**d}==n}}
Try it online!
$endgroup$
add a comment |
$begingroup$
JavaScript (ES7), 60 bytes
Returns a Boolean value.
n=>(F=b=>(g=n=>n&&g(n/b|0)+(n%=b)**n)(n)==n||b<n&&F(b+1))(2)
Try it online!
Commented
n => // n = input
( F = b => // F = recursive function taking a base b
( g = n => // g = recursive function taking an integer n
n && // if n is not equal to 0:
g(n / b | 0) + // do a recursive call with floor(n / b)
(n %= b) ** n // and add (n mod b) ** (n mod b)
)(n) // initial call to g with the original value of n
== n || // return true if the result is equal to n
b < n && // otherwise, if b is less than n:
F(b + 1) // try with b + 1
)(2) // initial call to F with b = 2
$endgroup$
add a comment |
$begingroup$
APL (dzaima/APL), 23 13 bytes
⊢∊⊂+.*⍨⍤⊤⍨¨2…
Try it online!
Thanks to Adám, ngn and dzaima, we managed to shave 10 bytes off this answer by using dzaima/APL.
Prefix tacit function. Munchausen numbers return 1, else 0.
How
⊢∊⊂+.*⍨⍤⊤⍨¨2… ⍝ Prefix tacit function, argument will be called ⍵
2… ⍝ Generate the integer sequence [2..⍵]
⊤⍨¨ ⍝ Convert ⍵ to each base in the vector
+.*⍨⍤ ⍝ Raise each digit of each element in the vector to itself, then sum
⊢∊⊂ ⍝ Check if ⍵ is in the resulting vector.
$endgroup$
add a comment |
$begingroup$
Wolfram Language (Mathematica), 65 bytes
#<2||!Tr[Check[#^#,1]&/@#~IntegerDigits~i]~Table~{i,2,#}~FreeQ~#&
Try it online!
-4 bytes from @attinat
$endgroup$
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
add a comment |
$begingroup$
Charcoal, 17 bytes
Nθ¬Φθ⁼θΣE↨θ⁺²ιXλλ
Try it online! Link is to verbose version of code. My 16-byte attempt didn't work but that might be a bug in Charcoal, so watch this space. Outputs -
unless the number is a Munchausen number. Explanation:
Nθ Input `n` as a number
Φθ Try bases `2` .. `n+1`
Σ Sum of
↨θ `n` converted to base
⁺²ι Next trial base
E Each digit
Xλλ Raised to its own power
⁼ Equals
θ `n`
¬ Logical Not
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 99 bytes
n=>Enumerable.Range(2,n).Any(x=>{int g=0,t=n;for(;t>0;t/=x)g+=(int)Math.Pow(t%x,t%x);return g==n;})
Try it online!
$endgroup$
add a comment |
$begingroup$
Haskell, 61 bytes
_#0=0
b#n|m<-mod n b=m^m+b#div n b
f n=elem n$1:map(#n)[2..n]
Returns True
for Munchausen and False
otherwise.
Try it online!
$endgroup$
add a comment |
$begingroup$
C (gcc) -lm
, 79 75 bytes
f(n,b,i,g,c){for(g=b=1;b+++~n;g*=!!c)for(c=i=n;c-=pow(i%b,i%b),i/=b;);n=g;}
Try it online!
Returns 0
for Munchausen numbers, and 1
otherwise.
also 75 bytes
a,b;f(n){for(a=b=1;b+++~n;a*=g(n)!=n);n=a;}g(n){n=n?g(n/b)+pow(n%b,n%b):0;}
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 83 81 bytes
def f(n,b=2):
s=0;m=n
while m:k=m%b;s+=k**k;m/=b
return s==n or b<n>0<f(n,b+1)
Try it online!
Returns 1
for truthy and 0
for falsey. Because of the recursion, can't practically deal with 591912
, but it works in the abstract.
$endgroup$
add a comment |
$begingroup$
Perl 6, 66 65 bytes
{$^a==1||[+] map {$a==[+] map {$_**$_},$a.polymod($_ xx*)},2..$a}
Try it online!
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
f=n=>{for(b=2;n-b++;){for(c=0,r=n;r;r=(r-a)/b)c+=(a=(r%b))**a;if(n==c)return 1}return 0}
$endgroup$
add a comment |
$begingroup$
Icon, 109 bytes
procedure m(n)
every k:=2to n&{i:=n;s:=0
while{a:=i%k;a<:=1;s+:=a^a;0<(i/:=k)}
n=s&return 1}
return n=1|0
end
Try it online!
Times out for 591912
. Icon treats 0^0
as an overflow and that's why I need an additional check for zero.
$endgroup$
add a comment |
$begingroup$
Stax, 15 bytes
╡!←!║╝âñoêû►╦ä▓
Run and debug it
Takes very long for the larger test cases.
Explanation:
{^xs|E{c|*m|+x=m|a Full program, unpacked
Implicitly input x
{ m Map over bases [1 .. x]
^ Increment base (effectively mapping over [2 .. x+1])
xs Tuck x below base
|E Get digits of x in base
{ m Map over digits:
c|* copy and power
|+ Sum
x= sum = x?
|a Check if any element in array is true
Implicit output
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "200"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f185319%2fis-it-a-munchausen-number%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
19 Answers
19
active
oldest
votes
19 Answers
19
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
05AB1E, 7 bytes
LвDmOQZ
Try it online!
The larger test cases will time out on TIO.
Explanation
L # push range [1 ... input]
в # convert input to a digit list in each of these bases
Dm # raise each digit to the power of itself
O # sum each
Q # check each for equality with input
Z # max
$endgroup$
3
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
1
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for1^1
is 1.
$endgroup$
– Emigna
May 9 at 6:14
add a comment |
$begingroup$
05AB1E, 7 bytes
LвDmOQZ
Try it online!
The larger test cases will time out on TIO.
Explanation
L # push range [1 ... input]
в # convert input to a digit list in each of these bases
Dm # raise each digit to the power of itself
O # sum each
Q # check each for equality with input
Z # max
$endgroup$
3
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
1
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for1^1
is 1.
$endgroup$
– Emigna
May 9 at 6:14
add a comment |
$begingroup$
05AB1E, 7 bytes
LвDmOQZ
Try it online!
The larger test cases will time out on TIO.
Explanation
L # push range [1 ... input]
в # convert input to a digit list in each of these bases
Dm # raise each digit to the power of itself
O # sum each
Q # check each for equality with input
Z # max
$endgroup$
05AB1E, 7 bytes
LвDmOQZ
Try it online!
The larger test cases will time out on TIO.
Explanation
L # push range [1 ... input]
в # convert input to a digit list in each of these bases
Dm # raise each digit to the power of itself
O # sum each
Q # check each for equality with input
Z # max
edited May 8 at 17:07
answered May 8 at 17:01
EmignaEmigna
49.5k534150
49.5k534150
3
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
1
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for1^1
is 1.
$endgroup$
– Emigna
May 9 at 6:14
add a comment |
3
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
1
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for1^1
is 1.
$endgroup$
– Emigna
May 9 at 6:14
3
3
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
$begingroup$
How is this filtering base-1 from the results?
$endgroup$
– Shaggy
May 8 at 20:32
1
1
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for
1^1
is 1.$endgroup$
– Emigna
May 9 at 6:14
$begingroup$
@Shaggy: With this base conversion, all numbers are 1 in base-1. The only number that will return true for
1^1
is 1.$endgroup$
– Emigna
May 9 at 6:14
add a comment |
$begingroup$
Jelly, 8 bytes
bŻ*`§ċ⁸Ị
Yields 0
for Munchausen and 1
otherwise.
Try it online!
Or see the first five hundred positive integers split up as [[Munchausen], [non-Munchausen]]
.
How?
bŻ*`§ċ⁸Ị - Link: integer, n
Ż - zero-range -> [0,1,2,3,4,...,n]
b - (n) to base (vectorises)
` - with left as both arguments:
* - exponentiation (vectorises)
§ - sums
ċ - count occurrences of:
⁸ - n
Ị - is insignificant (abs(x) <= 1)
Alternative for 1
for Munchausen and 0
otherwise:
bŻ*`§ċ>1
$endgroup$
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
I think my previous version was invalid since it did not say that1
was Munchausen.
$endgroup$
– Jonathan Allan
May 8 at 17:59
add a comment |
$begingroup$
Jelly, 8 bytes
bŻ*`§ċ⁸Ị
Yields 0
for Munchausen and 1
otherwise.
Try it online!
Or see the first five hundred positive integers split up as [[Munchausen], [non-Munchausen]]
.
How?
bŻ*`§ċ⁸Ị - Link: integer, n
Ż - zero-range -> [0,1,2,3,4,...,n]
b - (n) to base (vectorises)
` - with left as both arguments:
* - exponentiation (vectorises)
§ - sums
ċ - count occurrences of:
⁸ - n
Ị - is insignificant (abs(x) <= 1)
Alternative for 1
for Munchausen and 0
otherwise:
bŻ*`§ċ>1
$endgroup$
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
I think my previous version was invalid since it did not say that1
was Munchausen.
$endgroup$
– Jonathan Allan
May 8 at 17:59
add a comment |
$begingroup$
Jelly, 8 bytes
bŻ*`§ċ⁸Ị
Yields 0
for Munchausen and 1
otherwise.
Try it online!
Or see the first five hundred positive integers split up as [[Munchausen], [non-Munchausen]]
.
How?
bŻ*`§ċ⁸Ị - Link: integer, n
Ż - zero-range -> [0,1,2,3,4,...,n]
b - (n) to base (vectorises)
` - with left as both arguments:
* - exponentiation (vectorises)
§ - sums
ċ - count occurrences of:
⁸ - n
Ị - is insignificant (abs(x) <= 1)
Alternative for 1
for Munchausen and 0
otherwise:
bŻ*`§ċ>1
$endgroup$
Jelly, 8 bytes
bŻ*`§ċ⁸Ị
Yields 0
for Munchausen and 1
otherwise.
Try it online!
Or see the first five hundred positive integers split up as [[Munchausen], [non-Munchausen]]
.
How?
bŻ*`§ċ⁸Ị - Link: integer, n
Ż - zero-range -> [0,1,2,3,4,...,n]
b - (n) to base (vectorises)
` - with left as both arguments:
* - exponentiation (vectorises)
§ - sums
ċ - count occurrences of:
⁸ - n
Ị - is insignificant (abs(x) <= 1)
Alternative for 1
for Munchausen and 0
otherwise:
bŻ*`§ċ>1
edited May 8 at 18:15
answered May 8 at 17:06
Jonathan AllanJonathan Allan
55.9k538178
55.9k538178
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
I think my previous version was invalid since it did not say that1
was Munchausen.
$endgroup$
– Jonathan Allan
May 8 at 17:59
add a comment |
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
I think my previous version was invalid since it did not say that1
was Munchausen.
$endgroup$
– Jonathan Allan
May 8 at 17:59
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
Um... why do I think that your previous version was valid and this one is invalid?
$endgroup$
– Erik the Outgolfer
May 8 at 17:57
$begingroup$
I think my previous version was invalid since it did not say that
1
was Munchausen.$endgroup$
– Jonathan Allan
May 8 at 17:59
$begingroup$
I think my previous version was invalid since it did not say that
1
was Munchausen.$endgroup$
– Jonathan Allan
May 8 at 17:59
add a comment |
$begingroup$
J, 3328 27 bytes
e.1#.i.@>:^~@(#.inv ::1)"0]
Try it online!
e.
is the input an element of...
1#.
the sum of each row of...
i.@>: ... ]
0..input and the input itself, passed as left and right args to...
^~@(#.inv)"0
convert the right arg (input) to each base in the left arg and raise each result elementwise to itself^~@
.
::1
finally this is needed because you can't convert uniquely to base 1, so it errors. in this case, we simply return 1, which won't match for any number except 1, which is what we want
$endgroup$
add a comment |
$begingroup$
J, 3328 27 bytes
e.1#.i.@>:^~@(#.inv ::1)"0]
Try it online!
e.
is the input an element of...
1#.
the sum of each row of...
i.@>: ... ]
0..input and the input itself, passed as left and right args to...
^~@(#.inv)"0
convert the right arg (input) to each base in the left arg and raise each result elementwise to itself^~@
.
::1
finally this is needed because you can't convert uniquely to base 1, so it errors. in this case, we simply return 1, which won't match for any number except 1, which is what we want
$endgroup$
add a comment |
$begingroup$
J, 3328 27 bytes
e.1#.i.@>:^~@(#.inv ::1)"0]
Try it online!
e.
is the input an element of...
1#.
the sum of each row of...
i.@>: ... ]
0..input and the input itself, passed as left and right args to...
^~@(#.inv)"0
convert the right arg (input) to each base in the left arg and raise each result elementwise to itself^~@
.
::1
finally this is needed because you can't convert uniquely to base 1, so it errors. in this case, we simply return 1, which won't match for any number except 1, which is what we want
$endgroup$
J, 3328 27 bytes
e.1#.i.@>:^~@(#.inv ::1)"0]
Try it online!
e.
is the input an element of...
1#.
the sum of each row of...
i.@>: ... ]
0..input and the input itself, passed as left and right args to...
^~@(#.inv)"0
convert the right arg (input) to each base in the left arg and raise each result elementwise to itself^~@
.
::1
finally this is needed because you can't convert uniquely to base 1, so it errors. in this case, we simply return 1, which won't match for any number except 1, which is what we want
edited May 9 at 0:55
answered May 8 at 17:53
JonahJonah
3,3781019
3,3781019
add a comment |
add a comment |
$begingroup$
R, 72 69 bytes
-1 byte thanks to digEmAll
function(x){for(b in 1+1:x)F=F|!sum((a=x%/%b^(0:log(x,b))%%b)^a)-x;F}
Try it online!
Outputs TRUE
for Munchausen numbers and FALSE
otherwise.
x%/%b^(0:log(x,b))%%b)
converts x
to base b
, and the for loop does the rest of the work (reassigning F
, which is FALSE
by default).
We need to allow the base b
to go all the way to x+1
instead of x
to handle the case x=1
.
$endgroup$
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing+
with|
and removing!
, then I realized I wrote 71 but my code was actually 70 :D
$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
|
show 2 more comments
$begingroup$
R, 72 69 bytes
-1 byte thanks to digEmAll
function(x){for(b in 1+1:x)F=F|!sum((a=x%/%b^(0:log(x,b))%%b)^a)-x;F}
Try it online!
Outputs TRUE
for Munchausen numbers and FALSE
otherwise.
x%/%b^(0:log(x,b))%%b)
converts x
to base b
, and the for loop does the rest of the work (reassigning F
, which is FALSE
by default).
We need to allow the base b
to go all the way to x+1
instead of x
to handle the case x=1
.
$endgroup$
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing+
with|
and removing!
, then I realized I wrote 71 but my code was actually 70 :D
$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
|
show 2 more comments
$begingroup$
R, 72 69 bytes
-1 byte thanks to digEmAll
function(x){for(b in 1+1:x)F=F|!sum((a=x%/%b^(0:log(x,b))%%b)^a)-x;F}
Try it online!
Outputs TRUE
for Munchausen numbers and FALSE
otherwise.
x%/%b^(0:log(x,b))%%b)
converts x
to base b
, and the for loop does the rest of the work (reassigning F
, which is FALSE
by default).
We need to allow the base b
to go all the way to x+1
instead of x
to handle the case x=1
.
$endgroup$
R, 72 69 bytes
-1 byte thanks to digEmAll
function(x){for(b in 1+1:x)F=F|!sum((a=x%/%b^(0:log(x,b))%%b)^a)-x;F}
Try it online!
Outputs TRUE
for Munchausen numbers and FALSE
otherwise.
x%/%b^(0:log(x,b))%%b)
converts x
to base b
, and the for loop does the rest of the work (reassigning F
, which is FALSE
by default).
We need to allow the base b
to go all the way to x+1
instead of x
to handle the case x=1
.
edited May 11 at 20:31
answered May 8 at 20:08
Robin RyderRobin Ryder
1,378215
1,378215
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing+
with|
and removing!
, then I realized I wrote 71 but my code was actually 70 :D
$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
|
show 2 more comments
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing+
with|
and removing!
, then I realized I wrote 71 but my code was actually 70 :D
$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
71 using a for loop
$endgroup$
– digEmAll
May 11 at 13:22
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
@digEmAll Thanks! I shaved off another 2 bytes by using booleans instead of integers.
$endgroup$
– Robin Ryder
May 11 at 20:20
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing
+
with |
and removing !
, then I realized I wrote 71 but my code was actually 70 :D$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
I was trying to understand what you changed to save 2 bytes from mine besides changing
+
with |
and removing !
, then I realized I wrote 71 but my code was actually 70 :D$endgroup$
– digEmAll
May 12 at 6:16
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
Great idea using | BTW !
$endgroup$
– digEmAll
May 12 at 6:19
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
$begingroup$
@digEmAll Oh yes, I didn't even think to check your byte count! :)
$endgroup$
– Robin Ryder
May 12 at 8:37
|
show 2 more comments
$begingroup$
Japt, 13 bytes
õ@ìXÄ x_pZ
øN
Saved one byte thanks to @Shaggy
Try it
$endgroup$
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
You can get that byte back by replacingÃÃøU
with<newline>øN
.
$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
@Shaggy Nice trick withN
, I never used it before!
$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
add a comment |
$begingroup$
Japt, 13 bytes
õ@ìXÄ x_pZ
øN
Saved one byte thanks to @Shaggy
Try it
$endgroup$
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
You can get that byte back by replacingÃÃøU
with<newline>øN
.
$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
@Shaggy Nice trick withN
, I never used it before!
$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
add a comment |
$begingroup$
Japt, 13 bytes
õ@ìXÄ x_pZ
øN
Saved one byte thanks to @Shaggy
Try it
$endgroup$
Japt, 13 bytes
õ@ìXÄ x_pZ
øN
Saved one byte thanks to @Shaggy
Try it
edited May 8 at 20:39
answered May 8 at 18:46
Embodiment of IgnoranceEmbodiment of Ignorance
3,874128
3,874128
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
You can get that byte back by replacingÃÃøU
with<newline>øN
.
$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
@Shaggy Nice trick withN
, I never used it before!
$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
add a comment |
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
You can get that byte back by replacingÃÃøU
with<newline>øN
.
$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
@Shaggy Nice trick withN
, I never used it before!
$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
@Shaggy Fixed at the cost of a byte
$endgroup$
– Embodiment of Ignorance
May 8 at 20:26
$begingroup$
You can get that byte back by replacing
ÃÃøU
with <newline>øN
.$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
You can get that byte back by replacing
ÃÃøU
with <newline>øN
.$endgroup$
– Shaggy
May 8 at 20:34
$begingroup$
@Shaggy Nice trick with
N
, I never used it before!$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
$begingroup$
@Shaggy Nice trick with
N
, I never used it before!$endgroup$
– Embodiment of Ignorance
May 8 at 20:38
add a comment |
$begingroup$
Perl 6, 51 bytes
{?grep {$_==sum [Z**] .polymod($^a xx*)xx 2},^$_+2}
Try it online!
Explanation:
{ } # Anonymous code block
?grep { } # Do any
,^$_+2 # Of the bases from 2 to n+1
sum # Have the sum of
.polymod($^a xx*) # The digits of n in that base
[Z**] xx 2 # Raised to the power of themselves
$_== # Equal to the original number?
$endgroup$
add a comment |
$begingroup$
Perl 6, 51 bytes
{?grep {$_==sum [Z**] .polymod($^a xx*)xx 2},^$_+2}
Try it online!
Explanation:
{ } # Anonymous code block
?grep { } # Do any
,^$_+2 # Of the bases from 2 to n+1
sum # Have the sum of
.polymod($^a xx*) # The digits of n in that base
[Z**] xx 2 # Raised to the power of themselves
$_== # Equal to the original number?
$endgroup$
add a comment |
$begingroup$
Perl 6, 51 bytes
{?grep {$_==sum [Z**] .polymod($^a xx*)xx 2},^$_+2}
Try it online!
Explanation:
{ } # Anonymous code block
?grep { } # Do any
,^$_+2 # Of the bases from 2 to n+1
sum # Have the sum of
.polymod($^a xx*) # The digits of n in that base
[Z**] xx 2 # Raised to the power of themselves
$_== # Equal to the original number?
$endgroup$
Perl 6, 51 bytes
{?grep {$_==sum [Z**] .polymod($^a xx*)xx 2},^$_+2}
Try it online!
Explanation:
{ } # Anonymous code block
?grep { } # Do any
,^$_+2 # Of the bases from 2 to n+1
sum # Have the sum of
.polymod($^a xx*) # The digits of n in that base
[Z**] xx 2 # Raised to the power of themselves
$_== # Equal to the original number?
edited May 9 at 0:47
answered May 8 at 21:56
Jo KingJo King
28.5k367134
28.5k367134
add a comment |
add a comment |
$begingroup$
Ruby, 50 bytes
TIO timed out on 591912. Somehow edges out Perl by 1 byte... (at time of writing)
->n{(2..n+1).any?{|b|n.digits(b).sum{|d|d**d}==n}}
Try it online!
$endgroup$
add a comment |
$begingroup$
Ruby, 50 bytes
TIO timed out on 591912. Somehow edges out Perl by 1 byte... (at time of writing)
->n{(2..n+1).any?{|b|n.digits(b).sum{|d|d**d}==n}}
Try it online!
$endgroup$
add a comment |
$begingroup$
Ruby, 50 bytes
TIO timed out on 591912. Somehow edges out Perl by 1 byte... (at time of writing)
->n{(2..n+1).any?{|b|n.digits(b).sum{|d|d**d}==n}}
Try it online!
$endgroup$
Ruby, 50 bytes
TIO timed out on 591912. Somehow edges out Perl by 1 byte... (at time of writing)
->n{(2..n+1).any?{|b|n.digits(b).sum{|d|d**d}==n}}
Try it online!
answered May 9 at 2:36
Value InkValue Ink
8,205731
8,205731
add a comment |
add a comment |
$begingroup$
JavaScript (ES7), 60 bytes
Returns a Boolean value.
n=>(F=b=>(g=n=>n&&g(n/b|0)+(n%=b)**n)(n)==n||b<n&&F(b+1))(2)
Try it online!
Commented
n => // n = input
( F = b => // F = recursive function taking a base b
( g = n => // g = recursive function taking an integer n
n && // if n is not equal to 0:
g(n / b | 0) + // do a recursive call with floor(n / b)
(n %= b) ** n // and add (n mod b) ** (n mod b)
)(n) // initial call to g with the original value of n
== n || // return true if the result is equal to n
b < n && // otherwise, if b is less than n:
F(b + 1) // try with b + 1
)(2) // initial call to F with b = 2
$endgroup$
add a comment |
$begingroup$
JavaScript (ES7), 60 bytes
Returns a Boolean value.
n=>(F=b=>(g=n=>n&&g(n/b|0)+(n%=b)**n)(n)==n||b<n&&F(b+1))(2)
Try it online!
Commented
n => // n = input
( F = b => // F = recursive function taking a base b
( g = n => // g = recursive function taking an integer n
n && // if n is not equal to 0:
g(n / b | 0) + // do a recursive call with floor(n / b)
(n %= b) ** n // and add (n mod b) ** (n mod b)
)(n) // initial call to g with the original value of n
== n || // return true if the result is equal to n
b < n && // otherwise, if b is less than n:
F(b + 1) // try with b + 1
)(2) // initial call to F with b = 2
$endgroup$
add a comment |
$begingroup$
JavaScript (ES7), 60 bytes
Returns a Boolean value.
n=>(F=b=>(g=n=>n&&g(n/b|0)+(n%=b)**n)(n)==n||b<n&&F(b+1))(2)
Try it online!
Commented
n => // n = input
( F = b => // F = recursive function taking a base b
( g = n => // g = recursive function taking an integer n
n && // if n is not equal to 0:
g(n / b | 0) + // do a recursive call with floor(n / b)
(n %= b) ** n // and add (n mod b) ** (n mod b)
)(n) // initial call to g with the original value of n
== n || // return true if the result is equal to n
b < n && // otherwise, if b is less than n:
F(b + 1) // try with b + 1
)(2) // initial call to F with b = 2
$endgroup$
JavaScript (ES7), 60 bytes
Returns a Boolean value.
n=>(F=b=>(g=n=>n&&g(n/b|0)+(n%=b)**n)(n)==n||b<n&&F(b+1))(2)
Try it online!
Commented
n => // n = input
( F = b => // F = recursive function taking a base b
( g = n => // g = recursive function taking an integer n
n && // if n is not equal to 0:
g(n / b | 0) + // do a recursive call with floor(n / b)
(n %= b) ** n // and add (n mod b) ** (n mod b)
)(n) // initial call to g with the original value of n
== n || // return true if the result is equal to n
b < n && // otherwise, if b is less than n:
F(b + 1) // try with b + 1
)(2) // initial call to F with b = 2
edited May 9 at 18:22
answered May 8 at 17:24
ArnauldArnauld
85.1k7100349
85.1k7100349
add a comment |
add a comment |
$begingroup$
APL (dzaima/APL), 23 13 bytes
⊢∊⊂+.*⍨⍤⊤⍨¨2…
Try it online!
Thanks to Adám, ngn and dzaima, we managed to shave 10 bytes off this answer by using dzaima/APL.
Prefix tacit function. Munchausen numbers return 1, else 0.
How
⊢∊⊂+.*⍨⍤⊤⍨¨2… ⍝ Prefix tacit function, argument will be called ⍵
2… ⍝ Generate the integer sequence [2..⍵]
⊤⍨¨ ⍝ Convert ⍵ to each base in the vector
+.*⍨⍤ ⍝ Raise each digit of each element in the vector to itself, then sum
⊢∊⊂ ⍝ Check if ⍵ is in the resulting vector.
$endgroup$
add a comment |
$begingroup$
APL (dzaima/APL), 23 13 bytes
⊢∊⊂+.*⍨⍤⊤⍨¨2…
Try it online!
Thanks to Adám, ngn and dzaima, we managed to shave 10 bytes off this answer by using dzaima/APL.
Prefix tacit function. Munchausen numbers return 1, else 0.
How
⊢∊⊂+.*⍨⍤⊤⍨¨2… ⍝ Prefix tacit function, argument will be called ⍵
2… ⍝ Generate the integer sequence [2..⍵]
⊤⍨¨ ⍝ Convert ⍵ to each base in the vector
+.*⍨⍤ ⍝ Raise each digit of each element in the vector to itself, then sum
⊢∊⊂ ⍝ Check if ⍵ is in the resulting vector.
$endgroup$
add a comment |
$begingroup$
APL (dzaima/APL), 23 13 bytes
⊢∊⊂+.*⍨⍤⊤⍨¨2…
Try it online!
Thanks to Adám, ngn and dzaima, we managed to shave 10 bytes off this answer by using dzaima/APL.
Prefix tacit function. Munchausen numbers return 1, else 0.
How
⊢∊⊂+.*⍨⍤⊤⍨¨2… ⍝ Prefix tacit function, argument will be called ⍵
2… ⍝ Generate the integer sequence [2..⍵]
⊤⍨¨ ⍝ Convert ⍵ to each base in the vector
+.*⍨⍤ ⍝ Raise each digit of each element in the vector to itself, then sum
⊢∊⊂ ⍝ Check if ⍵ is in the resulting vector.
$endgroup$
APL (dzaima/APL), 23 13 bytes
⊢∊⊂+.*⍨⍤⊤⍨¨2…
Try it online!
Thanks to Adám, ngn and dzaima, we managed to shave 10 bytes off this answer by using dzaima/APL.
Prefix tacit function. Munchausen numbers return 1, else 0.
How
⊢∊⊂+.*⍨⍤⊤⍨¨2… ⍝ Prefix tacit function, argument will be called ⍵
2… ⍝ Generate the integer sequence [2..⍵]
⊤⍨¨ ⍝ Convert ⍵ to each base in the vector
+.*⍨⍤ ⍝ Raise each digit of each element in the vector to itself, then sum
⊢∊⊂ ⍝ Check if ⍵ is in the resulting vector.
edited May 10 at 13:17
answered May 9 at 22:51
J. SalléJ. Sallé
2,008322
2,008322
add a comment |
add a comment |
$begingroup$
Wolfram Language (Mathematica), 65 bytes
#<2||!Tr[Check[#^#,1]&/@#~IntegerDigits~i]~Table~{i,2,#}~FreeQ~#&
Try it online!
-4 bytes from @attinat
$endgroup$
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
add a comment |
$begingroup$
Wolfram Language (Mathematica), 65 bytes
#<2||!Tr[Check[#^#,1]&/@#~IntegerDigits~i]~Table~{i,2,#}~FreeQ~#&
Try it online!
-4 bytes from @attinat
$endgroup$
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
add a comment |
$begingroup$
Wolfram Language (Mathematica), 65 bytes
#<2||!Tr[Check[#^#,1]&/@#~IntegerDigits~i]~Table~{i,2,#}~FreeQ~#&
Try it online!
-4 bytes from @attinat
$endgroup$
Wolfram Language (Mathematica), 65 bytes
#<2||!Tr[Check[#^#,1]&/@#~IntegerDigits~i]~Table~{i,2,#}~FreeQ~#&
Try it online!
-4 bytes from @attinat
edited May 8 at 18:42
answered May 8 at 17:16
J42161217J42161217
15.1k21457
15.1k21457
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
add a comment |
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
$begingroup$
65 bytes which also included some bugfixes
$endgroup$
– attinat
May 8 at 18:37
add a comment |
$begingroup$
Charcoal, 17 bytes
Nθ¬Φθ⁼θΣE↨θ⁺²ιXλλ
Try it online! Link is to verbose version of code. My 16-byte attempt didn't work but that might be a bug in Charcoal, so watch this space. Outputs -
unless the number is a Munchausen number. Explanation:
Nθ Input `n` as a number
Φθ Try bases `2` .. `n+1`
Σ Sum of
↨θ `n` converted to base
⁺²ι Next trial base
E Each digit
Xλλ Raised to its own power
⁼ Equals
θ `n`
¬ Logical Not
$endgroup$
add a comment |
$begingroup$
Charcoal, 17 bytes
Nθ¬Φθ⁼θΣE↨θ⁺²ιXλλ
Try it online! Link is to verbose version of code. My 16-byte attempt didn't work but that might be a bug in Charcoal, so watch this space. Outputs -
unless the number is a Munchausen number. Explanation:
Nθ Input `n` as a number
Φθ Try bases `2` .. `n+1`
Σ Sum of
↨θ `n` converted to base
⁺²ι Next trial base
E Each digit
Xλλ Raised to its own power
⁼ Equals
θ `n`
¬ Logical Not
$endgroup$
add a comment |
$begingroup$
Charcoal, 17 bytes
Nθ¬Φθ⁼θΣE↨θ⁺²ιXλλ
Try it online! Link is to verbose version of code. My 16-byte attempt didn't work but that might be a bug in Charcoal, so watch this space. Outputs -
unless the number is a Munchausen number. Explanation:
Nθ Input `n` as a number
Φθ Try bases `2` .. `n+1`
Σ Sum of
↨θ `n` converted to base
⁺²ι Next trial base
E Each digit
Xλλ Raised to its own power
⁼ Equals
θ `n`
¬ Logical Not
$endgroup$
Charcoal, 17 bytes
Nθ¬Φθ⁼θΣE↨θ⁺²ιXλλ
Try it online! Link is to verbose version of code. My 16-byte attempt didn't work but that might be a bug in Charcoal, so watch this space. Outputs -
unless the number is a Munchausen number. Explanation:
Nθ Input `n` as a number
Φθ Try bases `2` .. `n+1`
Σ Sum of
↨θ `n` converted to base
⁺²ι Next trial base
E Each digit
Xλλ Raised to its own power
⁼ Equals
θ `n`
¬ Logical Not
answered May 8 at 20:02
NeilNeil
84.6k845183
84.6k845183
add a comment |
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 99 bytes
n=>Enumerable.Range(2,n).Any(x=>{int g=0,t=n;for(;t>0;t/=x)g+=(int)Math.Pow(t%x,t%x);return g==n;})
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 99 bytes
n=>Enumerable.Range(2,n).Any(x=>{int g=0,t=n;for(;t>0;t/=x)g+=(int)Math.Pow(t%x,t%x);return g==n;})
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 99 bytes
n=>Enumerable.Range(2,n).Any(x=>{int g=0,t=n;for(;t>0;t/=x)g+=(int)Math.Pow(t%x,t%x);return g==n;})
Try it online!
$endgroup$
C# (Visual C# Interactive Compiler), 99 bytes
n=>Enumerable.Range(2,n).Any(x=>{int g=0,t=n;for(;t>0;t/=x)g+=(int)Math.Pow(t%x,t%x);return g==n;})
Try it online!
edited May 8 at 20:28
answered May 8 at 20:18
Embodiment of IgnoranceEmbodiment of Ignorance
3,874128
3,874128
add a comment |
add a comment |
$begingroup$
Haskell, 61 bytes
_#0=0
b#n|m<-mod n b=m^m+b#div n b
f n=elem n$1:map(#n)[2..n]
Returns True
for Munchausen and False
otherwise.
Try it online!
$endgroup$
add a comment |
$begingroup$
Haskell, 61 bytes
_#0=0
b#n|m<-mod n b=m^m+b#div n b
f n=elem n$1:map(#n)[2..n]
Returns True
for Munchausen and False
otherwise.
Try it online!
$endgroup$
add a comment |
$begingroup$
Haskell, 61 bytes
_#0=0
b#n|m<-mod n b=m^m+b#div n b
f n=elem n$1:map(#n)[2..n]
Returns True
for Munchausen and False
otherwise.
Try it online!
$endgroup$
Haskell, 61 bytes
_#0=0
b#n|m<-mod n b=m^m+b#div n b
f n=elem n$1:map(#n)[2..n]
Returns True
for Munchausen and False
otherwise.
Try it online!
answered May 8 at 23:06
niminimi
33.2k32491
33.2k32491
add a comment |
add a comment |
$begingroup$
C (gcc) -lm
, 79 75 bytes
f(n,b,i,g,c){for(g=b=1;b+++~n;g*=!!c)for(c=i=n;c-=pow(i%b,i%b),i/=b;);n=g;}
Try it online!
Returns 0
for Munchausen numbers, and 1
otherwise.
also 75 bytes
a,b;f(n){for(a=b=1;b+++~n;a*=g(n)!=n);n=a;}g(n){n=n?g(n/b)+pow(n%b,n%b):0;}
Try it online!
$endgroup$
add a comment |
$begingroup$
C (gcc) -lm
, 79 75 bytes
f(n,b,i,g,c){for(g=b=1;b+++~n;g*=!!c)for(c=i=n;c-=pow(i%b,i%b),i/=b;);n=g;}
Try it online!
Returns 0
for Munchausen numbers, and 1
otherwise.
also 75 bytes
a,b;f(n){for(a=b=1;b+++~n;a*=g(n)!=n);n=a;}g(n){n=n?g(n/b)+pow(n%b,n%b):0;}
Try it online!
$endgroup$
add a comment |
$begingroup$
C (gcc) -lm
, 79 75 bytes
f(n,b,i,g,c){for(g=b=1;b+++~n;g*=!!c)for(c=i=n;c-=pow(i%b,i%b),i/=b;);n=g;}
Try it online!
Returns 0
for Munchausen numbers, and 1
otherwise.
also 75 bytes
a,b;f(n){for(a=b=1;b+++~n;a*=g(n)!=n);n=a;}g(n){n=n?g(n/b)+pow(n%b,n%b):0;}
Try it online!
$endgroup$
C (gcc) -lm
, 79 75 bytes
f(n,b,i,g,c){for(g=b=1;b+++~n;g*=!!c)for(c=i=n;c-=pow(i%b,i%b),i/=b;);n=g;}
Try it online!
Returns 0
for Munchausen numbers, and 1
otherwise.
also 75 bytes
a,b;f(n){for(a=b=1;b+++~n;a*=g(n)!=n);n=a;}g(n){n=n?g(n/b)+pow(n%b,n%b):0;}
Try it online!
edited May 9 at 0:59
answered May 8 at 19:52
attinatattinat
1,05717
1,05717
add a comment |
add a comment |
$begingroup$
Python 2, 83 81 bytes
def f(n,b=2):
s=0;m=n
while m:k=m%b;s+=k**k;m/=b
return s==n or b<n>0<f(n,b+1)
Try it online!
Returns 1
for truthy and 0
for falsey. Because of the recursion, can't practically deal with 591912
, but it works in the abstract.
$endgroup$
add a comment |
$begingroup$
Python 2, 83 81 bytes
def f(n,b=2):
s=0;m=n
while m:k=m%b;s+=k**k;m/=b
return s==n or b<n>0<f(n,b+1)
Try it online!
Returns 1
for truthy and 0
for falsey. Because of the recursion, can't practically deal with 591912
, but it works in the abstract.
$endgroup$
add a comment |
$begingroup$
Python 2, 83 81 bytes
def f(n,b=2):
s=0;m=n
while m:k=m%b;s+=k**k;m/=b
return s==n or b<n>0<f(n,b+1)
Try it online!
Returns 1
for truthy and 0
for falsey. Because of the recursion, can't practically deal with 591912
, but it works in the abstract.
$endgroup$
Python 2, 83 81 bytes
def f(n,b=2):
s=0;m=n
while m:k=m%b;s+=k**k;m/=b
return s==n or b<n>0<f(n,b+1)
Try it online!
Returns 1
for truthy and 0
for falsey. Because of the recursion, can't practically deal with 591912
, but it works in the abstract.
edited May 10 at 6:36
answered May 9 at 2:50
Chas BrownChas Brown
5,5491623
5,5491623
add a comment |
add a comment |
$begingroup$
Perl 6, 66 65 bytes
{$^a==1||[+] map {$a==[+] map {$_**$_},$a.polymod($_ xx*)},2..$a}
Try it online!
$endgroup$
add a comment |
$begingroup$
Perl 6, 66 65 bytes
{$^a==1||[+] map {$a==[+] map {$_**$_},$a.polymod($_ xx*)},2..$a}
Try it online!
$endgroup$
add a comment |
$begingroup$
Perl 6, 66 65 bytes
{$^a==1||[+] map {$a==[+] map {$_**$_},$a.polymod($_ xx*)},2..$a}
Try it online!
$endgroup$
Perl 6, 66 65 bytes
{$^a==1||[+] map {$a==[+] map {$_**$_},$a.polymod($_ xx*)},2..$a}
Try it online!
edited May 9 at 2:05
answered May 9 at 1:34
bb94bb94
1,431715
1,431715
add a comment |
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
f=n=>{for(b=2;n-b++;){for(c=0,r=n;r;r=(r-a)/b)c+=(a=(r%b))**a;if(n==c)return 1}return 0}
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
f=n=>{for(b=2;n-b++;){for(c=0,r=n;r;r=(r-a)/b)c+=(a=(r%b))**a;if(n==c)return 1}return 0}
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
f=n=>{for(b=2;n-b++;){for(c=0,r=n;r;r=(r-a)/b)c+=(a=(r%b))**a;if(n==c)return 1}return 0}
$endgroup$
JavaScript (ES6), 88 bytes
f=n=>{for(b=2;n-b++;){for(c=0,r=n;r;r=(r-a)/b)c+=(a=(r%b))**a;if(n==c)return 1}return 0}
answered May 9 at 2:42
NaruyokoNaruyoko
15916
15916
add a comment |
add a comment |
$begingroup$
Icon, 109 bytes
procedure m(n)
every k:=2to n&{i:=n;s:=0
while{a:=i%k;a<:=1;s+:=a^a;0<(i/:=k)}
n=s&return 1}
return n=1|0
end
Try it online!
Times out for 591912
. Icon treats 0^0
as an overflow and that's why I need an additional check for zero.
$endgroup$
add a comment |
$begingroup$
Icon, 109 bytes
procedure m(n)
every k:=2to n&{i:=n;s:=0
while{a:=i%k;a<:=1;s+:=a^a;0<(i/:=k)}
n=s&return 1}
return n=1|0
end
Try it online!
Times out for 591912
. Icon treats 0^0
as an overflow and that's why I need an additional check for zero.
$endgroup$
add a comment |
$begingroup$
Icon, 109 bytes
procedure m(n)
every k:=2to n&{i:=n;s:=0
while{a:=i%k;a<:=1;s+:=a^a;0<(i/:=k)}
n=s&return 1}
return n=1|0
end
Try it online!
Times out for 591912
. Icon treats 0^0
as an overflow and that's why I need an additional check for zero.
$endgroup$
Icon, 109 bytes
procedure m(n)
every k:=2to n&{i:=n;s:=0
while{a:=i%k;a<:=1;s+:=a^a;0<(i/:=k)}
n=s&return 1}
return n=1|0
end
Try it online!
Times out for 591912
. Icon treats 0^0
as an overflow and that's why I need an additional check for zero.
edited May 9 at 8:43
answered May 9 at 8:37
Galen IvanovGalen Ivanov
8,35711237
8,35711237
add a comment |
add a comment |
$begingroup$
Stax, 15 bytes
╡!←!║╝âñoêû►╦ä▓
Run and debug it
Takes very long for the larger test cases.
Explanation:
{^xs|E{c|*m|+x=m|a Full program, unpacked
Implicitly input x
{ m Map over bases [1 .. x]
^ Increment base (effectively mapping over [2 .. x+1])
xs Tuck x below base
|E Get digits of x in base
{ m Map over digits:
c|* copy and power
|+ Sum
x= sum = x?
|a Check if any element in array is true
Implicit output
$endgroup$
add a comment |
$begingroup$
Stax, 15 bytes
╡!←!║╝âñoêû►╦ä▓
Run and debug it
Takes very long for the larger test cases.
Explanation:
{^xs|E{c|*m|+x=m|a Full program, unpacked
Implicitly input x
{ m Map over bases [1 .. x]
^ Increment base (effectively mapping over [2 .. x+1])
xs Tuck x below base
|E Get digits of x in base
{ m Map over digits:
c|* copy and power
|+ Sum
x= sum = x?
|a Check if any element in array is true
Implicit output
$endgroup$
add a comment |
$begingroup$
Stax, 15 bytes
╡!←!║╝âñoêû►╦ä▓
Run and debug it
Takes very long for the larger test cases.
Explanation:
{^xs|E{c|*m|+x=m|a Full program, unpacked
Implicitly input x
{ m Map over bases [1 .. x]
^ Increment base (effectively mapping over [2 .. x+1])
xs Tuck x below base
|E Get digits of x in base
{ m Map over digits:
c|* copy and power
|+ Sum
x= sum = x?
|a Check if any element in array is true
Implicit output
$endgroup$
Stax, 15 bytes
╡!←!║╝âñoêû►╦ä▓
Run and debug it
Takes very long for the larger test cases.
Explanation:
{^xs|E{c|*m|+x=m|a Full program, unpacked
Implicitly input x
{ m Map over bases [1 .. x]
^ Increment base (effectively mapping over [2 .. x+1])
xs Tuck x below base
|E Get digits of x in base
{ m Map over digits:
c|* copy and power
|+ Sum
x= sum = x?
|a Check if any element in array is true
Implicit output
edited May 10 at 13:18
answered May 9 at 19:24
wastlwastl
2,344527
2,344527
add a comment |
add a comment |
If this is an answer to a challenge…
…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.
…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.
More generally…
…Please make sure to answer the question and provide sufficient detail.
…Avoid asking for help, clarification or responding to other answers (use comments instead).
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f185319%2fis-it-a-munchausen-number%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Can we assume the maximum base we need to calculate is 35/36?
$endgroup$
– Benjamin Urquhart
May 8 at 16:52
7
$begingroup$
@BenjaminUrquhart no you may not;
determine if it's a Munchausen number in any base b≥2.
$endgroup$
– Giuseppe
May 8 at 17:00
$begingroup$
How about just guessing "no." There are a countably infinite number of integers and a provably finite number of Munchausens, so probability of choosing a Munchausen number is (n)/(Infinity) = 0 . //ducks and runs
$endgroup$
– Carl Witthoft
May 10 at 18:52
$begingroup$
@CarlWitthoft I laughed at the suggestion, but of course that would be an invalid submission :-)
$endgroup$
– Giuseppe
May 10 at 19:01