Nth subset of a set
up vote
12
down vote
favorite
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
|
show 13 more comments
up vote
12
down vote
favorite
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
1
Is the set specifically1
to8
, or is it any set?
– Jo King
2 days ago
1
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.
– BMO
2 days ago
5
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
– BMO
2 days ago
1
Since the set is limited to 1..8, an output such as"123"
would be unambiguous. Is it valid?
– Arnauld
2 days ago
2
Can we use 0-indexed [0,7] instead of [1,8]?
– Erik the Outgolfer
2 days ago
|
show 13 more comments
up vote
12
down vote
favorite
up vote
12
down vote
favorite
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
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 2 days ago
asked 2 days ago
mroman
1,082612
1,082612
1
Is the set specifically1
to8
, or is it any set?
– Jo King
2 days ago
1
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.
– BMO
2 days ago
5
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
– BMO
2 days ago
1
Since the set is limited to 1..8, an output such as"123"
would be unambiguous. Is it valid?
– Arnauld
2 days ago
2
Can we use 0-indexed [0,7] instead of [1,8]?
– Erik the Outgolfer
2 days ago
|
show 13 more comments
1
Is the set specifically1
to8
, or is it any set?
– Jo King
2 days ago
1
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.
– BMO
2 days ago
5
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
– BMO
2 days ago
1
Since the set is limited to 1..8, an output such as"123"
would be unambiguous. Is it valid?
– Arnauld
2 days ago
2
Can we use 0-indexed [0,7] instead of [1,8]?
– Erik the Outgolfer
2 days ago
1
1
Is the set specifically
1
to 8
, or is it any set?– Jo King
2 days ago
Is the set specifically
1
to 8
, or is it any set?– Jo King
2 days ago
1
1
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.
– BMO
2 days ago
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.
– BMO
2 days ago
5
5
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
– BMO
2 days ago
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
– BMO
2 days ago
1
1
Since the set is limited to 1..8, an output such as
"123"
would be unambiguous. Is it valid?– Arnauld
2 days ago
Since the set is limited to 1..8, an output such as
"123"
would be unambiguous. Is it valid?– Arnauld
2 days ago
2
2
Can we use 0-indexed [0,7] instead of [1,8]?
– Erik the Outgolfer
2 days ago
Can we use 0-indexed [0,7] instead of [1,8]?
– Erik the Outgolfer
2 days ago
|
show 13 more comments
27 Answers
27
active
oldest
votes
up vote
14
down vote
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.
3
But, but, BUT...?!
– Arnauld
2 days ago
@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!
– Erik the Outgolfer
yesterday
add a comment |
up vote
7
down vote
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
.
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
add a comment |
up vote
5
down vote
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
add a comment |
up vote
4
down vote
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
add a comment |
up vote
3
down vote
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
add a comment |
up vote
2
down vote
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
add a comment |
up vote
2
down vote
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!
1
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
add a comment |
up vote
2
down vote
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
add a comment |
up vote
1
down vote
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]
add a comment |
up vote
1
down vote
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 ]
add a comment |
up vote
1
down vote
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
add a comment |
up vote
1
down vote
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!
add a comment |
up vote
1
down vote
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
add a comment |
up vote
1
down vote
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
add a comment |
up vote
1
down vote
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.
add a comment |
up vote
1
down vote
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!
add a comment |
up vote
0
down vote
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
add a comment |
up vote
0
down vote
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
add a comment |
up vote
0
down vote
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
add a comment |
up vote
0
down vote
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
add a comment |
up vote
0
down vote
Burlesque - 8 bytes
8roR@j!!
Try it online.
add a comment |
up vote
0
down vote
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')
add a comment |
up vote
0
down vote
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
1
10 bytes.
– Bubbler
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
add a comment |
up vote
0
down vote
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]
add a comment |
up vote
0
down vote
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
add a comment |
up vote
0
down vote
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
add a comment |
up vote
0
down vote
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!
add a comment |
27 Answers
27
active
oldest
votes
27 Answers
27
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
14
down vote
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.
3
But, but, BUT...?!
– Arnauld
2 days ago
@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!
– Erik the Outgolfer
yesterday
add a comment |
up vote
14
down vote
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.
3
But, but, BUT...?!
– Arnauld
2 days ago
@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!
– Erik the Outgolfer
yesterday
add a comment |
up vote
14
down vote
up vote
14
down vote
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.
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 2 days ago
answered 2 days ago
Dennis♦
184k32295732
184k32295732
3
But, but, BUT...?!
– Arnauld
2 days ago
@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!
– Erik the Outgolfer
yesterday
add a comment |
3
But, but, BUT...?!
– Arnauld
2 days ago
@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!
– Erik the Outgolfer
yesterday
3
3
But, but, BUT...?!
– Arnauld
2 days ago
But, but, BUT...?!
– Arnauld
2 days ago
@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!
– Erik the Outgolfer
yesterday
@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!
– Erik the Outgolfer
yesterday
add a comment |
up vote
7
down vote
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
.
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
add a comment |
up vote
7
down vote
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
.
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
add a comment |
up vote
7
down vote
up vote
7
down vote
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
.
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 2 days ago
answered 2 days ago
Giuseppe
16.1k31052
16.1k31052
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
add a comment |
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
Although this answer contains no IFs, ANDs, or BUTs.
– ngm
yesterday
add a comment |
up vote
5
down vote
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
add a comment |
up vote
5
down vote
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
add a comment |
up vote
5
down vote
up vote
5
down vote
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
Python 2, 40 bytes
lambda x:[i+1for i in range(8)if x>>i&1]
Try it online!
answered 2 days ago
Erik the Outgolfer
30.7k429102
30.7k429102
add a comment |
add a comment |
up vote
4
down vote
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
add a comment |
up vote
4
down vote
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
add a comment |
up vote
4
down vote
up vote
4
down vote
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
Perl 6, 33 bytes
(1..*Zxx*.base(2).flip.comb).flat
Try it online!
edited 2 days ago
answered 2 days ago
Jo King
19.4k245102
19.4k245102
add a comment |
add a comment |
up vote
3
down vote
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
add a comment |
up vote
3
down vote
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
add a comment |
up vote
3
down vote
up vote
3
down vote
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
Python 2, 42 bytes
f=lambda n,k=1:n*[k]and n%2*[k]+f(n/2,k+1)
Try it online!
answered 2 days ago
Dennis♦
184k32295732
184k32295732
add a comment |
add a comment |
up vote
2
down vote
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
add a comment |
up vote
2
down vote
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
add a comment |
up vote
2
down vote
up vote
2
down vote
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
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 2 days ago
streetster
2,434515
2,434515
add a comment |
add a comment |
up vote
2
down vote
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!
1
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
add a comment |
up vote
2
down vote
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!
1
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
add a comment |
up vote
2
down vote
up vote
2
down vote
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!
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 2 days ago
answered 2 days ago
PieCot
96749
96749
1
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
add a comment |
1
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
1
1
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@(n)9-find(dec2bin(n,8)-48)
– alephalpha
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
@alephalpha Thanks!
– PieCot
2 days ago
add a comment |
up vote
2
down vote
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
add a comment |
up vote
2
down vote
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
add a comment |
up vote
2
down vote
up vote
2
down vote
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
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 yesterday
answered 2 days ago
Shaggy
18.2k21663
18.2k21663
add a comment |
add a comment |
up vote
1
down vote
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]
add a comment |
up vote
1
down vote
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]
add a comment |
up vote
1
down vote
up vote
1
down vote
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]
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 2 days ago
BMO
10.6k21880
10.6k21880
add a comment |
add a comment |
up vote
1
down vote
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 ]
add a comment |
up vote
1
down vote
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 ]
add a comment |
up vote
1
down vote
up vote
1
down vote
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 ]
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 2 days ago
answered 2 days ago
BMO
10.6k21880
10.6k21880
add a comment |
add a comment |
up vote
1
down vote
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
add a comment |
up vote
1
down vote
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
add a comment |
up vote
1
down vote
up vote
1
down vote
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
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 2 days ago
Neil
78.2k744175
78.2k744175
add a comment |
add a comment |
up vote
1
down vote
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!
add a comment |
up vote
1
down vote
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!
add a comment |
up vote
1
down vote
up vote
1
down vote
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!
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 2 days ago
Arnauld
69.8k686294
69.8k686294
add a comment |
add a comment |
up vote
1
down vote
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
add a comment |
up vote
1
down vote
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
add a comment |
up vote
1
down vote
up vote
1
down vote
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
Perl 6, 21 bytes
{1 X+grep $_+>*%2,^8}
Try it online!
Alternative:
{grep $_*2+>*%2,1..8}
edited 2 days ago
answered 2 days ago
nwellnhof
6,2831125
6,2831125
add a comment |
add a comment |
up vote
1
down vote
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
add a comment |
up vote
1
down vote
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
Common Lisp, 57 bytes
(lambda(x)(dotimes(i 7)(format(logbitp i x)"~a "(1+ i))))
Try it online!
answered 2 days ago
Renzo
1,600516
1,600516
add a comment |
add a comment |
up vote
1
down vote
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.
add a comment |
up vote
1
down vote
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.
add a comment |
up vote
1
down vote
up vote
1
down vote
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.
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 2 days ago
xnor
89k18184437
89k18184437
add a comment |
add a comment |
up vote
1
down vote
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!
add a comment |
up vote
1
down vote
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!
add a comment |
up vote
1
down vote
up vote
1
down vote
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!
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 yesterday
answered yesterday
dana
20114
20114
add a comment |
add a comment |
up vote
0
down vote
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
add a comment |
up vote
0
down vote
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
add a comment |
up vote
0
down vote
up vote
0
down vote
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
Python 3.6, 58 bytes
f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]
edited 2 days ago
answered 2 days ago
PieCot
96749
96749
add a comment |
add a comment |
up vote
0
down vote
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
add a comment |
up vote
0
down vote
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
add a comment |
up vote
0
down vote
up vote
0
down vote
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
Wolfram Language (Mathematica), 32 bytes
Pick[r=Range@8,BitGet[#,r-1],1]&
Try it online!
answered 2 days ago
alephalpha
20.9k32888
20.9k32888
add a comment |
add a comment |
up vote
0
down vote
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
add a comment |
up vote
0
down vote
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
add a comment |
up vote
0
down vote
up vote
0
down vote
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
Pari/GP, 31 bytes
n->[x|x<-[1..8],bittest(n,x-1)]
Try it online!
answered 2 days ago
alephalpha
20.9k32888
20.9k32888
add a comment |
add a comment |
up vote
0
down vote
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
add a comment |
up vote
0
down vote
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
add a comment |
up vote
0
down vote
up vote
0
down vote
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
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 2 days ago
answered 2 days ago
Graham
2,12668
2,12668
add a comment |
add a comment |
up vote
0
down vote
Burlesque - 8 bytes
8roR@j!!
Try it online.
add a comment |
up vote
0
down vote
Burlesque - 8 bytes
8roR@j!!
Try it online.
add a comment |
up vote
0
down vote
up vote
0
down vote
Burlesque - 8 bytes
8roR@j!!
Try it online.
Burlesque - 8 bytes
8roR@j!!
Try it online.
answered yesterday
mroman
1,082612
1,082612
add a comment |
add a comment |
up vote
0
down vote
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')
add a comment |
up vote
0
down vote
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')
add a comment |
up vote
0
down vote
up vote
0
down vote
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')
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 yesterday
Dr Y Wit
1514
1514
add a comment |
add a comment |
up vote
0
down vote
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
1
10 bytes.
– Bubbler
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
add a comment |
up vote
0
down vote
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
1
10 bytes.
– Bubbler
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
add a comment |
up vote
0
down vote
up vote
0
down vote
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
J, 13 10 bytes
-3 bytes thanks to Bubbler
1+I.@|.@#:
Try it online!
edited yesterday
answered 2 days ago
Galen Ivanov
5,95711032
5,95711032
1
10 bytes.
– Bubbler
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
add a comment |
1
10 bytes.
– Bubbler
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
1
1
10 bytes.
– Bubbler
yesterday
10 bytes.
– Bubbler
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
@Bubbler Thanks! I thought I tried this - apparently not :)
– Galen Ivanov
yesterday
add a comment |
up vote
0
down vote
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]
add a comment |
up vote
0
down vote
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]
add a comment |
up vote
0
down vote
up vote
0
down vote
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]
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 19 hours ago
maxb
2,1081923
2,1081923
add a comment |
add a comment |
up vote
0
down vote
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
add a comment |
up vote
0
down vote
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
add a comment |
up vote
0
down vote
up vote
0
down vote
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
Ruby, 31 bytes
->n{n.times{|a|n[a]>0&&p(-~a)}}
Try it online!
answered 18 hours ago
G B
7,5561328
7,5561328
add a comment |
add a comment |
up vote
0
down vote
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
add a comment |
up vote
0
down vote
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
add a comment |
up vote
0
down vote
up vote
0
down vote
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
Japt, 7 bytes
¢Ô¬ðÍmÄ
Test it online
answered 6 hours ago
Oliver
4,4901828
4,4901828
add a comment |
add a comment |
up vote
0
down vote
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!
add a comment |
up vote
0
down vote
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!
add a comment |
up vote
0
down vote
up vote
0
down vote
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!
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 5 hours ago
answered 7 hours ago
dana
20114
20114
add a comment |
add a comment |
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
Is the set specifically
1
to8
, or is it any set?– Jo King
2 days ago
1
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.
– BMO
2 days ago
5
You don't need to tell everyone whether their solution is correct, you can restrict yourself to telling when it's not.
– BMO
2 days ago
1
Since the set is limited to 1..8, an output such as
"123"
would be unambiguous. Is it valid?– Arnauld
2 days ago
2
Can we use 0-indexed [0,7] instead of [1,8]?
– Erik the Outgolfer
2 days ago