翻译:王成林(麦克斯韦的麦斯威尔)
审校:黄秀美(厚德载物)

我叫Mike Acton,是一名在Insommiac Games工作的引擎指导,今天我要讨论的是如何解决任天堂的CodinGame挑战。也许你不了解CodinGame,这是一个在线网站,可以通过游戏进行编程。另外还包含一些难题挑战,人们可以在上面完成挑战,帮助人们熟悉编程。你可以在很多网站上找到相似的内容。不过任天堂发起了一项挑战,它引起了我的注意,因为我觉得这个挑战可能和游戏有关,可能会很有趣。我即将为大家展示的所有幻灯片,包括这个文档,都可以在我的GitHub上找到,你可以将它下载下来仔细阅读。这里是链接:https://github.com/macton/nintendo-challenge

144709p0d2dkbkcb3c726b.png
如你所见f0和f1是相同,都是0x67,其余各项则构成了原始多项式的b部分。

让我们回到最初的问题,给定一个GF(2^n)中的多项式,其中n等于这些位深,求所有阶数小于等于n/2的因式对儿。第一步,求f所有的不可约因子。现在我有足够的勇气来做第一步了。不过幸运的是,步骤234要简单的多,只需将得到的不可约因子重新合并成符合阶数限制的因子对儿即可。这就是测试1e的内容了。它遍历了不可约因子列表,然后将它们重新合并为因子对儿。这里是它的输出结果:

144710mlrkkrgmk8mcksui.jpg
然后是测试1f。测试1f回到了最开始的测试案例,我们还没有完全解决这个问题!我的意思是我们还不知道所做一切是否正确,所以要运行题目给的测试案例进行检验。

测试案例3,现在我知道为什么虽然输入和输出值都是64位这里却是32了,因为这代表的是两个32位数字相乘。不过我们现在对输入值进行因式分解,最终得到了和测试案例中相同的结果。我感觉很开心,因为我们成功地解决了问题。除了有一小点,那就是在题目给的这些测试案例中有的时候输出结果中会包含一个看似完全多余的1:

144710pm2s35653bakn5n5.jpg
这一点给人的第一印象可能会联想到这是个关于因式分解的问题,不过看上去有些多余。因式分解中当然包含该因式本身和1相乘,那么为什么还要输出这对儿呢?什么时候结果中会包含这一对儿呢?我将这部分留给读者作为一个练习:)如我之前所说,演讲的所有内容都可以在我的github页面中找到,所有的测试都在那里,这个word文档也在那,你可以自己跟着它一步一步运行一遍。makefile也在那,你可以自己编译。你可以自己钻研钻研,我愿意回答任何有关问题。哦,甚至是pull请求都可以,请继续你们的测试20吧!就是这样了,谢谢大家!

via:Gad


锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛