简单的魔术戏法

文章介绍了一个简单的魔术戏法,其中涉及通过观众对牌的响应来猜出他们选择的数字。提供的代码示例展示了如何利用字符串处理和二进制转换来实现这一魔术,尽管最初的代码超过了字符限制,但经过优化后的一行代码解决方案成功地在106个字符内完成了任务。
摘要由CSDN通过智能技术生成

这是一个简单的魔术戏法。

看完这个魔术,我觉得它令人着迷。下面是这个戏法的流程:

首先,魔术师让你选择0到60之间的一个数字,并记住它。

然后,魔术师手上有6张牌。接着,魔术师告诉你,当你在牌中看到你选择的数字时说“是”,否则说“否”。

最后,在聆听了你所有的回答后,魔术师可以感知你记住的数字,并揭示出来。

任务:

你的任务是扮演魔术师的角色。

我会给你一个字符串,代表观众的回答。

你需要猜出观众选择的数字。

"|牌1:是|牌2:是|牌3:是|牌4:是|牌5:否|牌6:是|" -> 47

高能提醒:只能使用1行代码,106个字符。

参考 4 个栗子:

47, "|牌1:是|牌2:是|牌3:是|牌4:是|牌5:否|牌6:是|")

46, "|牌1:否|牌2:是|牌3:是|牌4:是|牌5:否|牌6:是|"

55, "|牌1:是|牌2:是|牌3:是|牌4:否|牌5:是|牌6:是|")

38, "|牌1:否|牌2:是|牌3:是|牌4:否|牌5:否|牌6:是|")

思路分析:

难度在于找规律。以上是一些示例输入和对应输出,用于测试魔术师揭示选择数字的代码逻辑。你需要仔细观察给出的测试用例,

第一组测试用例是一个全部"是"的输入,对应输出为47,验证了将"是"转换为1后,可以正确得到二进制011111,即十进制47。

其他测试用例覆盖了"否"的不同位置,验证了在"否"对应的位置0是否正确。

通过不同的测试用例,可以全面验证代码的准确性,保证各种情况下都可以正确实现这个简单有趣的魔术效果。

def magic_show(ans):
    # reverse divmode
    strg = ['1' if ans[i+2]=='Y' else '0' for i,e in enumerate(ans) if e == ':']

    return int('0b'+''.join(strg)[::-1],2)

通过所有的测试用例,但代码长度176超过题目要求,不符合一行代码搞定。

继续思考 ... ...

切片是好,但需要先数组工整,替换为长度为1的“1”和“0”

def magic_show(ans):
    return int('0b'+ans.replace('No','0').replace('Yes','1')[10:len(strg):12][::-1],2)

测试通过,满足一行代码且满足106个字符以内。

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值