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$
– ბიმო
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$
– ბიმო
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,112613
1,112613
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$
– ბიმო
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$
– ბიმო
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$
– ბიმო
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$
– ბიმო
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$
– ბიმო
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$
– ბიმო
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$
– ბიმო
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$
– ბიმო
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$
4
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
1
$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 () {
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$
4
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
1
$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$
4
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
1
$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
190k32300751
190k32300751
4
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
1
$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 |
4
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
1
$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
4
4
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
$begingroup$
But, but, BUT...?!
$endgroup$
– Arnauld
Nov 24 '18 at 21:00
1
1
$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
17.9k31153
17.9k31153
$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
33.1k429106
33.1k429106
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
27.3k365132
27.3k365132
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
190k32300751
190k32300751
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,644515
2,644515
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
19k21768
19k21768
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
ბიმობიმო
12.1k22393
12.1k22393
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
ბიმობიმო
12.1k22393
12.1k22393
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
83k745179
83k745179
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
81.6k797336
81.6k797336
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
7,56011128
7,56011128
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,830516
1,830516
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
94.2k18192452
94.2k18192452
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
2,121168
2,121168
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
7,53211034
7,53211034
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
22.2k33095
22.2k33095
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
22.2k33095
22.2k33095
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,63678
2,63678
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,112613
1,112613
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
3,34311232
3,34311232
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
8,2961429
8,2961429
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
2,121168
2,121168
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
43.3k573221
43.3k573221
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
43.3k573221
43.3k573221
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
5,4251833
5,4251833
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$
– ბიმო
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$
– ბიმო
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