Haskell variant for day seven
This commit is contained in:
3
day-07-haskell/src/Common.hs
Normal file
3
day-07-haskell/src/Common.hs
Normal file
@@ -0,0 +1,3 @@
|
||||
module Common (Equation) where
|
||||
|
||||
type Equation = (Int, [Int])
|
||||
6
day-07-haskell/src/Lib.hs
Normal file
6
day-07-haskell/src/Lib.hs
Normal file
@@ -0,0 +1,6 @@
|
||||
module Lib
|
||||
( someFunc
|
||||
) where
|
||||
|
||||
someFunc :: IO ()
|
||||
someFunc = putStrLn "someFunc"
|
||||
20
day-07-haskell/src/Task1.hs
Normal file
20
day-07-haskell/src/Task1.hs
Normal file
@@ -0,0 +1,20 @@
|
||||
module Task1 (task1) where
|
||||
|
||||
import Common
|
||||
|
||||
task1 :: [Equation] -> Int
|
||||
task1 equations = sum $ map processEquation equations
|
||||
|
||||
processEquation :: Equation -> Int
|
||||
processEquation (result, params) =
|
||||
if brute (reverse params) result
|
||||
then result
|
||||
else 0
|
||||
where
|
||||
brute :: [Int] -> Int -> Bool
|
||||
brute [] _ = False
|
||||
brute [param] subResult = subResult == param
|
||||
brute (param:subParams) subResult
|
||||
| brute subParams $ subResult - param = True
|
||||
| subResult `mod` param == 0 && brute subParams (subResult `div` param) = True
|
||||
| otherwise = False
|
||||
34
day-07-haskell/src/Task2.hs
Normal file
34
day-07-haskell/src/Task2.hs
Normal file
@@ -0,0 +1,34 @@
|
||||
module Task2 (task2, unconcat, unconcatStrings) where
|
||||
|
||||
import Common
|
||||
import Data.List (isSuffixOf)
|
||||
|
||||
task2 :: [Equation] -> Int
|
||||
task2 equations = sum $ map processEquation equations
|
||||
|
||||
processEquation :: Equation -> Int
|
||||
processEquation (result, params) =
|
||||
if brute (reverse params) result
|
||||
then result
|
||||
else 0
|
||||
where
|
||||
brute :: [Int] -> Int -> Bool
|
||||
brute [] _ = False
|
||||
brute [param] subResult = subResult == param
|
||||
brute (param:subParams) subResult
|
||||
| brute subParams $ subResult - param = True
|
||||
| subResult `mod` param == 0 && brute subParams (subResult `div` param) = True
|
||||
| otherwise = case unconcat subResult param of
|
||||
Nothing -> False
|
||||
Just rest -> brute subParams rest
|
||||
|
||||
unconcat :: Int -> Int -> Maybe Int
|
||||
unconcat result suffix = do
|
||||
rest <- unconcatStrings (show result) (show suffix)
|
||||
Just $ read rest
|
||||
|
||||
unconcatStrings :: String -> String -> Maybe String
|
||||
unconcatStrings sResult sSuffix
|
||||
| sSuffix == sResult = Nothing
|
||||
| sSuffix `isSuffixOf` sResult = Just $ take ((length sResult) - (length sSuffix)) sResult
|
||||
| otherwise = Nothing
|
||||
Reference in New Issue
Block a user