elm/exercises/series/Series.example
2016-04-07 20:30:57 -04:00

33 lines
681 B
Text

module Series (..) where
import String
import List
import Result
slices : Int -> String -> Result String (List (List Int))
slices size input =
if size < 1 then
Err ("Invalid size: " ++ toString size)
else
String.split "" input
|> List.map String.toInt
|> combine
|> Result.map (takeRuns size)
takeRuns : Int -> List Int -> List (List Int)
takeRuns size numbers =
let
candidate =
List.take size numbers
in
if List.length candidate < size || size < 1 then
[]
else
candidate :: takeRuns size (List.drop 1 numbers)
combine : List (Result x a) -> Result x (List a)
combine =
List.foldr (Result.map2 (::)) (Ok [])