挑战
您得到:
- 一个非空的,未排序的正整数列表h(干草堆)
- 正整数n(针)
您的任务是返回h的排列的所有唯一十进制串联的列表,其二进制表示形式包含n的二进制表示形式。
例子
h = [1,2,3]
n = 65只有一个匹配的串联,因此预期的输出为
[321]
。h = [1,2,3]
n = 7这次,存在包含二进制模式111的三个串联。预期输出为
[123, 231, 312]
。h = [12,3]
n = 7只有两个排列可用,并且都匹配。预期输出为
[123, 312]
。h = [1,2,2]
n = 15唯一匹配的串联是122(二进制1111010,包含1111),因此预期输出是
[122]
。需要注意的是两个置换实际上导致122,但你是不是允许输出[122, 122]
。
澄清和规则
- 您可以将指针作为整数(
65
),代表十进制值"65"
的字符串()或代表二进制值的字符串("1000001"
)。 - 您可以将干草堆当作本机数组/对象/整数集(
[11,12,13]
),本机数组/对象/字符串集代表十进制值(["11","12","13"]
)或带分隔符的十进制值字符串("11 12 13"
或"11,12,13"
)。您也可以选择使用数字数组(例如[[1,1],[1,2],[1,3]]
)作为变体。 - 输出必须遵循上述针对干草堆的格式之一,但不一定要相同。
- 您不应该处理最高十进制连接数大于语言中可表示的最高无符号整数的干草堆。
- 除此之外,您的代码理论上应该支持任何输入-假设有足够的时间和内存。
- 这是
SPARTA!code-golf,所以最短答案以字节为单位!
测试用例
Haystack | Needle | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ] | 65 | [ 321 ]
[ 1, 2, 3 ] | 7 | [ 123, 231, 312 ]
[ 12, 3 ] | 7 | [ 123, 312 ]
[ 1, 2, 2 ] | 15 | [ 122 ]
[ 1, 2 ] | 7 | []
[ 12, 34, 56 ] | 21 | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ] | 511 | [ 53241 ]
[ 1, 3, 5, 7, 9 ] | 593 | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ] | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015 | [ 221112 ]
["12","3"]
和["1","23"]
是两个不同的干草堆。
set([(1, 2, 2)])
。是有效的还是应该摆脱set
?