• #1楼 @hkliya 这是Thomas最初提出Code Kata概念时列出的一个。
    http://codekata.com/
    不得不说境界是有差距的,20个Kata有一小半都不是具体的编程练习。
    Thomas是真正软件工程师的级别,而我还在码农视角。
    列表如下
    1. 设计一个超市计费系统
    1. 用5种不同方式实现二分查找
    1. 快速估算若干个数值
    1. 写个程序从两个网站抓取数据,重构出共有部分
    1. 实现Bloom Filter
    1. 从一个字典中找出所有的构成字母相同的异位词
    1. 用三种视角读自己以前写的代码,好的,坏的,寻找bug
    1. 以三种目标写同一段程序,尽可能易读,运行的尽可能快,尽可能易于扩展
    1. 超市结帐题目
    1. 分析在处理大量业务数据时,采用Object和Hash两种方式各自的优缺点
    1. 实现一个排序算法
    1. 思考对于淘宝级别的电商网站,如何实现热卖榜
    1. 写一个统计代码行数的小工具
    1. 实现一个文本分析算法Trigram analysis
    1. 对于n位的二进制数,没有相邻两位都是1出现的数字有几个?
    1. 思考如何实现一个业务规则系统
    1. 更进一步的业务规则思考题
    1. 计算代码间的依赖
    1. 实现一个算法把单词A变为B,每次改变一个字母
    1. 实现纸牌游戏Klondike
    1. 写三种不同的list实现

  • #2楼 @1th 是啊,老板不给上班看书时间啊
    主要是上下班时间用电子书看。

  • #1楼 @hkliya 头条怎么玩,我还没玩过呢

  • 还是《从入门到放弃》系列更实用一些……

  • #3楼 @abbey 一下说到我的伤心处。我用MacType好几年了。前两天因为跟DockerToolbox 冲突,卸载了装新版本。
    结果发现公司IT policy 禁止写系统临时目录,导致装不上。
    现在逼得我都想要把工作机切换到Ubuntu了

  • 弄个中二之旅

  • Sure, it is evil. Sometime it is a necessary evil.

  • 同一个dojo session下又做了两次。
    使用fold

    factors_to_list t@(n, ps) p 
        | n `mod` p == 0 = (next_n, new_ps)
        | otherwise = t
        where (next_n, new_ps) = factors_to_list (n `div` p, ps ++ [p]) p
    
    factors :: Integer -> [Integer]
    factors n = snd (foldl factors_to_list (n, []) [2..n])

    缺点是数字较大时性能差,因为fold计算了整个小于n的数的列表。在这之前可能早已求出所有因子了。

    改为scanl 加 filter,利用Haskell惰性求值终止fold过程,性能与递归方式相当。

    no_more = ((==1) . fst)
    
    check_factor pair@(n, ps) p 
        | no_more pair = pair
        | p_is_factor = (new_n, more_ps)
        | n_is_prime = (1, ps ++ [n])
        | otherwise = pair
        where 
            (new_n, more_ps) = check_factor (n `div` p, ps ++ [p]) p
            p_is_factor = n `mod` p == 0
            n_is_prime = p * p > n 
    
    factors :: Integer -> [Integer]
    factors n = 
        let return_once_get_all_factors = snd . head . filter no_more
        in  return_once_get_all_factors (scanl check_factor (n, []) [2..])
  • 试试 quickrun

  • 我用 http://www.websequencediagrams.com/ 画时序图
    虽然不是Ascii的,手绘风格还是颇有Geek风的。
    如图:

    是用如下代码生成的:

    title Would you be my GF?
    Boy->Girl: Would U be my GF?
    note right of Girl: enigmatic and charming
    Girl->Boy: Guess
    note left of Boy: full of hope
    Boy->Girl: Yes!
    Girl->Boy: Try again