среда, 5 марта 2008 г.

Функциональное программирование - я потихоньку учусь плохому

Project Euler, problem 105

Почти весь код на Питоне:

def euler_105_test(li):

    dest=sorted(select_combinations(li),lambda x,y:x[1]-y[1])

    return all(take(len(dest)-1,izip(dest,dest[1:])),lambda x:x[0][1] != x[1][1] and x[0][0] <= x[1][0])   

 

def euler_105():

    data = [[int(n) for n in line.split(',')] for line in file(r"d:\download\sets.txt")]

    print sum(map(sum,filter(euler_105_test,data)))



Обратите внимание на строчки

all(take(len(dest)-1,izip(dest,dest[1:])),lambda x:x[0][1] != x[1][1] and x[0][0] <= x[1][0])   


и

sum(map(sum,filter(euler_105_test,data)))



Мне даже сложно описать словами что выполняет первыя строчка.
Вторая строчка фактически суммирует двумерный массив.

Не приведен код функции select_combinations, но ее пока я не могу написать "красиво".

Комментариев нет: