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