From da0b3584bc6dea9f02b9ddb949dbf8f404228a1a Mon Sep 17 00:00:00 2001 From: Mistivia Date: Thu, 24 Apr 2025 17:54:22 +0800 Subject: update --- 4-kyu/snail.hs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 4-kyu/snail.hs diff --git a/4-kyu/snail.hs b/4-kyu/snail.hs new file mode 100644 index 0000000..20512e0 --- /dev/null +++ b/4-kyu/snail.hs @@ -0,0 +1,23 @@ +-- https://www.codewars.com/kata/521c2db8ddc89b9b7a0000c1 + +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) + +rowRange col from to arr = + drop from $ take (to+1) $ arr !! col + +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) -- cgit v1.0