111 lines
2.4 KiB
Text
111 lines
2.4 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"puzzle <- readFile \"10.txt\"\n",
|
|
"plines = lines puzzle"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Day 10"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Puzzle 1"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"1885"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import Data.List (sort)\n",
|
|
"\n",
|
|
"nums = sort $ map read plines :: [Int]\n",
|
|
"\n",
|
|
"count :: Eq a => [a] -> a -> Int\n",
|
|
"count lst a = foldl (\\acc e -> if e == a then acc + 1 else acc) 0 lst\n",
|
|
"\n",
|
|
"let diffs = head nums:[(nums !! i) - (nums !! (i - 1)) | i <- [1..length nums - 1]]\n",
|
|
" in count diffs 1 * (count diffs 3 + 1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Puzzle 2"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"2024782584832"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import qualified Data.Map as Map\n",
|
|
"\n",
|
|
"count :: Int -> Int -> Map.Map (Int, Int) Int -> (Int, Map.Map (Int, Int) Int)\n",
|
|
"count idx joltage dp\n",
|
|
" | idx == length nums = (if joltage == last nums then 1 else 0, dp)\n",
|
|
" | nums !! idx - joltage > 3 = (0, dp)\n",
|
|
" | otherwise = case Map.lookup (idx, joltage) dp of\n",
|
|
" Just c -> (c, dp)\n",
|
|
" _ -> let\n",
|
|
" (a, dp2) = count (idx + 1) joltage dp\n",
|
|
" (b, dp3) = count (idx + 1) (nums !! idx) dp2\n",
|
|
" in (a + b, Map.union dp3 $ Map.singleton (idx, joltage) (a + b))\n",
|
|
"\n",
|
|
"fst $ count 0 0 Map.empty"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Haskell",
|
|
"language": "haskell",
|
|
"name": "haskell"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": "Haskell",
|
|
"file_extension": ".hs",
|
|
"mimetype": "text/x-haskell",
|
|
"name": "haskell",
|
|
"pygments_lexer": "Haskell",
|
|
"version": "8.8.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|