2013年 四月 28日 周日 | tags: python, arithmetic, functional, -- (permalink)

今天看InfoQ上的一篇关于 Fn.py 的文章,Fn中的Stream可以实现无限序列,例如文章中的代码:

f = Stream()
fib = f << [0, 1] << map(lambda x, y: x + y, f, drop(1, f))

这是实现了一个无限的斐波那契数列,我根据这个实现了一个等比级数,等比级数的公式是f = b(n-1), b是基数,n=1 f=1, n>=2 f=b(n-1)。

我实现的方法使用了生成器:

def geo_sequence(b):
    n = 2
    while 1:
        yield b ** (n - 1)
        n ...

2013年 三月 24日 周日 | tags: python, arithmetic, -- (permalink)

无事可做用python实现的的排列和组合的算法,顺便也复习以下2.7中yield的用法

# coding: utf8


def perm(items, n=None):
    if n is None:
        n = len(items)
    for i in range(len(items)):
        v = items[i:i + 1]
        if n == 1:
            yield v
        else:
            _items = items[:i] + items[i + 1:]
            for p in perm(_items):
                yield v + p


def comp ...

2013年 三月 13日 周三 | tags: openssl, java, aes, arithmetic, -- (permalink)

开篇第一句话我想说, OpenSSL不支持与Java的对接 ,这是多么蛋疼的一句话,不过确实是这样,原因是在c中的填充方式和Java中的填充方式不一样,Java不支持c中的/0的填充方式。

具体信息请查看:OpenSSL和JAVA AES算法的问题总结

至于我为什么会写这篇文章呢,是我们的项目中有部分在网络传输的内容需要加密,所以就选用了AES的,服务端使用的是openresty 这是淘宝的一个大牛写的,他里面集成了LuaJit, 加密的部分使用的是resty.aes,而resty使用的是OpenSSL的C代码实现的加密解密。为了和OpenSSL实现对接,我就蛋疼的去简单的链接了下OpenSSL,在上面的文章中才指导OpenSSL并不支持Java,查了无数人的文章,很多人都对这个问题很苦恼,最后在 stackoverflow 里找到了一个大牛给出了一个解码的实现 stackoverflow 我根据这位大牛的代码简单的修改了一下,就做成了我需要的代码:

最后我想吐槽一下lua5.1居然不支持位运算,要5.2才支持,好吧,openresty集成的就是5.1所以我在实现lua的16位编码解码果然蛋疼了一下。


2013年 二月 01日 周五 | tags: python, arithmetic, -- (permalink)

昨天在G+上看到的一个算法题: > Returns the number of 1bits in any integer, for example, bits(2) = 1, > bits(3) = 2, bits(4) = 1, bits(5) = 2, bits(6) = 2, bits(7) = 3 我用python简单的实现了一下,实现的还是有点冗长,应该还能优化。

def bits(n):
    t = 2
    f1 = lambda x: 2 * (x / 2)
    f2 = lambda x: x / 2
    if ...