40
day01.hs
Normal file
40
day01.hs
Normal file
@@ -0,0 +1,40 @@
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Char (digitToInt, isDigit)
|
||||
import Data.Text qualified as T
|
||||
import Lib (readFile')
|
||||
|
||||
first :: T.Text -> Int
|
||||
first s = f * 10 + l
|
||||
where
|
||||
values = T.filter isDigit s
|
||||
f = (digitToInt . T.head) values
|
||||
l = (digitToInt . T.last) values
|
||||
|
||||
second' :: T.Text -> [Int]
|
||||
second' s
|
||||
| T.null s = []
|
||||
| T.isPrefixOf "one" s = 1 : second' (T.tail s)
|
||||
| T.isPrefixOf "two" s = 2 : second' (T.tail s)
|
||||
| T.isPrefixOf "three" s = 3 : second' (T.tail s)
|
||||
| T.isPrefixOf "four" s = 4 : second' (T.tail s)
|
||||
| T.isPrefixOf "five" s = 5 : second' (T.tail s)
|
||||
| T.isPrefixOf "six" s = 6 : second' (T.tail s)
|
||||
| T.isPrefixOf "seven" s = 7 : second' (T.tail s)
|
||||
| T.isPrefixOf "eight" s = 8 : second' (T.tail s)
|
||||
| T.isPrefixOf "nine" s = 9 : second' (T.tail s)
|
||||
| isDigit (T.head s) = digitToInt (T.head s) : second' (T.tail s)
|
||||
| otherwise = second' (T.tail s)
|
||||
|
||||
second :: T.Text -> Int
|
||||
second s = head values * 10 + last values
|
||||
where
|
||||
values = second' s
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
input <- T.lines <$> readFile' "day01.in"
|
||||
putStr "Q1: "
|
||||
print . sum . map first $ input
|
||||
putStr "Q2: "
|
||||
print . sum . map second $ input
|
43
flake.lock
generated
Normal file
43
flake.lock
generated
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1701445246,
|
||||
"narHash": "sha256-SNnOV9h/rSZFuF/PZDbHRjgtOzPiP8jSKzN3oWT8Clg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9415b539cd02e4eb3446fd0ccaa405d110eff173",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "release-23.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"locked": {
|
||||
"lastModified": 1667395993,
|
||||
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
31
flake.nix
Normal file
31
flake.nix
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
description = "AoC 2023 in Haskell";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = github:nixos/nixpkgs/release-23.11;
|
||||
utils.url = github:numtide/flake-utils;
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, utils }:
|
||||
utils.lib.eachDefaultSystem
|
||||
(system:
|
||||
let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
};
|
||||
src = ./.;
|
||||
in
|
||||
with pkgs; {
|
||||
devShells.default = mkShell {
|
||||
buildInputs = [
|
||||
ghc
|
||||
haskell-language-server
|
||||
];
|
||||
};
|
||||
apps.default = {
|
||||
type = "app";
|
||||
program = "${ghc}/bin/runhaskell";
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user