全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2024-02-21_「转」用 Go 语言实现刘谦 2024 春晚魔术,还原尼格买提汗流浃背的尴尬瞬间!

您的位置:首页 >> 新闻 >> 行业资讯

用 Go 语言实现刘谦 2024 春晚魔术,还原尼格买提汗流浃背的尴尬瞬间! 点击关注公众号,“技术干货”及时达! 龙年春晚如期而至,想必大家都看(没)完(眼)了(看)吧,今年春晚最搞笑节目,当属刘谦的魔术:《守岁共此时》,不过笑点不是节目本身,而是本场魔术的 托儿(主持人)尼格买提。 小尼:已经开始流汗了 ??。 本文将带大家一起用 Go 语言来还原下整个魔术的过程。 在开始写代码前,翻车画面必须置顶 ??: 魔术:《守岁共此时》这是一个公式魔术,即有着固定的套路,从数学角度来看是一个「约瑟夫问题」(严格证明可以在网上搜到,如果你感兴趣可以去看下)。 不过,咱们今天不讲枯燥的数学公式,固定套路是程序的强项,今天就用 Go 语言实现这个魔术的套路。 接下来,咱们直奔主题,回忆每一个步骤的同时,用程序将其实现。 步骤一、 准备 4 张扑克牌,随意打乱,完成洗牌。 代码实现如下: //我们使用`int`类型的切片`pokers`来存储扑克牌 varpokers[]int=[]int{2,7,6,5} //1.洗牌,随意打乱 rand.NewSource(time.Now().UnixNano()) rand.Shuffle(len(pokers),func(i,jint){ pokers[i],pokers[j]=pokers[j],pokers[i] }) fmt.Printf("1.洗牌后的牌:%v\n",pokers) 我们以截图中刘谦手里持有的 4 张扑克牌为例,用一个 int 类型的 slice 存储这些牌。 在 Go 中可以使用 rand.Shuffle 方法来打乱 slice 的顺序。 执行程序,得到洗牌后的结果如下: [6752] 二、 对折,然后撕开,接着叠在一起,相当于扑克牌变成了两份,double 了,4 张变 8 张。 这一步相当于 pokers 内容 * 2,代码实现如下: pokers=append(pokers,pokers...) fmt.Printf("2.对折后的牌:%v\n",pokers) 复制后的 pokers 如下: [67526752] 三、 问问自己名字有几个字,就从最上面拿出对应个数的牌放到底部。 例如「刘谦」名字有 2 个字,即将 slice 前 2 个元素取出,并放到 slice 最后,代码实现如下: pokers=append(pokers[2:],pokers[:2]...) fmt.Printf("3.问问自己名字有几个字,就从最上面拿出对应个数的牌放到底部:%v\n",pokers) 得到新 pokers: [52675267] 四、 拿起最上面的 3 张牌,插入中间任意位置。 代码实现如下: pokers=append(pokers[3:7],pokers[0],pokers[1],pokers[2],pokers[7]) fmt.Printf("4.拿起最上面的3张牌,插入中间任意位置:%v\n",pokers) 这里将 pokers 前 3 个元素取出,并插入最后一个元素之前,得到新 pokers: [75265267] 五、 拿出最上面的 1 张牌,藏于秘密的地方,比如屁股下。 代码实现如下: top:=pokers[0] pokers=pokers[1:] fmt.Printf("5.拿出最上面的1张牌:%d,%v\n",top,pokers) 这里使用 top 变量暂存最上面的 1 张牌: 7,[5265267] 此时得到 top 值为 7,pokers 还剩 7 个元素。 六、 如果你是南方人,从上面拿起 1 张牌;如果你是北方人,则从上面拿起 2 张牌;假如我们不确定自己是南方人还是北方人,那就干脆拿起 3 张牌,然后插入中间任意位置。 这一步其实同第四步操作一样,假设我们是北方人,代码实现如下: pokers=append(pokers[2:6],pokers[0],pokers[1],pokers[6]) fmt.Printf("6.从上面拿出2张牌:%v\n",pokers) 得到新 pokers: [6526527] 七、 如果你是男生,从上面拿起 1 张牌;如果你是女生,则从上面拿起 2 张牌,撒到空中(扔掉)。 假设是男生,代码实现如下: pokers=pokers[1:] fmt.Printf("7.如果你是男生,从上面拿起1张牌;如果你是女生,则从上面拿起2张牌,撒到空中(扔掉):%v\n",pokers) 得到新 pokers: [526527] 八、 魔法时刻,在遥远的魔术的历史上,流传了一个七字真言「见证奇迹的时刻」,可以带给我们幸福。现在,我们每念一个字,从上面拿一张放到最底部,即需要完成 7 次同样的操作。 我们可以用 for loop 来完成重复操作,代码实现如下: forrange[]string{"见","证","奇","迹","的","时","刻"}{ pokers=append(pokers[1:],pokers[0]) } fmt.Printf("8.见证奇迹的时刻:%v\n",pokers) 得到新 pokers: [265275] 九、 最后一个环节,叫「好运留下来,烦恼丢出去」,在念到「好运留下来」时,从上面拿起 1 张牌放入底部;在念到「烦恼丢出去」时,从上面拿起 1 张牌扔掉,女生需要完成 4 次同样的操作,男生需要完成 5 次同样的操作。 因为第七步中我们选择了男生,所以现在要完成 5 次同样的操作,同样适用 for loop 来完成,代码实现如下: forrange[]int{1,2,3,4,5}{ //好运留下来 pokers=append(pokers[1:],pokers[0]) //烦恼丢出去 pokers=pokers[1:] } fmt.Printf("9.好运留下来,烦恼丢出去:%v\n",pokers) 最终得到的 pokers: [7] 切片 pokers 中仅存一个元素,即手中只剩一张牌。 见证奇迹接下来就是见证奇迹的时刻,拿出藏于屁股下的牌和手里唯一剩下的一张牌对比,正是同一张牌: 打印 top 值和 pokers 中仅存的元素。 fmt.Printf("见证奇迹:%d==%d",top,pokers[0]) 结果毫无悬念: 见证奇迹:7==7 程序完整日志输出如下: 1.洗牌后的牌:[6752] 2.对折后的牌:[67526752] 3.问问自己名字有几个字,就从最上面拿出对应个数的牌放到底部:[52675267] 4.拿起最上面的3张牌,插入中间任意位置:[75265267] 5.拿出最上面的1张牌:7,[5265267] 6.从上面拿出2张牌:[6526527] 7.如果你是男生,从上面拿起1张牌;如果你是女生,则从上面拿起2张牌,撒到空中(扔掉):[526527] 8.见证奇迹的时刻:[265275] 9.好运留下来,烦恼丢出去:[7] 见证奇迹:7==7 还原「尼格买提」神操作在此必须回顾一下尼格买提尴尬瞬间,反复尴尬 ??: 仔细观看回放就能发现,其实小尼错在了第六步,小尼是北方人,所以应该从上面拿起 2 张牌,插入中间任意位置,但由于操作失误,错将拿起的第 2 张牌插入到最底部。 神操作在此: 即第六步代码原本应该如下: pokers=append(pokers[2:6],pokers[0],pokers[1],pokers[6]) 到小尼这里变成了: pokers=append(pokers[2:6],pokers[0],pokers[6],pokers[1]) 读者可以自行修改代码后尝试运行下,我就不展示结果了,怕尴尬 ??,哈哈哈。 彩蛋不知道大家有没有注意到,在魔术表演结束时,观众席镜头左下角那个手里拿着 AJ 的姐姐! 放大特写: AJ 姐姐满脸洋溢着尴尬的笑容 ??。 总结没有总结。 本文仅供大家消遣娱乐,顺便学点编程 ??。 本文完整代码示例我放在了 GitHub(https://github.com/jianghushinian/blog-go-example/blob/main/2024-spring-festival-gala-magic/main.go)上,欢迎点击查看。 阅读原文

上一篇:2024-08-11_阿里巴巴2024届的薪资。。。 下一篇:2020-09-30_刷手支付上线!从今天起,你在亚马逊购物真要「剁手」了

TAG标签:

17
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价