Done day 4
authorNeil Smith <neil.git@njae.me.uk>
Wed, 4 Dec 2019 08:01:27 +0000 (08:01 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Wed, 4 Dec 2019 08:01:58 +0000 (08:01 +0000)
advent04/package.yaml [new file with mode: 0644]
advent04/src/advent04.hs [new file with mode: 0644]
stack.yaml

diff --git a/advent04/package.yaml b/advent04/package.yaml
new file mode 100644 (file)
index 0000000..c8e4062
--- /dev/null
@@ -0,0 +1,57 @@
+# This YAML file describes your package. Stack will automatically generate a
+# Cabal file when you run `stack build`. See the hpack website for help with
+# this file: <https://github.com/sol/hpack>.
+
+name: advent04
+synopsis: Advent of Code
+version: '0.0.1'
+
+default-extensions:
+- AllowAmbiguousTypes
+- ApplicativeDo
+- BangPatterns
+- BlockArguments
+- DataKinds
+- DeriveFoldable
+- DeriveFunctor
+- DeriveGeneric
+- DeriveTraversable
+- EmptyCase
+- FlexibleContexts
+- FlexibleInstances
+- FunctionalDependencies
+- GADTs
+- GeneralizedNewtypeDeriving
+- ImplicitParams
+- KindSignatures
+- LambdaCase
+- MonadComprehensions
+- MonoLocalBinds
+- MultiParamTypeClasses
+- MultiWayIf
+- NegativeLiterals
+- NumDecimals
+- OverloadedLists
+- OverloadedStrings
+- PartialTypeSignatures
+- PatternGuards
+- PatternSynonyms
+- PolyKinds
+- RankNTypes
+- RecordWildCards
+- ScopedTypeVariables
+- TemplateHaskell
+- TransformListComp
+- TupleSections
+- TypeApplications
+- TypeInType
+- TypeOperators
+- ViewPatterns
+
+
+executables:
+  advent04:
+    main: advent04.hs
+    source-dirs: src
+    dependencies:
+    - base >= 2 && < 6
diff --git a/advent04/src/advent04.hs b/advent04/src/advent04.hs
new file mode 100644 (file)
index 0000000..9066cbb
--- /dev/null
@@ -0,0 +1,40 @@
+
+main :: IO ()
+main = do 
+        print part1
+        print part2 
+
+lowerLimit = 134792
+upperLimit = 675810
+
+
+part1 = length $ filter inRange $ filter adjacentSame candidates
+part2 = length $ filter isolatedAdjacentSame $ filter inRange $ filter adjacentSame candidates
+
+inRange digits = n >= lowerLimit && n <= upperLimit
+    where n = numify digits
+
+numify :: (Int, Int, Int, Int, Int, Int) -> Int
+numify (d1, d2, d3, d4, d5, d6) = 
+    d1 * 10^5 + d2 * 10^4 + d3 * 10^3 + d4 * 10^2 + d5 * 10 + d6
+
+adjacentSame (d1, d2, d3, d4, d5, d6) = 
+    d1 == d2 || d2 == d3 || d3 == d4 || d4 == d5 || d5 == d6
+
+isolatedAdjacentSame (d1, d2, d3, d4, d5, d6) = 
+                   (d1 == d2 && d2 /= d3)
+    || (d1 /= d2 && d2 == d3 && d3 /= d4)
+    || (d2 /= d3 && d3 == d4 && d4 /= d5)
+    || (d3 /= d4 && d4 == d5 && d5 /= d6)
+    || (d4 /= d5 && d5 == d6)
+
+
+candidates = [ (d1, d2, d3, d4, d5, d6)
+             | d1 <- [1..6]
+             , d2 <- [d1..9]
+             , d3 <- [d2..9]
+             , d4 <- [d3..9]
+             , d5 <- [d4..9]
+             , d6 <- [d5..9]
+             ]
+         
\ No newline at end of file
index 1b3c906ed51457f7240929fdd29119fc0a68ff49..e0c5714d61d8e030c406fdf565b765e91043edfa 100644 (file)
@@ -40,6 +40,7 @@ packages:
 - advent01
 - advent02
 - advent03
+- advent04
 
 
 # Dependency packages to be pulled from upstream that are not in the resolver.