Nth subset of a set
$begingroup$
The task
Given the set
$$S = left[{1,2,3,4,5,6,7,8}right]$$
and an integer
$$0 leq N < 2^{|S|}$$
find the Nth subset.
Input/Output
N is given as an unsigned integer on stdin. You must print the Nth subset in a format suitable for your language (this may include [1,2,3]
,{1,2,3}
,[1, 2, 3]
,1 2 3
,1,2,3
etc. for as long as it is a human readable text format).
A little bit about subsets
There is a relationship between subsets and numbers in base two. Each digit
$$d_{i}$$ specifies whether the ith element of the set is within the subset.
For example 00000000 would be the empty set and 10000001 is the subset containing [1,8]
(the last and first element). You get the Nth subset by converting the number into base 2 and then the subset includes all elements where $$d_{i} > 0$$. The 3rd subset (3 = 00000011) thus contains [1,2]
. The rightmost digit is digit #0. It's ok to print [2,1]
. The set does not have to be sorted.
Addendums:
Yes, the set is fixed to 1..8
. The set is not part of the input. Input is just N.
Yes, you may use alternate input forms.
All expected outputs for all N: https://tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPaoqs7jg/38A
code-golf
$endgroup$
|
show 13 more comments
$begingroup$
The task
Given the set
$$S = left[{1,2,3,4,5,6,7,8}right]$$
and an integer
$$0 leq N < 2^{|S|}$$
find the Nth subset.
Input/Output
N is given as an unsigned integer on stdin. You must print the Nth subset in a format suitable for your language (this may include [1,2,3]
,{1,2,3}
,[1, 2, 3]
,1 2 3
,1,2,3
etc. for as long as it is a human readable text format).
A little bit about subsets
There is a relationship between subsets and numbers in base two. Each digit
$$d_{i}$$ specifies whether the ith element of the set is within the subset.
For example 00000000 would be the empty set and 10000001 is the subset containing [1,8]
(the last and first element). You get the Nth subset by converting the number into base 2 and then the subset includes all elements where $$d_{i} > 0$$. The 3rd subset (3 = 00000011) thus contains [1,2]
. The rightmost digit is digit #0. It's ok to print [2,1]
. The set does not have to be sorted.
Addendums:
Yes, the set is fixed to 1..8
. The set is not part of the input. Input is just N.
Yes, you may use alternate input forms.
All expected outputs for all N: https://tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPaoqs7jg/38A
code-golf
$endgroup$
1
$begingroup$
Is the set specifically1
to8
, or is it any set?
$endgroup$
– Jo King
Nov 24 '18 at 13:36
1
$begingroup$
I'm surprised nobody asked before: Would you be so kind to allow functions as submissions which take the input as argument and not force languages to use stdin (which some are not able to)? The question is about subsets and not fiddling with inputs.
$endgroup$
– BMO
Nov 24 '18 at 13:53
5
$begingroup$
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
$endgroup$
– BMO
Nov 24 '18 at 14:34
1
$begingroup$
Since the set is limited to 1..8, an output such as"123"
would be unambiguous. Is it valid?
$endgroup$
– Arnauld
Nov 24 '18 at 14:45
2
$begingroup$
Can we use 0-indexed [0,7] instead of [1,8]?
$endgroup$
– Erik the Outgolfer
Nov 24 '18 at 15:11
|
show 13 more comments
$begingroup$
The task
Given the set
$$S = left[{1,2,3,4,5,6,7,8}right]$$
and an integer
$$0 leq N < 2^{|S|}$$
find the Nth subset.
Input/Output
N is given as an unsigned integer on stdin. You must print the Nth subset in a format suitable for your language (this may include [1,2,3]
,{1,2,3}
,[1, 2, 3]
,1 2 3
,1,2,3
etc. for as long as it is a human readable text format).
A little bit about subsets
There is a relationship between subsets and numbers in base two. Each digit
$$d_{i}$$ specifies whether the ith element of the set is within the subset.
For example 00000000 would be the empty set and 10000001 is the subset containing [1,8]
(the last and first element). You get the Nth subset by converting the number into base 2 and then the subset includes all elements where $$d_{i} > 0$$. The 3rd subset (3 = 00000011) thus contains [1,2]
. The rightmost digit is digit #0. It's ok to print [2,1]
. The set does not have to be sorted.
Addendums:
Yes, the set is fixed to 1..8
. The set is not part of the input. Input is just N.
Yes, you may use alternate input forms.
All expected outputs for all N: https://tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPaoqs7jg/38A
code-golf
$endgroup$
The task
Given the set
$$S = left[{1,2,3,4,5,6,7,8}right]$$
and an integer
$$0 leq N < 2^{|S|}$$
find the Nth subset.
Input/Output
N is given as an unsigned integer on stdin. You must print the Nth subset in a format suitable for your language (this may include [1,2,3]
,{1,2,3}
,[1, 2, 3]
,1 2 3
,1,2,3
etc. for as long as it is a human readable text format).
A little bit about subsets
There is a relationship between subsets and numbers in base two. Each digit
$$d_{i}$$ specifies whether the ith element of the set is within the subset.
For example 00000000 would be the empty set and 10000001 is the subset containing [1,8]
(the last and first element). You get the Nth subset by converting the number into base 2 and then the subset includes all elements where $$d_{i} > 0$$. The 3rd subset (3 = 00000011) thus contains [1,2]
. The rightmost digit is digit #0. It's ok to print [2,1]
. The set does not have to be sorted.
Addendums:
Yes, the set is fixed to 1..8
. The set is not part of the input. Input is just N.
Yes, you may use alternate input forms.
All expected outputs for all N: https://tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPaoqs7jg/38A
code-golf
code-golf
edited Nov 24 '18 at 14:05
mroman
asked Nov 24 '18 at 13:17
mromanmroman
1,102613
1,102613
1
$begingroup$
Is the set specifically1
to8
, or is it any set?
$endgroup$
– Jo King
Nov 24 '18 at 13:36
1
$begingroup$
I'm surprised nobody asked before: Would you be so kind to allow functions as submissions which take the input as argument and not force languages to use stdin (which some are not able to)? The question is about subsets and not fiddling with inputs.
$endgroup$
– BMO
Nov 24 '18 at 13:53
5
$begingroup$
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
$endgroup$
– BMO
Nov 24 '18 at 14:34
1
$begingroup$
Since the set is limited to 1..8, an output such as"123"
would be unambiguous. Is it valid?
$endgroup$
– Arnauld
Nov 24 '18 at 14:45
2
$begingroup$
Can we use 0-indexed [0,7] instead of [1,8]?
$endgroup$
– Erik the Outgolfer
Nov 24 '18 at 15:11
|
show 13 more comments
1
$begingroup$
Is the set specifically1
to8
, or is it any set?
$endgroup$
– Jo King
Nov 24 '18 at 13:36
1
$begingroup$
I'm surprised nobody asked before: Would you be so kind to allow functions as submissions which take the input as argument and not force languages to use stdin (which some are not able to)? The question is about subsets and not fiddling with inputs.
$endgroup$
– BMO
Nov 24 '18 at 13:53
5
$begingroup$
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
$endgroup$
– BMO
Nov 24 '18 at 14:34
1
$begingroup$
Since the set is limited to 1..8, an output such as"123"
would be unambiguous. Is it valid?
$endgroup$
– Arnauld
Nov 24 '18 at 14:45
2
$begingroup$
Can we use 0-indexed [0,7] instead of [1,8]?
$endgroup$
– Erik the Outgolfer
Nov 24 '18 at 15:11
1
1
$begingroup$
Is the set specifically
1
to 8
, or is it any set?$endgroup$
– Jo King
Nov 24 '18 at 13:36
$begingroup$
Is the set specifically
1
to 8
, or is it any set?$endgroup$
– Jo King
Nov 24 '18 at 13:36
1
1
$begingroup$
I'm surprised nobody asked before: Would you be so kind to allow functions as submissions which take the input as argument and not force languages to use stdin (which some are not able to)? The question is about subsets and not fiddling with inputs.
$endgroup$
– BMO
Nov 24 '18 at 13:53
$begingroup$
I'm surprised nobody asked before: Would you be so kind to allow functions as submissions which take the input as argument and not force languages to use stdin (which some are not able to)? The question is about subsets and not fiddling with inputs.
$endgroup$
– BMO
Nov 24 '18 at 13:53
5
5
$begingroup$
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
$endgroup$
– BMO
Nov 24 '18 at 14:34
$begingroup$
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
$endgroup$
– BMO
Nov 24 '18 at 14:34
1
1
$begingroup$
Since the set is limited to 1..8, an output such as
"123"
would be unambiguous. Is it valid?$endgroup$
– Arnauld
Nov 24 '18 at 14:45
$begingroup$
Since the set is limited to 1..8, an output such as
"123"
would be unambiguous. Is it valid?$endgroup$
– Arnauld
Nov 24 '18 at 14:45
2
2
$begingroup$
Can we use 0-indexed [0,7] instead of [1,8]?
$endgroup$
– Erik the Outgolfer
Nov 24 '18 at 15:11
$begingroup$
Can we use 0-indexed [0,7] instead of [1,8]?
$endgroup$
– Erik the Outgolfer
Nov 24 '18 at 15:11
|
show 13 more comments
29 Answers
29
active
oldest
votes
$begingroup$
Jelly, 3 bytes
BUT
Try it online!
How it works
BUT Main link. Argument: n
B Binary; convert n to base 2.
U Upend; reverse the resulting array, so it starts with the LSB.
T Truth; find all 1-based indices of set bits.
$endgroup$
3
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
add a comment |
$begingroup$
R, 52 26 bytes
which(intToBits(scan())>0)
Try it online!
Converts the input to its bits and returns the 1-based indices of where they are TRUE
. That makes this a port of Dennis' Jelly answer.
Returns integer(0)
, the empty list of integers, for input of 0
.
$endgroup$
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
add a comment |
$begingroup$
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
$endgroup$
add a comment |
$begingroup$
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
$endgroup$
add a comment |
$begingroup$
K4, 7 bytes
Solution:
1+&|2:
Example:
First 10...
q)k)(1+&|2:)@'!10
`long$()
,1
,2
1 2
,3
1 3
2 3
1 2 3
,4
1 4
Explanation:
1+&|2: / the solution
2: / convert to base-2
| / reverse
& / indices where true
1+ / add 1
$endgroup$
add a comment |
$begingroup$
MATLAB/Octave, 31 29 27 bytes
@(n)9-find(dec2bin(n,8)-48)
reduced of 2 bytes thanks to alephalpha
reduced of 2 bytes thanks to Giuseppe
Try it online!
$endgroup$
1
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
add a comment |
$begingroup$
Japt, 7 bytes
ì2 Ôi ð
Try it
ì2 :Convert to base-2 digit array
Ô :Reverse
i :Prepend null element
ð :0-based indices of truthy elements
¤¬²Ôð¥1
Try it
¤ :Convert to base-2 string
¬ :Split
² :Push 2
Ô :Reverse
ð :0-based indices of elements
¥1 : Equal to 1
$endgroup$
add a comment |
$begingroup$
Husk, 5 bytes
`fN↔ḋ
Takes input as command-line argument not on stdin (I hope this is ok), try it online!
Explanation
`fN↔ḋ -- example input: 6
ḋ -- convert to binary: [1,1,0]
↔ -- reverse: [0,1,1]
` -- flip the arguments of
fN -- | filter the natural numbers by another list
-- : [2,3]
$endgroup$
add a comment |
$begingroup$
Haskell, 55 54 bytes
s n=[x|(x,d)<-zip[8,7..]$mapM(pure[0,1])[1..8]!!n,d>0]
Outputs the set in reversed order, try it online!
General version, 56 bytes
This will work for sets larger than ${i}_{i=1}^8$:
s n=[x|(x,d)<-zip[n,n-1..]$mapM(pure[0,1])[1..n]!!n,d>0]
Try it online!
Explanation
The term mapM (pure [0,1]) [1..n]
generates the list (n=4
) [[0,0,0,0],[0,0,0,1],[0,0,1,0],..,[1,1,1,1]]
- ie. the binary representations of [0..2^n-1]
. Indexing into it with n
gives us the binary representation of n
.
Now we can just zip
it with the reversed numbers [1..n]
and only keep the elements where the binary-digit is non-zero:
[ x | (x,digit) <- zip [n,n-1,..1] binaryRepN, digit > 0 ]
$endgroup$
add a comment |
$begingroup$
Charcoal, 11 bytes
↓⭆⮌↨N²×ιI⊕κ
Try it online! Link is to verbose version of code. If printing the answer horizontally without spaces is acceptable then the first character can be removed. Explanation:
N Input as a number
↨ Converted to base
² Literal 2
⮌ Reversed
⭆ Map over bits and join
κ Current index (0-indexed)
⊕ Incremented
I Cast to string
ι Current bit
× Repeat string
↓ Print vertically
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 37 bytes
+4 bytes if a separator is mandatory
+3 bytes if this separator is a comma and a leading comma is allowed
f=(n,i=1)=>n?(n&1?i:'')+f(n/2,i+1):''
Try it online!
$endgroup$
add a comment |
$begingroup$
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
$endgroup$
add a comment |
$begingroup$
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
$endgroup$
add a comment |
$begingroup$
Haskell, 33 bytes
s n=[x+1|x<-[0..7],odd$div n$2^x]
Try it online!
37 bytes
concat.(mapM(i->[,[i]])[8,7..1]!!)
Try it online!
Test cases from nimi.
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 49 bytes
x=>Enumerable.Range(1,8).Where(y=>(1&x>>(y-1))>0)
Try it online!
This solution uses pretty straightforward bit manipulation. While I don't think that 0-based indexing is allowed, I came up with a slightly shorter version that uses it...
C# (Visual C# Interactive Compiler), 45 bytes
x=>Enumerable.Range(0,8).Where(y=>(1&x>>y)>0)
Try it online!
$endgroup$
add a comment |
$begingroup$
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
$endgroup$
1
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
add a comment |
$begingroup$
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
$endgroup$
add a comment |
$begingroup$
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
$endgroup$
add a comment |
$begingroup$
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
$endgroup$
add a comment |
$begingroup$
APL+WIN, 13 bytes
Prompts for N:
((8⍴2)⊤⎕)/⌽⍳8
Try it online! Courtesy of Dyalog Classic
Explanation:
((8⍴2)⊤⎕) prompt for N and convert to binary
/⌽⍳8 generate a vector from 1 to 8, reverse and select integers according to 1s in binary
Returns subset in reverse order
$endgroup$
add a comment |
$begingroup$
Burlesque - 8 bytes
8roR@j!!
Try it online.
$endgroup$
add a comment |
$begingroup$
Oracle SQL, 77 bytes
select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
Test in SQL Plus
SQL> var n number
SQL> exec :n:=67;
PL/SQL procedure successfully completed.
SQL> with t as (select ku$_vcnt(1,2,3,4,5,6,7,8) x from dual)
2 select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
3 /
67
KU$_VCNT('1', '2', '7')
$endgroup$
add a comment |
$begingroup$
MathGolf, 8 bytes
â^mÉ┤*─
Try it online!
Explanation
â Convert first input to binary list
^ Zip with [1,2,3,4,5,6,7,8] (other input)
mÉ Map 2D array using the next 3 instuctions
┤ Pop from right of array
* Swap top two elements and repeat array either 0 or 1 times
─ Flatten to 1D array
Alternate output format
With a more flexible output format (that I personally think looks quite good) I can come up with a 6-byter:
â^É┤*
Instead of mapping, I use the implicit for-each, and I skip the flattening. Output looks like this:
[1][2][4][5][6][7]
$endgroup$
add a comment |
$begingroup$
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
$endgroup$
add a comment |
$begingroup$
F# (Mono), 45 bytes
let m x=Seq.where(fun y->x>>>y-1&&&1>0)[1..8]
Try it online!
I also implemented a generic/recursive function, but its pretty ugly and the byte count is a lot larger...
F# (Mono), 107 bytes
let rec g y i=
if y>0 then seq{
if y%2>0 then yield i
yield!g(y/2)(i+1)
}else Seq.empty
let f x=g x 1
Try it online!
$endgroup$
add a comment |
$begingroup$
05AB1E, 6 bytes
bRSƶ0K
Try it online or verify all possible test cases.
Explanation:
b # Convert the (implicit) integer input to binary
# i.e. 22 → "10110"
R # Reverse it
# i.e. "10110" → "01101"
S # Convert it to a list of 0s and 1s
# i.e. "01101" → ["0","1","1","0","1"]
ƶ # Multiply each with its 1-indexed index
# i.e. ["0","1","1","0","1"] → [0,2,3,0,5]
0K # Remove all 0s (and output implicitly)
# i.e. [0,2,3,0,5] → [2,3,5]
$endgroup$
add a comment |
$begingroup$
Java 8, 58 bytes
n->{for(int i=0;i<8;)if((1&n>>i++)>0)System.out.print(i);}
Try it online.
Explanation:
n->{ // Method with integer as parameter and no return-type
for(int i=0;i<8;) // Loop `i` in the range [0,8):
if((1&n>>i++)>0) // If 1 AND `n` bitwise right-shifted to `i` is larger than 0
// (with `i` increased by 1 afterwards with `i++`)
System.out.print(i);} // Print `i+1`
$endgroup$
add a comment |
$begingroup$
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
Japt, 7 bytes
¤Ôð1 mÄ
Test it online
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
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%2f176460%2fnth-subset-of-a-set%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
29 Answers
29
active
oldest
votes
29 Answers
29
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Jelly, 3 bytes
BUT
Try it online!
How it works
BUT Main link. Argument: n
B Binary; convert n to base 2.
U Upend; reverse the resulting array, so it starts with the LSB.
T Truth; find all 1-based indices of set bits.
$endgroup$
3
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
add a comment |
$begingroup$
Jelly, 3 bytes
BUT
Try it online!
How it works
BUT Main link. Argument: n
B Binary; convert n to base 2.
U Upend; reverse the resulting array, so it starts with the LSB.
T Truth; find all 1-based indices of set bits.
$endgroup$
3
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
add a comment |
$begingroup$
Jelly, 3 bytes
BUT
Try it online!
How it works
BUT Main link. Argument: n
B Binary; convert n to base 2.
U Upend; reverse the resulting array, so it starts with the LSB.
T Truth; find all 1-based indices of set bits.
$endgroup$
Jelly, 3 bytes
BUT
Try it online!
How it works
BUT Main link. Argument: n
B Binary; convert n to base 2.
U Upend; reverse the resulting array, so it starts with the LSB.
T Truth; find all 1-based indices of set bits.
edited Nov 24 '18 at 14:03
answered Nov 24 '18 at 13:49
Dennis♦Dennis
188k32299738
188k32299738
3
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
add a comment |
3
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
3
3
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
$begingroup$
@Arnauld BUT everything is a lie! You think everything is Binary, eh? Well... that Upended is the Truth! So, nope, not everything is Binary. Welcome to the gray area!
$endgroup$
– Erik the Outgolfer
Nov 25 '18 at 11:34
add a comment |
$begingroup$
R, 52 26 bytes
which(intToBits(scan())>0)
Try it online!
Converts the input to its bits and returns the 1-based indices of where they are TRUE
. That makes this a port of Dennis' Jelly answer.
Returns integer(0)
, the empty list of integers, for input of 0
.
$endgroup$
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
add a comment |
$begingroup$
R, 52 26 bytes
which(intToBits(scan())>0)
Try it online!
Converts the input to its bits and returns the 1-based indices of where they are TRUE
. That makes this a port of Dennis' Jelly answer.
Returns integer(0)
, the empty list of integers, for input of 0
.
$endgroup$
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
add a comment |
$begingroup$
R, 52 26 bytes
which(intToBits(scan())>0)
Try it online!
Converts the input to its bits and returns the 1-based indices of where they are TRUE
. That makes this a port of Dennis' Jelly answer.
Returns integer(0)
, the empty list of integers, for input of 0
.
$endgroup$
R, 52 26 bytes
which(intToBits(scan())>0)
Try it online!
Converts the input to its bits and returns the 1-based indices of where they are TRUE
. That makes this a port of Dennis' Jelly answer.
Returns integer(0)
, the empty list of integers, for input of 0
.
edited Nov 24 '18 at 14:39
answered Nov 24 '18 at 14:02
GiuseppeGiuseppe
16.6k31052
16.6k31052
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
add a comment |
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
$begingroup$
Although this answer contains no IFs, ANDs, or BUTs.
$endgroup$
– ngm
Nov 26 '18 at 1:11
add a comment |
$begingroup$
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
$endgroup$
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
answered Nov 24 '18 at 15:16
Erik the OutgolferErik the Outgolfer
31.9k429103
31.9k429103
add a comment |
add a comment |
$begingroup$
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
$endgroup$
add a comment |
$begingroup$
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
$endgroup$
add a comment |
$begingroup$
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
$endgroup$
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
edited Nov 24 '18 at 23:49
answered Nov 24 '18 at 13:33
Jo KingJo King
23.1k253121
23.1k253121
add a comment |
add a comment |
$begingroup$
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
$endgroup$
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
answered Nov 24 '18 at 14:15
Dennis♦Dennis
188k32299738
188k32299738
add a comment |
add a comment |
$begingroup$
K4, 7 bytes
Solution:
1+&|2:
Example:
First 10...
q)k)(1+&|2:)@'!10
`long$()
,1
,2
1 2
,3
1 3
2 3
1 2 3
,4
1 4
Explanation:
1+&|2: / the solution
2: / convert to base-2
| / reverse
& / indices where true
1+ / add 1
$endgroup$
add a comment |
$begingroup$
K4, 7 bytes
Solution:
1+&|2:
Example:
First 10...
q)k)(1+&|2:)@'!10
`long$()
,1
,2
1 2
,3
1 3
2 3
1 2 3
,4
1 4
Explanation:
1+&|2: / the solution
2: / convert to base-2
| / reverse
& / indices where true
1+ / add 1
$endgroup$
add a comment |
$begingroup$
K4, 7 bytes
Solution:
1+&|2:
Example:
First 10...
q)k)(1+&|2:)@'!10
`long$()
,1
,2
1 2
,3
1 3
2 3
1 2 3
,4
1 4
Explanation:
1+&|2: / the solution
2: / convert to base-2
| / reverse
& / indices where true
1+ / add 1
$endgroup$
K4, 7 bytes
Solution:
1+&|2:
Example:
First 10...
q)k)(1+&|2:)@'!10
`long$()
,1
,2
1 2
,3
1 3
2 3
1 2 3
,4
1 4
Explanation:
1+&|2: / the solution
2: / convert to base-2
| / reverse
& / indices where true
1+ / add 1
answered Nov 24 '18 at 14:33
streetsterstreetster
2,544515
2,544515
add a comment |
add a comment |
$begingroup$
MATLAB/Octave, 31 29 27 bytes
@(n)9-find(dec2bin(n,8)-48)
reduced of 2 bytes thanks to alephalpha
reduced of 2 bytes thanks to Giuseppe
Try it online!
$endgroup$
1
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
add a comment |
$begingroup$
MATLAB/Octave, 31 29 27 bytes
@(n)9-find(dec2bin(n,8)-48)
reduced of 2 bytes thanks to alephalpha
reduced of 2 bytes thanks to Giuseppe
Try it online!
$endgroup$
1
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
add a comment |
$begingroup$
MATLAB/Octave, 31 29 27 bytes
@(n)9-find(dec2bin(n,8)-48)
reduced of 2 bytes thanks to alephalpha
reduced of 2 bytes thanks to Giuseppe
Try it online!
$endgroup$
MATLAB/Octave, 31 29 27 bytes
@(n)9-find(dec2bin(n,8)-48)
reduced of 2 bytes thanks to alephalpha
reduced of 2 bytes thanks to Giuseppe
Try it online!
edited Nov 24 '18 at 17:52
answered Nov 24 '18 at 16:23
PieCotPieCot
97959
97959
1
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
add a comment |
1
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
1
1
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@(n)9-find(dec2bin(n,8)-48)
$endgroup$
– alephalpha
Nov 24 '18 at 16:35
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
$begingroup$
@alephalpha Thanks!
$endgroup$
– PieCot
Nov 24 '18 at 16:37
add a comment |
$begingroup$
Japt, 7 bytes
ì2 Ôi ð
Try it
ì2 :Convert to base-2 digit array
Ô :Reverse
i :Prepend null element
ð :0-based indices of truthy elements
¤¬²Ôð¥1
Try it
¤ :Convert to base-2 string
¬ :Split
² :Push 2
Ô :Reverse
ð :0-based indices of elements
¥1 : Equal to 1
$endgroup$
add a comment |
$begingroup$
Japt, 7 bytes
ì2 Ôi ð
Try it
ì2 :Convert to base-2 digit array
Ô :Reverse
i :Prepend null element
ð :0-based indices of truthy elements
¤¬²Ôð¥1
Try it
¤ :Convert to base-2 string
¬ :Split
² :Push 2
Ô :Reverse
ð :0-based indices of elements
¥1 : Equal to 1
$endgroup$
add a comment |
$begingroup$
Japt, 7 bytes
ì2 Ôi ð
Try it
ì2 :Convert to base-2 digit array
Ô :Reverse
i :Prepend null element
ð :0-based indices of truthy elements
¤¬²Ôð¥1
Try it
¤ :Convert to base-2 string
¬ :Split
² :Push 2
Ô :Reverse
ð :0-based indices of elements
¥1 : Equal to 1
$endgroup$
Japt, 7 bytes
ì2 Ôi ð
Try it
ì2 :Convert to base-2 digit array
Ô :Reverse
i :Prepend null element
ð :0-based indices of truthy elements
¤¬²Ôð¥1
Try it
¤ :Convert to base-2 string
¬ :Split
² :Push 2
Ô :Reverse
ð :0-based indices of elements
¥1 : Equal to 1
edited Nov 25 '18 at 17:22
answered Nov 24 '18 at 14:16
ShaggyShaggy
20k21667
20k21667
add a comment |
add a comment |
$begingroup$
Husk, 5 bytes
`fN↔ḋ
Takes input as command-line argument not on stdin (I hope this is ok), try it online!
Explanation
`fN↔ḋ -- example input: 6
ḋ -- convert to binary: [1,1,0]
↔ -- reverse: [0,1,1]
` -- flip the arguments of
fN -- | filter the natural numbers by another list
-- : [2,3]
$endgroup$
add a comment |
$begingroup$
Husk, 5 bytes
`fN↔ḋ
Takes input as command-line argument not on stdin (I hope this is ok), try it online!
Explanation
`fN↔ḋ -- example input: 6
ḋ -- convert to binary: [1,1,0]
↔ -- reverse: [0,1,1]
` -- flip the arguments of
fN -- | filter the natural numbers by another list
-- : [2,3]
$endgroup$
add a comment |
$begingroup$
Husk, 5 bytes
`fN↔ḋ
Takes input as command-line argument not on stdin (I hope this is ok), try it online!
Explanation
`fN↔ḋ -- example input: 6
ḋ -- convert to binary: [1,1,0]
↔ -- reverse: [0,1,1]
` -- flip the arguments of
fN -- | filter the natural numbers by another list
-- : [2,3]
$endgroup$
Husk, 5 bytes
`fN↔ḋ
Takes input as command-line argument not on stdin (I hope this is ok), try it online!
Explanation
`fN↔ḋ -- example input: 6
ḋ -- convert to binary: [1,1,0]
↔ -- reverse: [0,1,1]
` -- flip the arguments of
fN -- | filter the natural numbers by another list
-- : [2,3]
answered Nov 24 '18 at 14:04
BMOBMO
11.8k22392
11.8k22392
add a comment |
add a comment |
$begingroup$
Haskell, 55 54 bytes
s n=[x|(x,d)<-zip[8,7..]$mapM(pure[0,1])[1..8]!!n,d>0]
Outputs the set in reversed order, try it online!
General version, 56 bytes
This will work for sets larger than ${i}_{i=1}^8$:
s n=[x|(x,d)<-zip[n,n-1..]$mapM(pure[0,1])[1..n]!!n,d>0]
Try it online!
Explanation
The term mapM (pure [0,1]) [1..n]
generates the list (n=4
) [[0,0,0,0],[0,0,0,1],[0,0,1,0],..,[1,1,1,1]]
- ie. the binary representations of [0..2^n-1]
. Indexing into it with n
gives us the binary representation of n
.
Now we can just zip
it with the reversed numbers [1..n]
and only keep the elements where the binary-digit is non-zero:
[ x | (x,digit) <- zip [n,n-1,..1] binaryRepN, digit > 0 ]
$endgroup$
add a comment |
$begingroup$
Haskell, 55 54 bytes
s n=[x|(x,d)<-zip[8,7..]$mapM(pure[0,1])[1..8]!!n,d>0]
Outputs the set in reversed order, try it online!
General version, 56 bytes
This will work for sets larger than ${i}_{i=1}^8$:
s n=[x|(x,d)<-zip[n,n-1..]$mapM(pure[0,1])[1..n]!!n,d>0]
Try it online!
Explanation
The term mapM (pure [0,1]) [1..n]
generates the list (n=4
) [[0,0,0,0],[0,0,0,1],[0,0,1,0],..,[1,1,1,1]]
- ie. the binary representations of [0..2^n-1]
. Indexing into it with n
gives us the binary representation of n
.
Now we can just zip
it with the reversed numbers [1..n]
and only keep the elements where the binary-digit is non-zero:
[ x | (x,digit) <- zip [n,n-1,..1] binaryRepN, digit > 0 ]
$endgroup$
add a comment |
$begingroup$
Haskell, 55 54 bytes
s n=[x|(x,d)<-zip[8,7..]$mapM(pure[0,1])[1..8]!!n,d>0]
Outputs the set in reversed order, try it online!
General version, 56 bytes
This will work for sets larger than ${i}_{i=1}^8$:
s n=[x|(x,d)<-zip[n,n-1..]$mapM(pure[0,1])[1..n]!!n,d>0]
Try it online!
Explanation
The term mapM (pure [0,1]) [1..n]
generates the list (n=4
) [[0,0,0,0],[0,0,0,1],[0,0,1,0],..,[1,1,1,1]]
- ie. the binary representations of [0..2^n-1]
. Indexing into it with n
gives us the binary representation of n
.
Now we can just zip
it with the reversed numbers [1..n]
and only keep the elements where the binary-digit is non-zero:
[ x | (x,digit) <- zip [n,n-1,..1] binaryRepN, digit > 0 ]
$endgroup$
Haskell, 55 54 bytes
s n=[x|(x,d)<-zip[8,7..]$mapM(pure[0,1])[1..8]!!n,d>0]
Outputs the set in reversed order, try it online!
General version, 56 bytes
This will work for sets larger than ${i}_{i=1}^8$:
s n=[x|(x,d)<-zip[n,n-1..]$mapM(pure[0,1])[1..n]!!n,d>0]
Try it online!
Explanation
The term mapM (pure [0,1]) [1..n]
generates the list (n=4
) [[0,0,0,0],[0,0,0,1],[0,0,1,0],..,[1,1,1,1]]
- ie. the binary representations of [0..2^n-1]
. Indexing into it with n
gives us the binary representation of n
.
Now we can just zip
it with the reversed numbers [1..n]
and only keep the elements where the binary-digit is non-zero:
[ x | (x,digit) <- zip [n,n-1,..1] binaryRepN, digit > 0 ]
edited Nov 24 '18 at 14:30
answered Nov 24 '18 at 14:23
BMOBMO
11.8k22392
11.8k22392
add a comment |
add a comment |
$begingroup$
Charcoal, 11 bytes
↓⭆⮌↨N²×ιI⊕κ
Try it online! Link is to verbose version of code. If printing the answer horizontally without spaces is acceptable then the first character can be removed. Explanation:
N Input as a number
↨ Converted to base
² Literal 2
⮌ Reversed
⭆ Map over bits and join
κ Current index (0-indexed)
⊕ Incremented
I Cast to string
ι Current bit
× Repeat string
↓ Print vertically
$endgroup$
add a comment |
$begingroup$
Charcoal, 11 bytes
↓⭆⮌↨N²×ιI⊕κ
Try it online! Link is to verbose version of code. If printing the answer horizontally without spaces is acceptable then the first character can be removed. Explanation:
N Input as a number
↨ Converted to base
² Literal 2
⮌ Reversed
⭆ Map over bits and join
κ Current index (0-indexed)
⊕ Incremented
I Cast to string
ι Current bit
× Repeat string
↓ Print vertically
$endgroup$
add a comment |
$begingroup$
Charcoal, 11 bytes
↓⭆⮌↨N²×ιI⊕κ
Try it online! Link is to verbose version of code. If printing the answer horizontally without spaces is acceptable then the first character can be removed. Explanation:
N Input as a number
↨ Converted to base
² Literal 2
⮌ Reversed
⭆ Map over bits and join
κ Current index (0-indexed)
⊕ Incremented
I Cast to string
ι Current bit
× Repeat string
↓ Print vertically
$endgroup$
Charcoal, 11 bytes
↓⭆⮌↨N²×ιI⊕κ
Try it online! Link is to verbose version of code. If printing the answer horizontally without spaces is acceptable then the first character can be removed. Explanation:
N Input as a number
↨ Converted to base
² Literal 2
⮌ Reversed
⭆ Map over bits and join
κ Current index (0-indexed)
⊕ Incremented
I Cast to string
ι Current bit
× Repeat string
↓ Print vertically
answered Nov 24 '18 at 14:34
NeilNeil
80.8k744178
80.8k744178
add a comment |
add a comment |
$begingroup$
JavaScript (ES6), 37 bytes
+4 bytes if a separator is mandatory
+3 bytes if this separator is a comma and a leading comma is allowed
f=(n,i=1)=>n?(n&1?i:'')+f(n/2,i+1):''
Try it online!
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 37 bytes
+4 bytes if a separator is mandatory
+3 bytes if this separator is a comma and a leading comma is allowed
f=(n,i=1)=>n?(n&1?i:'')+f(n/2,i+1):''
Try it online!
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 37 bytes
+4 bytes if a separator is mandatory
+3 bytes if this separator is a comma and a leading comma is allowed
f=(n,i=1)=>n?(n&1?i:'')+f(n/2,i+1):''
Try it online!
$endgroup$
JavaScript (ES6), 37 bytes
+4 bytes if a separator is mandatory
+3 bytes if this separator is a comma and a leading comma is allowed
f=(n,i=1)=>n?(n&1?i:'')+f(n/2,i+1):''
Try it online!
answered Nov 24 '18 at 14:50
ArnauldArnauld
76.2k693321
76.2k693321
add a comment |
add a comment |
$begingroup$
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
$endgroup$
add a comment |
$begingroup$
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
$endgroup$
add a comment |
$begingroup$
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
$endgroup$
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
edited Nov 24 '18 at 16:05
answered Nov 24 '18 at 15:38
nwellnhofnwellnhof
6,78511126
6,78511126
add a comment |
add a comment |
$begingroup$
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
$endgroup$
add a comment |
$begingroup$
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
$endgroup$
add a comment |
$begingroup$
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
$endgroup$
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
answered Nov 24 '18 at 16:06
RenzoRenzo
1,770516
1,770516
add a comment |
add a comment |
$begingroup$
Haskell, 33 bytes
s n=[x+1|x<-[0..7],odd$div n$2^x]
Try it online!
37 bytes
concat.(mapM(i->[,[i]])[8,7..1]!!)
Try it online!
Test cases from nimi.
$endgroup$
add a comment |
$begingroup$
Haskell, 33 bytes
s n=[x+1|x<-[0..7],odd$div n$2^x]
Try it online!
37 bytes
concat.(mapM(i->[,[i]])[8,7..1]!!)
Try it online!
Test cases from nimi.
$endgroup$
add a comment |
$begingroup$
Haskell, 33 bytes
s n=[x+1|x<-[0..7],odd$div n$2^x]
Try it online!
37 bytes
concat.(mapM(i->[,[i]])[8,7..1]!!)
Try it online!
Test cases from nimi.
$endgroup$
Haskell, 33 bytes
s n=[x+1|x<-[0..7],odd$div n$2^x]
Try it online!
37 bytes
concat.(mapM(i->[,[i]])[8,7..1]!!)
Try it online!
Test cases from nimi.
answered Nov 24 '18 at 16:14
xnorxnor
90.7k18186439
90.7k18186439
add a comment |
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 49 bytes
x=>Enumerable.Range(1,8).Where(y=>(1&x>>(y-1))>0)
Try it online!
This solution uses pretty straightforward bit manipulation. While I don't think that 0-based indexing is allowed, I came up with a slightly shorter version that uses it...
C# (Visual C# Interactive Compiler), 45 bytes
x=>Enumerable.Range(0,8).Where(y=>(1&x>>y)>0)
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 49 bytes
x=>Enumerable.Range(1,8).Where(y=>(1&x>>(y-1))>0)
Try it online!
This solution uses pretty straightforward bit manipulation. While I don't think that 0-based indexing is allowed, I came up with a slightly shorter version that uses it...
C# (Visual C# Interactive Compiler), 45 bytes
x=>Enumerable.Range(0,8).Where(y=>(1&x>>y)>0)
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 49 bytes
x=>Enumerable.Range(1,8).Where(y=>(1&x>>(y-1))>0)
Try it online!
This solution uses pretty straightforward bit manipulation. While I don't think that 0-based indexing is allowed, I came up with a slightly shorter version that uses it...
C# (Visual C# Interactive Compiler), 45 bytes
x=>Enumerable.Range(0,8).Where(y=>(1&x>>y)>0)
Try it online!
$endgroup$
C# (Visual C# Interactive Compiler), 49 bytes
x=>Enumerable.Range(1,8).Where(y=>(1&x>>(y-1))>0)
Try it online!
This solution uses pretty straightforward bit manipulation. While I don't think that 0-based indexing is allowed, I came up with a slightly shorter version that uses it...
C# (Visual C# Interactive Compiler), 45 bytes
x=>Enumerable.Range(0,8).Where(y=>(1&x>>y)>0)
Try it online!
edited Nov 25 '18 at 16:14
answered Nov 25 '18 at 7:21
danadana
1,081165
1,081165
add a comment |
add a comment |
$begingroup$
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
$endgroup$
1
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
add a comment |
$begingroup$
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
$endgroup$
1
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
add a comment |
$begingroup$
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
$endgroup$
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
edited Nov 26 '18 at 4:40
answered Nov 24 '18 at 14:59
Galen IvanovGalen Ivanov
6,78711033
6,78711033
1
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
add a comment |
1
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
1
1
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
10 bytes.
$endgroup$
– Bubbler
Nov 26 '18 at 0:57
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
$begingroup$
@Bubbler Thanks! I thought I tried this - apparently not :)
$endgroup$
– Galen Ivanov
Nov 26 '18 at 4:41
add a comment |
$begingroup$
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
$endgroup$
add a comment |
$begingroup$
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
$endgroup$
add a comment |
$begingroup$
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
$endgroup$
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
edited Nov 24 '18 at 14:36
answered Nov 24 '18 at 14:31
PieCotPieCot
97959
97959
add a comment |
add a comment |
$begingroup$
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
$endgroup$
add a comment |
$begingroup$
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
$endgroup$
add a comment |
$begingroup$
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
$endgroup$
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
answered Nov 24 '18 at 15:15
alephalphaalephalpha
21.3k32991
21.3k32991
add a comment |
add a comment |
$begingroup$
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
$endgroup$
add a comment |
$begingroup$
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
$endgroup$
add a comment |
$begingroup$
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
$endgroup$
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
answered Nov 24 '18 at 15:16
alephalphaalephalpha
21.3k32991
21.3k32991
add a comment |
add a comment |
$begingroup$
APL+WIN, 13 bytes
Prompts for N:
((8⍴2)⊤⎕)/⌽⍳8
Try it online! Courtesy of Dyalog Classic
Explanation:
((8⍴2)⊤⎕) prompt for N and convert to binary
/⌽⍳8 generate a vector from 1 to 8, reverse and select integers according to 1s in binary
Returns subset in reverse order
$endgroup$
add a comment |
$begingroup$
APL+WIN, 13 bytes
Prompts for N:
((8⍴2)⊤⎕)/⌽⍳8
Try it online! Courtesy of Dyalog Classic
Explanation:
((8⍴2)⊤⎕) prompt for N and convert to binary
/⌽⍳8 generate a vector from 1 to 8, reverse and select integers according to 1s in binary
Returns subset in reverse order
$endgroup$
add a comment |
$begingroup$
APL+WIN, 13 bytes
Prompts for N:
((8⍴2)⊤⎕)/⌽⍳8
Try it online! Courtesy of Dyalog Classic
Explanation:
((8⍴2)⊤⎕) prompt for N and convert to binary
/⌽⍳8 generate a vector from 1 to 8, reverse and select integers according to 1s in binary
Returns subset in reverse order
$endgroup$
APL+WIN, 13 bytes
Prompts for N:
((8⍴2)⊤⎕)/⌽⍳8
Try it online! Courtesy of Dyalog Classic
Explanation:
((8⍴2)⊤⎕) prompt for N and convert to binary
/⌽⍳8 generate a vector from 1 to 8, reverse and select integers according to 1s in binary
Returns subset in reverse order
edited Nov 24 '18 at 15:57
answered Nov 24 '18 at 15:32
GrahamGraham
2,32678
2,32678
add a comment |
add a comment |
$begingroup$
Burlesque - 8 bytes
8roR@j!!
Try it online.
$endgroup$
add a comment |
$begingroup$
Burlesque - 8 bytes
8roR@j!!
Try it online.
$endgroup$
add a comment |
$begingroup$
Burlesque - 8 bytes
8roR@j!!
Try it online.
$endgroup$
Burlesque - 8 bytes
8roR@j!!
Try it online.
answered Nov 25 '18 at 11:13
mromanmroman
1,102613
1,102613
add a comment |
add a comment |
$begingroup$
Oracle SQL, 77 bytes
select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
Test in SQL Plus
SQL> var n number
SQL> exec :n:=67;
PL/SQL procedure successfully completed.
SQL> with t as (select ku$_vcnt(1,2,3,4,5,6,7,8) x from dual)
2 select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
3 /
67
KU$_VCNT('1', '2', '7')
$endgroup$
add a comment |
$begingroup$
Oracle SQL, 77 bytes
select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
Test in SQL Plus
SQL> var n number
SQL> exec :n:=67;
PL/SQL procedure successfully completed.
SQL> with t as (select ku$_vcnt(1,2,3,4,5,6,7,8) x from dual)
2 select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
3 /
67
KU$_VCNT('1', '2', '7')
$endgroup$
add a comment |
$begingroup$
Oracle SQL, 77 bytes
select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
Test in SQL Plus
SQL> var n number
SQL> exec :n:=67;
PL/SQL procedure successfully completed.
SQL> with t as (select ku$_vcnt(1,2,3,4,5,6,7,8) x from dual)
2 select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
3 /
67
KU$_VCNT('1', '2', '7')
$endgroup$
Oracle SQL, 77 bytes
select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
Test in SQL Plus
SQL> var n number
SQL> exec :n:=67;
PL/SQL procedure successfully completed.
SQL> with t as (select ku$_vcnt(1,2,3,4,5,6,7,8) x from dual)
2 select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
3 /
67
KU$_VCNT('1', '2', '7')
answered Nov 26 '18 at 0:51
Dr Y WitDr Y Wit
1614
1614
add a comment |
add a comment |
$begingroup$
MathGolf, 8 bytes
â^mÉ┤*─
Try it online!
Explanation
â Convert first input to binary list
^ Zip with [1,2,3,4,5,6,7,8] (other input)
mÉ Map 2D array using the next 3 instuctions
┤ Pop from right of array
* Swap top two elements and repeat array either 0 or 1 times
─ Flatten to 1D array
Alternate output format
With a more flexible output format (that I personally think looks quite good) I can come up with a 6-byter:
â^É┤*
Instead of mapping, I use the implicit for-each, and I skip the flattening. Output looks like this:
[1][2][4][5][6][7]
$endgroup$
add a comment |
$begingroup$
MathGolf, 8 bytes
â^mÉ┤*─
Try it online!
Explanation
â Convert first input to binary list
^ Zip with [1,2,3,4,5,6,7,8] (other input)
mÉ Map 2D array using the next 3 instuctions
┤ Pop from right of array
* Swap top two elements and repeat array either 0 or 1 times
─ Flatten to 1D array
Alternate output format
With a more flexible output format (that I personally think looks quite good) I can come up with a 6-byter:
â^É┤*
Instead of mapping, I use the implicit for-each, and I skip the flattening. Output looks like this:
[1][2][4][5][6][7]
$endgroup$
add a comment |
$begingroup$
MathGolf, 8 bytes
â^mÉ┤*─
Try it online!
Explanation
â Convert first input to binary list
^ Zip with [1,2,3,4,5,6,7,8] (other input)
mÉ Map 2D array using the next 3 instuctions
┤ Pop from right of array
* Swap top two elements and repeat array either 0 or 1 times
─ Flatten to 1D array
Alternate output format
With a more flexible output format (that I personally think looks quite good) I can come up with a 6-byter:
â^É┤*
Instead of mapping, I use the implicit for-each, and I skip the flattening. Output looks like this:
[1][2][4][5][6][7]
$endgroup$
MathGolf, 8 bytes
â^mÉ┤*─
Try it online!
Explanation
â Convert first input to binary list
^ Zip with [1,2,3,4,5,6,7,8] (other input)
mÉ Map 2D array using the next 3 instuctions
┤ Pop from right of array
* Swap top two elements and repeat array either 0 or 1 times
─ Flatten to 1D array
Alternate output format
With a more flexible output format (that I personally think looks quite good) I can come up with a 6-byter:
â^É┤*
Instead of mapping, I use the implicit for-each, and I skip the flattening. Output looks like this:
[1][2][4][5][6][7]
answered Nov 26 '18 at 9:29
maxbmaxb
2,98311132
2,98311132
add a comment |
add a comment |
$begingroup$
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
$endgroup$
add a comment |
$begingroup$
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
$endgroup$
add a comment |
$begingroup$
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
$endgroup$
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
answered Nov 26 '18 at 10:31
G BG B
7,7661328
7,7661328
add a comment |
add a comment |
$begingroup$
F# (Mono), 45 bytes
let m x=Seq.where(fun y->x>>>y-1&&&1>0)[1..8]
Try it online!
I also implemented a generic/recursive function, but its pretty ugly and the byte count is a lot larger...
F# (Mono), 107 bytes
let rec g y i=
if y>0 then seq{
if y%2>0 then yield i
yield!g(y/2)(i+1)
}else Seq.empty
let f x=g x 1
Try it online!
$endgroup$
add a comment |
$begingroup$
F# (Mono), 45 bytes
let m x=Seq.where(fun y->x>>>y-1&&&1>0)[1..8]
Try it online!
I also implemented a generic/recursive function, but its pretty ugly and the byte count is a lot larger...
F# (Mono), 107 bytes
let rec g y i=
if y>0 then seq{
if y%2>0 then yield i
yield!g(y/2)(i+1)
}else Seq.empty
let f x=g x 1
Try it online!
$endgroup$
add a comment |
$begingroup$
F# (Mono), 45 bytes
let m x=Seq.where(fun y->x>>>y-1&&&1>0)[1..8]
Try it online!
I also implemented a generic/recursive function, but its pretty ugly and the byte count is a lot larger...
F# (Mono), 107 bytes
let rec g y i=
if y>0 then seq{
if y%2>0 then yield i
yield!g(y/2)(i+1)
}else Seq.empty
let f x=g x 1
Try it online!
$endgroup$
F# (Mono), 45 bytes
let m x=Seq.where(fun y->x>>>y-1&&&1>0)[1..8]
Try it online!
I also implemented a generic/recursive function, but its pretty ugly and the byte count is a lot larger...
F# (Mono), 107 bytes
let rec g y i=
if y>0 then seq{
if y%2>0 then yield i
yield!g(y/2)(i+1)
}else Seq.empty
let f x=g x 1
Try it online!
edited Nov 26 '18 at 23:14
answered Nov 26 '18 at 21:00
danadana
1,081165
1,081165
add a comment |
add a comment |
$begingroup$
05AB1E, 6 bytes
bRSƶ0K
Try it online or verify all possible test cases.
Explanation:
b # Convert the (implicit) integer input to binary
# i.e. 22 → "10110"
R # Reverse it
# i.e. "10110" → "01101"
S # Convert it to a list of 0s and 1s
# i.e. "01101" → ["0","1","1","0","1"]
ƶ # Multiply each with its 1-indexed index
# i.e. ["0","1","1","0","1"] → [0,2,3,0,5]
0K # Remove all 0s (and output implicitly)
# i.e. [0,2,3,0,5] → [2,3,5]
$endgroup$
add a comment |
$begingroup$
05AB1E, 6 bytes
bRSƶ0K
Try it online or verify all possible test cases.
Explanation:
b # Convert the (implicit) integer input to binary
# i.e. 22 → "10110"
R # Reverse it
# i.e. "10110" → "01101"
S # Convert it to a list of 0s and 1s
# i.e. "01101" → ["0","1","1","0","1"]
ƶ # Multiply each with its 1-indexed index
# i.e. ["0","1","1","0","1"] → [0,2,3,0,5]
0K # Remove all 0s (and output implicitly)
# i.e. [0,2,3,0,5] → [2,3,5]
$endgroup$
add a comment |
$begingroup$
05AB1E, 6 bytes
bRSƶ0K
Try it online or verify all possible test cases.
Explanation:
b # Convert the (implicit) integer input to binary
# i.e. 22 → "10110"
R # Reverse it
# i.e. "10110" → "01101"
S # Convert it to a list of 0s and 1s
# i.e. "01101" → ["0","1","1","0","1"]
ƶ # Multiply each with its 1-indexed index
# i.e. ["0","1","1","0","1"] → [0,2,3,0,5]
0K # Remove all 0s (and output implicitly)
# i.e. [0,2,3,0,5] → [2,3,5]
$endgroup$
05AB1E, 6 bytes
bRSƶ0K
Try it online or verify all possible test cases.
Explanation:
b # Convert the (implicit) integer input to binary
# i.e. 22 → "10110"
R # Reverse it
# i.e. "10110" → "01101"
S # Convert it to a list of 0s and 1s
# i.e. "01101" → ["0","1","1","0","1"]
ƶ # Multiply each with its 1-indexed index
# i.e. ["0","1","1","0","1"] → [0,2,3,0,5]
0K # Remove all 0s (and output implicitly)
# i.e. [0,2,3,0,5] → [2,3,5]
answered Nov 28 '18 at 8:28
Kevin CruijssenKevin Cruijssen
38.1k557197
38.1k557197
add a comment |
add a comment |
$begingroup$
Java 8, 58 bytes
n->{for(int i=0;i<8;)if((1&n>>i++)>0)System.out.print(i);}
Try it online.
Explanation:
n->{ // Method with integer as parameter and no return-type
for(int i=0;i<8;) // Loop `i` in the range [0,8):
if((1&n>>i++)>0) // If 1 AND `n` bitwise right-shifted to `i` is larger than 0
// (with `i` increased by 1 afterwards with `i++`)
System.out.print(i);} // Print `i+1`
$endgroup$
add a comment |
$begingroup$
Java 8, 58 bytes
n->{for(int i=0;i<8;)if((1&n>>i++)>0)System.out.print(i);}
Try it online.
Explanation:
n->{ // Method with integer as parameter and no return-type
for(int i=0;i<8;) // Loop `i` in the range [0,8):
if((1&n>>i++)>0) // If 1 AND `n` bitwise right-shifted to `i` is larger than 0
// (with `i` increased by 1 afterwards with `i++`)
System.out.print(i);} // Print `i+1`
$endgroup$
add a comment |
$begingroup$
Java 8, 58 bytes
n->{for(int i=0;i<8;)if((1&n>>i++)>0)System.out.print(i);}
Try it online.
Explanation:
n->{ // Method with integer as parameter and no return-type
for(int i=0;i<8;) // Loop `i` in the range [0,8):
if((1&n>>i++)>0) // If 1 AND `n` bitwise right-shifted to `i` is larger than 0
// (with `i` increased by 1 afterwards with `i++`)
System.out.print(i);} // Print `i+1`
$endgroup$
Java 8, 58 bytes
n->{for(int i=0;i<8;)if((1&n>>i++)>0)System.out.print(i);}
Try it online.
Explanation:
n->{ // Method with integer as parameter and no return-type
for(int i=0;i<8;) // Loop `i` in the range [0,8):
if((1&n>>i++)>0) // If 1 AND `n` bitwise right-shifted to `i` is larger than 0
// (with `i` increased by 1 afterwards with `i++`)
System.out.print(i);} // Print `i+1`
answered Nov 28 '18 at 8:41
Kevin CruijssenKevin Cruijssen
38.1k557197
38.1k557197
add a comment |
add a comment |
$begingroup$
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
Japt, 7 bytes
¤Ôð1 mÄ
Test it online
$endgroup$
add a comment |
$begingroup$
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
Japt, 7 bytes
¤Ôð1 mÄ
Test it online
$endgroup$
add a comment |
$begingroup$
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
Japt, 7 bytes
¤Ôð1 mÄ
Test it online
$endgroup$
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
Japt, 7 bytes
¤Ôð1 mÄ
Test it online
edited Dec 5 '18 at 20:37
answered Nov 26 '18 at 22:40
OliverOliver
4,8801831
4,8801831
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%2f176460%2fnth-subset-of-a-set%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
1
$begingroup$
Is the set specifically
1
to8
, or is it any set?$endgroup$
– Jo King
Nov 24 '18 at 13:36
1
$begingroup$
I'm surprised nobody asked before: Would you be so kind to allow functions as submissions which take the input as argument and not force languages to use stdin (which some are not able to)? The question is about subsets and not fiddling with inputs.
$endgroup$
– BMO
Nov 24 '18 at 13:53
5
$begingroup$
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
$endgroup$
– BMO
Nov 24 '18 at 14:34
1
$begingroup$
Since the set is limited to 1..8, an output such as
"123"
would be unambiguous. Is it valid?$endgroup$
– Arnauld
Nov 24 '18 at 14:45
2
$begingroup$
Can we use 0-indexed [0,7] instead of [1,8]?
$endgroup$
– Erik the Outgolfer
Nov 24 '18 at 15:11