2015 Day 04 in Haskell
This commit is contained in:
parent
dbc69a8a6d
commit
055c95b9e3
23
2015/day04/day04.hs
Normal file
23
2015/day04/day04.hs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import Aoc
|
||||||
|
import Crypto.Hash.MD5 ( hash )
|
||||||
|
import Data.ByteString.Char8 ( pack )
|
||||||
|
import Data.ByteString.Builder ( byteStringHex, toLazyByteString )
|
||||||
|
import Data.ByteString.Lazy.Char8 ( pack, isPrefixOf )
|
||||||
|
|
||||||
|
parseFile :: [String] -> [Char]
|
||||||
|
parseFile = single
|
||||||
|
|
||||||
|
mine :: Int -> [Char] -> Int
|
||||||
|
mine n key = head $ filter matches [1..]
|
||||||
|
where
|
||||||
|
zeros = Data.ByteString.Lazy.Char8.pack $ replicate n '0'
|
||||||
|
matches = isPrefixOf zeros . toLazyByteString . byteStringHex . hash . Data.ByteString.Char8.pack . (key++) . show
|
||||||
|
|
||||||
|
part1 :: [Char] -> Int
|
||||||
|
part1 = mine 5
|
||||||
|
|
||||||
|
part2 :: [Char] -> Int
|
||||||
|
part2 = mine 6
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = aocMain parseFile part1 part2
|
6
aoc.hs
6
aoc.hs
@ -4,9 +4,9 @@ aocMain :: Show p => ([String] -> p) -> (p -> Int) -> (p -> Int) -> IO ()
|
|||||||
aocMain parseFile part1 part2 = do
|
aocMain parseFile part1 part2 = do
|
||||||
contents <- readFile "input.txt"
|
contents <- readFile "input.txt"
|
||||||
let input = parseFile $ lines contents
|
let input = parseFile $ lines contents
|
||||||
-- print $ "Input: " ++ show input
|
-- putStrLn $ "Input: " ++ show input
|
||||||
print $ "Part 1: " ++ show (part1 input)
|
putStrLn $ "Part 1: " ++ show (part1 input)
|
||||||
print $ "Part 2: " ++ show (part2 input)
|
putStrLn $ "Part 2: " ++ show (part2 input)
|
||||||
|
|
||||||
enumerate :: [a] -> [(Int, a)]
|
enumerate :: [a] -> [(Int, a)]
|
||||||
enumerate xs = zip [0..length xs] xs
|
enumerate xs = zip [0..length xs] xs
|
||||||
|
Loading…
Reference in New Issue
Block a user