From 6d7f692ac38f9e2964aed76574c989990f1e573b Mon Sep 17 00:00:00 2001 From: manuel Date: Fri, 23 Mar 2012 18:56:51 +0100 Subject: implementing fibdiag --- AufgabeFFP1.hs | 19 +++++++++++++++++++ TestAufgabeFFP1.hs | 31 ++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/AufgabeFFP1.hs b/AufgabeFFP1.hs index 8dd52e1..88d46b4 100644 --- a/AufgabeFFP1.hs +++ b/AufgabeFFP1.hs @@ -19,3 +19,22 @@ pof2s = map (2^) [0,1..] -- ... pd :: [[Integer]] pd = iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1] + +------------------------------------------------------------------------------- + +-- steps: +-- (1) [pd !! (1-1) !! 0] +-- (2) [pd !! (2-1) !! 0] +-- (3) [pd !! (3-1) !! 0] ++ [pd !! (3-2) !! 1] +-- (4) [pd !! (4-1) !! 0] ++ [pd !! (4-2) !! 1] +-- (5) [pd !! (5-1) !! 0] ++ [pd !! (5-2) !! 1] ++ [pd !! (5-3) !! 2] +-- (6) [pd !! (6-1) !! 0] ++ [pd !! (6-2) !! 1] ++ [pd !! (6-3) !! 2] +-- (7) [pd !! (7-1) !! 0] ++ [pd !! (7-2) !! 1] ++ [pd !! (7-3) !! 2] ++ [pd !! (7-4) !! 3] +-- ... +-- (n) [pd !! (n-1) !! 0] ++ [pd !! (n-2) !! 1] ++ [pd !! (n-3) !! 2] ++ ... +fibdiag :: Integer -> [Integer] +fibdiag (n) + | n <= 0 = [] + | otherwise = map (\x -> pd !! (fromInteger n - x) !! (x - 1)) [1..count] + where + count = (fromInteger n + 1) `div` 2 diff --git a/TestAufgabeFFP1.hs b/TestAufgabeFFP1.hs index e119a3e..7cbc2c2 100644 --- a/TestAufgabeFFP1.hs +++ b/TestAufgabeFFP1.hs @@ -26,8 +26,37 @@ pdTests = TestList [pd1] ------------------------------------------------------------------------------- +fibdiag1 :: Test +fibdiag1 = TestCase (assertEqual "fibdiag(1)" [1] (fibdiag 1)) + +fibdiag2 :: Test +fibdiag2 = TestCase (assertEqual "fibdiag(2)" [1] (fibdiag 2)) + +fibdiag3 :: Test +fibdiag3 = TestCase (assertEqual "fibdiag(3)" [1,1] (fibdiag 3)) + +fibdiag4 :: Test +fibdiag4 = TestCase (assertEqual "fibdiag(4)" [1,2] (fibdiag 4)) + +fibdiag5 :: Test +fibdiag5 = TestCase (assertEqual "fibdiag(5)" [1,3,1] (fibdiag 5)) + +fibdiag6 :: Test +fibdiag6 = TestCase (assertEqual "fibdiag(6)" [1,4,3] (fibdiag 6)) + +fibdiag7 :: Test +fibdiag7 = TestCase (assertEqual "fibdiag(7)" [1,5,6,1] (fibdiag 7)) + +fibdiag8 :: Test +fibdiag8 = TestCase (assertEqual "fibdiag(8)" [1,6,10,4] (fibdiag 8)) + +fibdiagTests = TestList [fibdiag1, fibdiag2, fibdiag3, fibdiag4, fibdiag5, + fibdiag6, fibdiag7, fibdiag8] + +------------------------------------------------------------------------------- + tests :: [Test] -tests = [pof2s1, pdTests] +tests = [pof2s1, pdTests, fibdiagTests] main = do forM tests $ \test -> -- cgit v1.2.3