diff options
| author | chirvasitua <stuart-little@users.noreply.github.com> | 2021-01-17 21:39:27 -0500 |
|---|---|---|
| committer | chirvasitua <stuart-little@users.noreply.github.com> | 2021-01-17 21:39:27 -0500 |
| commit | 578126c2f4d905cb602f8ff9adb93a2cd7c2c2eb (patch) | |
| tree | a8f90292919719b52eb326ddf29e91dddc2d4712 | |
| parent | 90ad12cba06edbb669262200c3386cd331bd04ee (diff) | |
| download | perlweeklychallenge-club-578126c2f4d905cb602f8ff9adb93a2cd7c2c2eb.tar.gz perlweeklychallenge-club-578126c2f4d905cb602f8ff9adb93a2cd7c2c2eb.tar.bz2 perlweeklychallenge-club-578126c2f4d905cb602f8ff9adb93a2cd7c2c2eb.zip | |
1st commit on 070_haskell
| -rw-r--r-- | challenge-070/stuart-little/README | 2 | ||||
| -rwxr-xr-x | challenge-070/stuart-little/haskell/ch-1.hs | 20 | ||||
| -rwxr-xr-x | challenge-070/stuart-little/haskell/ch-2.hs | 19 |
3 files changed, 40 insertions, 1 deletions
diff --git a/challenge-070/stuart-little/README b/challenge-070/stuart-little/README index 76119cbbb8..78439907de 100644 --- a/challenge-070/stuart-little/README +++ b/challenge-070/stuart-little/README @@ -1 +1 @@ -Solutions by Stuart Little. +Solutions by Stuart Little diff --git a/challenge-070/stuart-little/haskell/ch-1.hs b/challenge-070/stuart-little/haskell/ch-1.hs new file mode 100755 index 0000000000..1c02f0accd --- /dev/null +++ b/challenge-070/stuart-little/haskell/ch-1.hs @@ -0,0 +1,20 @@ +#!/usr/bin/env runghc + +-- run <script> <string> <count> <offset> + +import Data.List.Split (splitPlaces,) +import System.Environment (getArgs,) + +swapChunks :: Int -> Int -> [a] -> [a] +swapChunks count offset xs + |count+offset < ln = l0 ++ l3 ++ l2 ++ l1 ++ l4 + |count+offset == ln = m2 ++ m4 ++ m0 ++ m3 ++ m1 + where + ln = length xs + (l0:l1:l2:l3:l4:_) = splitPlaces [1,count,offset-count,count,ln-offset-count-1] xs + (m0:m1:m2:m3:m4:_) = splitPlaces [1,count-1,1,offset-count,count-1] xs + +main = do + (str:rest) <- getArgs + let (count:offset:_) = map (read::String->Int) rest + putStrLn $ swapChunks count offset str diff --git a/challenge-070/stuart-little/haskell/ch-2.hs b/challenge-070/stuart-little/haskell/ch-2.hs new file mode 100755 index 0000000000..6be8c6a6f0 --- /dev/null +++ b/challenge-070/stuart-little/haskell/ch-2.hs @@ -0,0 +1,19 @@ +#!/usr/bin/env runghc + +-- run <script> <nr of bits> + +import Data.List.Split (chunksOf,) +import System.Environment (getArgs,) + +binStrToDec :: String -> Int +binStrToDec b = sum $ zipWith (*) (iterate (2*) 1) $ map (read::String->Int) $ chunksOf 1 $ reverse b + +gray :: Int -> [String] +gray n + |n==0 =[""] + |otherwise = (map ('0':) l) ++ (map ('1':) $ reverse l) where + l = gray (n-1) + +main = do + nrbits <- getArgs >>= return.(read::String->Int).head + print $ map binStrToDec $ gray nrbits |
