AdventOfCode/2020/04_haskell.ipynb

112 lines
2.8 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"puzzle <- readFile \"04.txt\"\n",
"plines = lines puzzle\n",
"\n",
"int x = read x :: Int"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Day 04"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Puzzle 1"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"200"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import qualified Data.Map as Map\n",
"import Data.List.Split\n",
"\n",
"valid fields = all (`Map.member` fields) [\"byr\",\"iyr\",\"eyr\",\"hgt\",\"hcl\",\"ecl\",\"pid\"]\n",
"length $ filter valid [Map.fromList . map ((\\[a,b]->(a,b)) . splitOn \":\") $ concatMap words $ lines pp | pp <- splitOn \"\\n\\n\" puzzle]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Puzzle 2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"116"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import qualified Data.Map as Map\n",
"import Data.List.Split\n",
"import Data.Maybe\n",
"\n",
"checkField fields (f, k) = k `Map.member` fields && f (fromMaybe \"\" $ Map.lookup k fields)\n",
"valid fields = all (checkField fields) [\n",
" (\\x -> 1920 <= int x && int x <= 2002, \"byr\"),\n",
" (\\x -> 2010 <= int x && int x <= 2020, \"iyr\"),\n",
" (\\x -> 2020 <= int x && int x <= 2030, \"eyr\"),\n",
" (\\x -> case head (reads x :: [(Int, String)]) of (h,\"cm\") -> 150 <= h && h <= 193\n",
" (h,\"in\") -> 59 <= h && h <= 76\n",
" _ -> False, \"hgt\"),\n",
" (\\x -> head x == '#' && all (`elem` \"0123456789abcdef\") (tail x), \"hcl\"),\n",
" ((`elem` words \"amb blu brn gry grn hzl oth\"), \"ecl\"),\n",
" (\\x -> length x == 9, \"pid\")\n",
" ]\n",
"length $ filter valid [Map.fromList . map ((\\[a,b]->(a,b)) . splitOn \":\") $ concatMap words $ lines pp | pp <- splitOn \"\\n\\n\" puzzle]"
]
}
],
"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
}