fork download
  1. matr11 :: [[Int]] -> Int -> Int
  2. matr11 [] _ = 0
  3. matr11 (x:xs) n = seln x n + matr11 xs (n+1)
  4.  
  5. seln :: [Int] -> Int ->Int
  6. seln [] _ = 0
  7. seln (y:ys) h = if h==1 then y else seln ys (h-1)
  8.  
  9. diag2 ys =
  10. nx (reverse ys)
  11. where
  12. nx ((x : _) : xs) = x : nx (map tail xs)
  13. nx _ = []
  14.  
  15. testdata = [[1,2,3,4,5],[10,20,30,40,50],[100,200,300,400,500],
  16. [1000,2000,3000,4000,5000],[10000,20000,30000,40000,50000]]
  17.  
  18. sumd2 matr = sum (map (\ n -> (matr !! n) !! (k-n-1)) [0..k-1])
  19. where k=length matr
  20.  
  21. sumn2a matr = sum $ map (\ n -> (matr !! n) !! (n+1)) [0..k-2]
  22. where k=length matr
  23.  
  24. main =
  25. do
  26. -- Верхняя побочная диагональ
  27. print $ matr11 testdata 0
  28. print $ matr11 testdata 1
  29. print $ matr11 testdata 2
  30. print $ sumd2 testdata
  31. print $ sumn2a testdata
  32.  
  33. print $ diag2 testdata
  34.  
  35.  
Success #stdin #stdout 0s 6224KB
stdin
Standard input is empty
stdout
43210
54321
5432
12345
5432
[10000,2000,300,40,5]