diff options
| -rw-r--r-- | 4-kyu/snail.hs | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/4-kyu/snail.hs b/4-kyu/snail.hs index 20512e0..d2bacdc 100644 --- a/4-kyu/snail.hs +++ b/4-kyu/snail.hs @@ -4,11 +4,8 @@ module Snail where snail :: [[Int]] -> [Int] snail [] = [] -snail arr = foldl1 (++) $ map (roundAt w h arr) [0..center] - where - w = length (arr !! 0) - h = length arr - center = min (w `div` 2) (h `div` 2) +snail arr = foldl1 (++) $ map (roundAt n arr) [0..(n `div` 2)] + where n = length arr rowRange col from to arr = drop from $ take (to+1) $ arr !! col @@ -16,8 +13,8 @@ rowRange col from to arr = colRange row from to arr = map (!!row) $ drop from $ take (to+1) arr -roundAt w h arr x = - (rowRange x x (w-x-1) arr) ++ - (colRange (w-x-1) (x+1) (h-x-1) arr) ++ - (reverse $ rowRange (h-x-1) x (w-x-2) arr) ++ - (reverse $ colRange x (x+1) (h-x-2) arr) +roundAt n arr x = + (rowRange x x (n-x-1) arr) ++ + (colRange (n-x-1) (x+1) (n-x-1) arr) ++ + (reverse $ rowRange (n-x-1) x (n-x-2) arr) ++ + (reverse $ colRange x (x+1) (n-x-2) arr) |
