这一挑战的灵感来自AoC 2020,第14天-第II部,由埃里克·瓦斯特尔和他的团队创建,它要求从位掩码输出可能的二进制值。
假设我们有一个像"10X0X0"这样的位掩码,那么我们必须找到可以通过用0或1替换X来生成的二进制值。这里我学习了X,当然,除了0和1之外,任何东西都可以。
因此,可能的二进制文件是["100000", "100010", "101000", "101010"]。
当它们中的每一个被转换为十进制时,它们分别是[32, 34, 40, 42]。
最后,和是148。
INPUT: "X"
["0", "1"]
[0, 1]
OUTPUT: 1
INPUT: "0"
OUTPUT: 0
INPUT: "1"
OUTPUT: 1
INPUT: "1X0"
["100", "110"]
[4, 6]
OUTPUT: 10
INPUT: "1X0X1"
["10001", "10011", "11001", "11011"]
[17, 19, 25, 27]
OUTPUT: 88
INPUT: "X0X0X0X"
["0000000", "0000001", "0000100", "0000101", "0010000", "0010001", "0010100", "0010101",
"1000000", "1000001", "1000100", "1000101", "1010000", "1010001", "1010100", "1010101"]
[0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85]
OUTPUT: 680
INPUT: "1X1X1X1X1X1X1X1X1X1X1"
OUTPUT: 1789569024
INPUT: "1X01X01X01X01X01X01X01X01X01X01X01X0"
OUTPUT: 201053554790400
INPUT: "X000X000X000X000X000X000X000X000X000X000X000X000"
OUTPUT: 307445734561824768
INPUT: "101"
["101"]
[5]
OUTPUT: 5
INPUT: "XXX"
["000", "001", "010", "011", "100", "101", "110", "111"]
[0, 1, 2, 3, 4, 5, 6, 7]
OUTPUT: 28X,但是您可以将它替换为您选择的任何其他字符。沙箱连接。
发布于 2020-12-15 12:49:35
k=n=0
for c in input():n=n*2+-ord(c)%3;k+=c>"1"
print(n<<k)/2实现此算法:
为什么要这么做?如果X在输入中出现k次数,则将2^k与其二进制值的副本相加。在这些近拷贝中,任何位置上的每一个X都显示为平均\frac{1}{2}的0半倍和1半倍,所以我们可以把X当作数字\frac{1}{2}。
在代码中,我们实际上将0,X,1转换为双值0,1,2,然后将结果减半,然后再对X's进行加倍。此外,我们使用_表示X,因为我们可以使用不同的字符--任何具有相同ASCII代码模块3的字符都可以工作,比如数字2。
lambda s:(reduce(lambda n,c:2*n+-ord(c)%3,s,0)<<s.count('_'))/2发布于 2020-12-15 12:50:44
f=(s,g=d=>f(s.replace('X',d)))=>1/s?+('0b'+s):g(0)+g(1)f = ( // f is a recursive function
s, // taking the input string s
g = d => // g is a helper function taking a digit d
f( // and doing a recursive call to f
s.replace('X', d) // with the first 'X' in s replaced with d
) //
) => //
1 / s ? // if s looks like a number (i.e. does not contain any 'X'):
+('0b' + s) // convert it from binary to decimal
: // else:
g(0) + // invoke g a 1st time to replace the first 'X' with '0'
g(1) // invoke g a 2nd time to replace the first 'X' with '1'https://codegolf.stackexchange.com/questions/216369
复制相似问题