分享一个算24点的Kata

28 views
Skip to first unread message

yesterdaysun

unread,
Jan 11, 2016, 11:23:57 AM1/11/16
to agileshanghai
之前看到了madcocomo分享的24点的kata, 就一直想自己实现一个, 上一次实现它还是上大学的时候了: ) 
其实这个小算法我已经做了好几遍, 第一次用TDD, 但是就像Joseph说的, 因为算法比重比较大, 一开始没什么思路, 开始了一点点就几乎推进不下去了.
后来就抛弃了TDD, 用传统的思路超级暴力搜索搞定了, 但是感觉很不满意....
最近有空的时候一直在想这个算法, 总算有了点思路,所以又用TDD做了一遍, 感至少比前面那个好一点.
算法的思路和简单,4个数全排列, 取前2个,算好放回去剩3个, 再全排列,再取2个算好放回去....递归的做直到只剩一个,我用了一个语法树保存计算过程,在递归最底层规约语法树得到值与24比较,成功就打印语法树. 需要改进的地方: 更好的显示,能够智能的加括号, 更多地剪枝提高搜索效率, 用自己实现的全排列而不是lib里的(当练习)
TDD的过程中有些地方感觉还是步子迈的大了, 挂了一片,差点hold不住了, 后面再来的时候会再小心一点

下面可能会再把madcocomo的kata看一遍, 之前没看是想先按自己的思路来,还要看看网上其他人的算法思路, 争取再搞一个不一样的(比如用递推不用递归).
大家有什么想法, 欢迎拍砖!!

第一次在cyber-dojo上写代码, 缺了语法高亮感觉都不会写代码了:)
http://cyber-dojo.org/kata/edit/0D0660?avatar=zebra

https://github.com/yesterdaysun/Kata/tree/master/24points

武可

unread,
Jan 26, 2016, 4:28:42 AM1/26/16
to agiles...@googlegroups.com
我的第一版本的算法是各种if的拼凑,经过很长的一段重构之后,才最终得到了一个看起来合理的算法,和你的算法几乎完全一样。
直到最终后一次重构前,我还在猜测是不是需要从两头分别取数组合。
这次练习我的最大收获就是,在一定复杂度内,“盲目”的进行测试和重构,确实可以浮现出设计。代码味道本身会告诉你算法。当然这个浮现过程目前还是很痛苦的。除去低级错误外大概进行了100次。
看你过程,可以看出来过程中43步左右有一段纠结。不懂Ruby,所以不是很明白具体纠结的是什么 :D
我做kata有时候会有一种感觉,我把它叫做“第二次kata”。就是脑子里已经有了比较完整的思路,甚至可能已经实现过一次。kata的过程只是用TDD的步骤逐步写出来而已。细节上来说,就是有时候会觉得驱动力更多的体现在写代码而不是写测试中,测试往往只是表示一下现在在做什么而已。另一个特点有时候比较大的步骤一旦出错,测试给出的信息不足以定位错误。因为代码是按照脑子里的意图来写的,这个意图并没有足够的测试描述。
在做完第一个版本之后,我用outside-in方式又做了一边这个kata。给我的感觉这种风格似乎更适合第二次kata的情况。

另外我在鸡蛋里挑到个骨头啊哈哈: 25/2 + 23 /2

--
您收到此邮件是因为您订阅了Google网上论坛上的“agileshanghai”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到agileshangha...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

Reply all
Reply to author
Forward
0 new messages