重新解释像我这样的假人:
在三元组中“编码”两个二进制互斥数字(w& b == 0)的直接方法是:
white_black_empty = lambda w, b: int(format(b, 'b'), base=3) + \
int(format(w, 'b').replace('1','2'), base=3)
以下是所有可能的2位变体:
white_black_empty(0b00, 0b00) == 0
white_black_empty(0b00, 0b01) == 1
white_black_empty(0b01, 0b00) == 2
white_black_empty(0b00, 0b10) == 3
white_black_empty(0b00, 0b11) == 4
white_black_empty(0b01, 0b10) == 5
white_black_empty(0b10, 0b00) == 6
white_black_empty(0b10, 0b01) == 7
white_black_empty(0b11, 0b00) == 8
通过观察int(格式(w,’b’).replace(‘1′,’2′),base = 3)实际上等于int的两倍(格式(w,’b’),base = 3) (例如,20220023 == 10110013 * 2),我们得到了@Mark Dickinson在上述评论中发布的解决方案:
white_black_empty = lambda w, b: int(format(b, 'b'), base=3) + \
int(format(w, 'b'), base=3)*2