Skip to content
Discussion options

You must be logged in to vote

🎊 Posting my solution:

Spoiler 🙈
package ps

ps(xs) = y {
	n := pow2(count(xs))
	es := selectors(n)
	xs0 := [ x | xs[x] ]
	y := { select(e, xs0) | e := split(es[_], "") }
}

selectors(n) = { reverse(format_int(i, 2)) | numbers.range(0, n-1)[i] }
select(e, xs) = { xs[i] | e[i] == "1" }

# 2^^n
pow2(0) = 1
pow2(n) = m {
	n > 0
	b := sprintf("0b1%s", [concat("", ["0" | numbers.range(0, n-1)[_]])])
	m := to_number(yaml.unmarshal(b))
}

# ordinary string reverse, "100" -> "001"
reverse(r) = t {
	some i
	rs := split(r, "")
	n := count(rs)
	ts := [ rs[n-i-1] | _ = rs[i] ]
	t := concat("", ts)
}

Replies: 1 comment

Comment options

srenatus
Nov 29, 2021
Maintainer Author

You must be logged in to vote
0 replies
Answer selected by srenatus
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment