Конечно, самый треш и угар на века остается Квиксорт на Хаскелле, это классика и превзойти ее невозможно
Но задача 18 приближается
Найти максимальную сумму вниз по пирамидке
http://projecteuler.net/problem=18
собственно, решение вот
а полный текст, с получение исходных данных и печатью:
Но задача 18 приближается
Найти максимальную сумму вниз по пирамидке
http://projecteuler.net/problem=18
собственно, решение вот
step x y = zipWith (+) (zipWith max x (tail x)) y result = last $ scanl1 step input
а полный текст, с получение исходных данных и печатью:
import Data.List.Split -- input data s = "75," ++ "95 64," ++ "17 47 82," ++ "18 35 87 10," ++ "20 04 82 47 65," ++ "19 01 23 75 03 34," ++ "88 02 77 73 07 63 67," ++ "99 65 04 28 06 16 70 92," ++ "41 41 26 56 83 40 80 70 33," ++ "41 48 72 33 47 32 37 16 94 29," ++ "53 71 44 65 25 43 91 52 97 51 14," ++ "70 11 33 28 77 73 17 78 39 68 17 57," ++ "91 71 52 38 17 14 91 43 58 50 27 29 48," ++ "63 66 04 68 89 53 67 30 73 16 69 87 40 31," ++ "04 62 98 27 23 09 70 98 73 93 38 53 60 04 23" ar = map words $ splitOn "," s input = reverse $ map (map (\x -> read x :: Int)) ar -- solution maximums a = zipWith max a (tail a) step x y = zipWith (+) (maximums x) y res = scanl1 step input -- printing result main = do print $ last res