MATLAB社区

MATLAB、社区和更多

伟大的Ans黑客

科迪是一场游戏,奖励你用更少的代码计算相同的答案。第一个科迪问题你遇到* 2。起动器的问题,所以应该是超级简单:编写一个函数,输入两个繁殖。在撰写本文时,像17000人解决了这个问题。如果你被要求解决这个问题现在,你可能会写这样的东西。

函数y = times2 y = 2 * x (x);结束

代码的大小是由节点的数量在代码中潜在的解析树。没有进入解析树的细节,该函数有一个12的大小。这只是关于可能的最短的函数。你可能会认为它的最短times2程序可能写。然而,6月27日,2010年,德克·恩格尔提交解决方案,降低了尺寸从12到10。

ans-hack

他没有作弊,他得到了正确的答案。他是怎么做到的?

你可以抓你的头很长一段时间,所以我就告诉你。追溯到克里夫硅藻土MATLAB的原始版本,只要你不指定一个左手边计算,结果是放在一个名为“答”的默认变量(“答案”,明白了吗?)。这只是其中的一个MATLAB做古怪的事情。在这里你会看到它在命令行。

> > 2 * 27 ans = 54

德克的解决方案利用这个特性。它看起来是这样的。

函数ans = times2 (x) 2 * x;结束

看到他所做的吗?计算的结果是自动塞入ans,恰好是返回变量函数定义中所示。你可能再也不想做“真正的”代码。但是科迪只是一个游戏,我们相信,人们知道竞争code-shrinking和聪明的区别在现实世界中实践。

从图表可以看出,一旦这个技巧下车,这是广泛效仿。事实上,它出现在科迪网站。德克自称俺们黑客是一个多产的实践者。但碰巧,他不是第一个。荣誉的老狐狸,不是别人,正是前科迪球员和全面的MATLAB艺术大师阿方索Nieto-Castanon。它首先出现在解决方案495题,格式化的货币数量。阿方索甚至增加了这样的评论:“的主题在非法琐事会赚你几科迪点没有理由的,你见过这个吗?”

让我们回到乘以2的问题。沿着图,如果你看得更远,你会看到一个奇怪的事情。俺们黑客出现最后一次9月2日,2015年。为什么消失?科迪的大量玩家,一个集体意志,发誓戒除这个坏习惯和交付历史的垃圾桶吗?不。事实上,俺们黑客停止工作R2015b释放,2015年9月。你不会找到任何ans黑客。

ans-hack2

实际上,这并不完全正确。俺们变量在函数仍然可以使用。它不能被传递作为输出变量。丑陋的,这仍然会工作。

函数y = times2 (x) 2;y = ans * x;结束

所以它仍然是用于point-shaving科迪。不是作为一个输出参数。

但无论你看到一个隐式的“答”作为输出参数传递的条目,您可以请求re-score,看到它枯萎的满意度从绿色到红色。

你怎么认为?

你错过这个Ans黑客吗?你希望你能得到它吗?你有什么感受point-shaving这样黑客吗?无害的牛车的名义好好玩吗?或腐蚀性影响编码青年的敏感的心灵?在评论中让我知道!

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。