力扣的 1024・马尔可夫链卡牌活动编程实现
1024・马尔可夫链
2022 年 10 月 17 日 18:00 - 2022 年 10 月 31 日 18:00,参与「1024・马尔可夫链」游戏,完成指定行为可以获得力扣 1024 活动奖励。
- 活动介绍:https://leetcode.cn/circle/discuss/JmX3M6/
游戏规则
活动期间用户可以使用已经获得的 数字牌 和 运算符号牌 进行运算;
单次运算只能是 2 个数字之间的运算,且运算过程不可逆;
在 3 次运算后, 运算结果为 1024 时记为成功,否则记为失败。失败时,将返还全部用于计算的卡牌(包括 数字牌 及 运算符号牌)。
运算结果的取值范围为 32 位有符号整数,超过此范围将提示报错。
作者:力扣 (LeetCode)
链接:https://leetcode.cn/circle/discuss/JmX3M6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
运算符号
运算操作 | 符号 |
---|---|
加法 | + |
减法 | - |
乘法 | * |
幂运算 | ** |
取余 | % |
整除 | // |
或 | | |
与 | & |
异或 | ^ |
左移 | << |
右移 | >> |
编程 Python 实现
def calculate_res(nums, ops):
try:
r1 = my_op(nums[0], nums[1], ops[0])
r2 = my_op(r1, nums[2], ops[1])
r3 = my_op(r2, nums[3], ops[2])
if r3==1024:
print(nums[0], ops[0],nums[1], '=',r1,'\t',r1, ops[1],nums[2],'=',r2,'\t',r2, ops[2],nums[3],'=',r3)
except ZeroDivisionError:
return 0
return r3
def my_op(x, y, op):
if op == '+':
return x + y
elif op == '-':
return x - y
elif op == '*':
return x * y
elif op == '//': # 整除
try:
return x // y
except ZeroDivisionError:
raise ZeroDivisionError
elif op == '**': # 幂运算
try:
return int(x ** y)
except ZeroDivisionError:
raise ZeroDivisionError
elif op == '&': # 与
return x & y
elif op == '|': # 或
return x | y
elif op == '^': # 异或
return x ^ y
elif op == '>>': # 右移
return x >> y
elif op == '<<': # 左移
return x << y
elif op == '%': # 取余
return x % y
if __name__ == '__main__':
nums = [0, 0, 28, 2, 2, 2, 14,2] # 填拥有的数字卡
ops = [">>", "**", "//"] # 请填入拥有的符号卡
from itertools import permutations # 全排列
for n_perm in permutations(nums, 4):
for o_perm in permutations(ops, 3):
try:
res = calculate_res(n_perm, o_perm)
if res == 1024:
print(n_perm, o_perm, n_perm[0],o_perm[0],n_perm[1])
print()
except TypeError:
pass
相关文章