偶然看到的練習~


第一題: 給一 List,用 for , while , recursion 加總。


第二題: merge 兩個 List 使其從 [a , b , c] -> [1 , 2 , 3] -> [a , 1 , b , 2 , c , 3]。


第三題: 求斐波那契前一百個數。


第四題: 給定元素,組出最大的一個整數。


第五題: 123456789 其數字間可加上 + , - 或不加,求所有運算結果為 100 的式子。


嘛,儘管如此的水,我還是會卡在無聊的地方,太 naive 了,順帶一提 python 的 functional 還不錯用。


再次拜倒在函數式的優雅下。




"""
http://www.shiftedup.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
"""
from functools import reduce
from operator import add
def sol1(seq):
ans = [0 , 0 , 0]
for it in seq:
ans[0] += it
i = 0
while i < len(seq):
ans[1] += seq[i]
i += 1
ans[2] = (lambda f , *cond: f(f , *cond)) \
(lambda f , l , acc: f(f , l[1::] , acc + l[0]) if l else acc , seq , 0)
return (all([e == sum(seq) for e in ans]) , ans)
def sol2(a , b):
return reduce(add , zip(a , b))
def sol3(l):
return reduce(lambda acc , i: acc + [acc[i - 2] + acc[i - 1]] , range(2 , l) , [0 , 1])
def sol4(ls):
return ''.join(reversed(sorted([str(e) for e in ls])))
def sol5(exp , po):
inserted = lambda exp , po , elt: exp[:po:] + elt + exp[po::]
solved = lambda op: sol5(inserted(exp , po , op) , po + len(op) + 1)
return reduce(add , map(solved , ('+' , '-' , ''))) \
if po < len(exp) else ([exp] if eval(exp) == 100 else [])
print(sol1([1 , 3 , 5 , 7 , 9]))
print(sol2([1 , 2 , 3] , ['a' , 'b' , 'c']))
print(sol3(100))
print(sol4([50 , 2 , 1 , 9]))
print(sol5("123456789" , 1))
view raw FiveProb.py hosted with ❤ by GitHub

留言

這個網誌中的熱門文章

[Antergos] disable touchpad

活著。