Done day 25
authorNeil Smith <neil.git@njae.me.uk>
Mon, 7 Dec 2020 12:13:46 +0000 (12:13 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Mon, 7 Dec 2020 12:13:46 +0000 (12:13 +0000)
advent25/package.yaml [new file with mode: 0644]
advent25/src/advent25.hs [new file with mode: 0644]
data/advent25-instructions.txt [new file with mode: 0644]
data/advent25.txt [new file with mode: 0644]
problems/day25.html [new file with mode: 0644]
stack.yaml

diff --git a/advent25/package.yaml b/advent25/package.yaml
new file mode 100644 (file)
index 0000000..2df1822
--- /dev/null
@@ -0,0 +1,60 @@
+# 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: advent25
+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:
+  advent25:
+    main: advent25.hs
+    source-dirs: src
+    dependencies:
+    - base >= 2 && < 6
+    - text
+    - containers
+    - intcode
diff --git a/advent25/src/advent25.hs b/advent25/src/advent25.hs
new file mode 100644 (file)
index 0000000..c3c0c1f
--- /dev/null
@@ -0,0 +1,84 @@
+-- import Debug.Trace
+
+import Intcode
+
+import qualified Data.Text.IO as TIO
+import qualified Data.Text as T
+import Data.Char
+import Data.List
+
+main :: IO ()
+main = do 
+        text <- TIO.readFile "data/advent25.txt"
+        let mem = parseMachineMemory text
+        print $ length mem
+        (machine, instructions, items) <- runPreamble mem
+        -- runGameM machine instructions
+        putStrLn $ passSecurity machine instructions items
+
+runPreamble :: [Integer] -> IO (Machine, [String], [String])
+runPreamble mem =
+      do        
+        instr <- TIO.readFile "data/advent25-instructions.txt"
+        let instructions = lines $ T.unpack instr
+        -- runGame mem $ lines $ T.unpack instructions
+        let (machine, _output) = runCommand mem instructions
+        let (_s, _machine1, output1) = runMachine (encodeCommands (instructions ++ ["inv"])) machine
+        putStrLn $ decodeOutput output1
+        let items = extractItems $ decodeOutput output1
+        -- print items
+        return (machine, instructions, items)
+
+
+encodeCommands :: [String] -> [Integer]
+encodeCommands cmds = map (fromIntegral . ord) $ concat $ map (++ "\n") cmds
+
+decodeOutput :: [Integer] -> String
+decodeOutput = map (chr . fromIntegral)
+
+extractItems :: String -> [String]
+extractItems text = items
+    where candidates = lines text
+          items = map (drop 2) $ filter (isPrefixOf "- ") candidates
+
+
+powerList :: [a] -> [[a]]
+powerList [] = [[]]
+powerList (x:xs) = powerList xs ++ map (x:) (powerList xs) 
+
+
+passSecurity :: Machine -> [String] -> [String] -> String
+passSecurity machine instructions items = 
+    "You keep: " ++ (intercalate ", " keeps) ++ "\n\n" ++ (attemptSecurity machine instructions validDropset)
+    where
+        dropsets = powerList items
+        validDropset = head $ filter (passesSecurity machine instructions) dropsets
+        keeps = items \\ validDropset
+
+passesSecurity :: Machine -> [String] -> [String] -> Bool
+passesSecurity machine instructions drops = not ("Alert" `isInfixOf` output)
+    where output = attemptSecurity machine instructions drops
+
+attemptSecurity :: Machine -> [String] -> [String] -> String
+attemptSecurity machine instructions drops = decodeOutput output
+    where dropCommands = map ("drop " ++ ) drops
+          (_, _, output) = runMachine (encodeCommands (instructions ++ dropCommands ++ ["north"])) machine
+
+runCommand :: [Integer] -> [String] -> (Machine, String)
+runCommand mem inputs = ( machine, decodeOutput output )
+    where (_state,  machine, output) = runProgram inputCodes mem
+          inputCodes = encodeCommands inputs
+
+runGame :: [Integer] -> [String] -> IO ()
+runGame mem inputs = 
+    do let (_, outputs) = runCommand mem inputs
+       putStrLn outputs
+       nextIn <- getLine
+       runGame mem (inputs ++ [nextIn])
+
+runGameM :: Machine -> [String] -> IO ()
+runGameM machine inputs = 
+    do nextIn <- getLine
+       let (_s, machine1, output1) = runMachine (encodeCommands (inputs ++ [nextIn])) machine
+       putStrLn $ decodeOutput output1
+       runGameM machine1 (inputs ++ [nextIn])
diff --git a/data/advent25-instructions.txt b/data/advent25-instructions.txt
new file mode 100644 (file)
index 0000000..dcb2407
--- /dev/null
@@ -0,0 +1,32 @@
+south
+take boulder
+west
+take asterisk
+east
+east
+take food ration
+west
+north
+east
+take candy cane
+north
+north
+take mutex
+north
+take prime number
+south
+south
+east
+north
+take mug
+south
+west
+south
+east
+north
+take loom
+south
+east
+south
+east
+east
diff --git a/data/advent25.txt b/data/advent25.txt
new file mode 100644 (file)
index 0000000..1de6cdf
--- /dev/null
@@ -0,0 +1 @@
+109,4786,21102,1,3124,1,21101,0,13,0,1106,0,1424,21102,1,166,1,21101,24,0,0,1106,0,1234,21102,1,31,0,1106,0,1984,1106,0,13,6,4,3,2,52,51,21,4,28,56,55,3,19,-9,-10,47,89,88,90,90,6,77,73,85,71,1,76,68,63,65,22,-27,70,76,81,87,5,105,105,107,108,95,4,97,92,109,109,5,110,105,110,108,95,4,115,96,109,109,13,-3,59,101,85,92,97,13,84,80,92,78,34,-15,26,-16,46,88,72,79,84,0,72,76,-3,85,74,79,75,-8,64,68,75,57,65,70,64,66,72,8,-41,32,-22,56,77,82,-4,60,76,62,70,-2,74,-11,55,52,68,67,73,56,60,52,-20,44,56,66,-24,48,58,42,49,54,-16,-53,10,0,56,99,96,95,82,94,83,45,-9,23,-13,61,85,88,74,71,82,73,79,73,89,67,65,-4,62,73,70,69,56,68,57,2,-35,24,-14,64,85,90,4,70,67,79,7,83,-2,68,75,-5,78,65,57,75,-10,76,53,76,0,-37,31,-21,57,78,83,-3,64,74,72,0,76,-9,73,58,57,-13,70,57,49,67,-18,54,64,48,55,-23,48,44,56,42,-14,-51,14,-4,74,95,100,14,97,77,86,79,9,92,79,75,5,27,-17,61,82,87,1,68,78,76,4,80,-5,66,58,78,60,-10,73,60,52,70,-15,57,67,51,58,-6,-43,14,-4,74,95,100,14,81,94,90,90,9,92,79,75,5,60,-50,23,42,38,-32,38,39,30,42,47,-38,30,36,28,25,41,38,34,31,18,23,29,19,33,-52,20,29,-55,27,27,27,8,15,-61,22,16,-64,24,13,18,-54,-69,-70,-14,7,12,-74,-8,-11,1,-71,5,-80,-4,-3,3,-15,-84,-85,-109,29,-19,59,80,85,-1,82,62,71,64,-6,77,64,60,-10,62,66,57,59,63,57,67,51,-19,56,58,57,57,-10,-47,44,-34,39,58,54,-16,60,61,57,64,48,56,-23,52,40,60,38,-28,44,53,-31,55,32,55,-35,48,42,41,-39,32,38,42,-42,-44,12,33,38,-48,28,19,25,32,-52,-76,-77,59,-49,13,55,-30,42,51,-33,49,50,32,31,31,39,36,48,-42,24,35,32,34,29,21,35,19,25,37,-53,14,10,26,18,-57,-59,-3,18,23,-63,1,17,3,-67,1,-4,14,-2,6,-73,-8,14,-76,-12,-78,-40,2,4,-13,-82,-106,-107,35,-25,53,74,79,0,74,60,-10,65,53,72,64,52,56,52,50,-19,53,57,62,56,-24,58,54,38,39,40,-29,-31,2,56,35,-34,-58,-59,138,-128,-74,-108,-33,-31,-26,-44,-101,-114,-33,-37,-51,-39,-35,-47,-54,-122,-37,-45,-52,-59,-58,-128,-46,-65,-42,-49,-133,-132,-102,-60,-68,-56,-55,-139,-141,-106,-61,-65,-72,-78,-64,-148,-70,-72,-151,-68,-81,-81,-72,-156,-74,-86,-86,-80,-161,-97,-81,-95,-165,-94,-98,-103,-83,-97,-102,-90,-173,-90,-103,-111,-99,-178,-95,-108,-112,-182,-115,-115,-101,-117,-120,-104,-120,-122,-191,-106,-128,-118,-110,-127,-196,-196,-199,-135,-123,-134,-203,-115,-126,-121,-207,-143,-127,-141,-211,-143,-139,-145,-148,-132,-148,-150,-219,-154,-156,-155,-148,-224,-141,-147,-227,-144,-157,-161,-231,-165,-161,-165,-168,-161,-157,-159,-166,-162,-157,-228,-265,138,-128,-74,-108,-33,-31,-26,-44,-101,-114,-33,-37,-51,-39,-35,-47,-54,-122,-37,-45,-52,-59,-58,-128,-46,-65,-42,-49,-133,-132,-102,-60,-68,-56,-55,-139,-141,-106,-61,-65,-72,-78,-64,-148,-70,-72,-151,-68,-81,-81,-72,-156,-74,-86,-86,-80,-161,-97,-81,-95,-165,-90,-94,-97,-97,-86,-102,-90,-173,-90,-103,-111,-99,-178,-95,-108,-112,-182,-115,-115,-101,-117,-120,-104,-120,-122,-191,-106,-128,-118,-110,-127,-196,-196,-199,-135,-123,-134,-203,-115,-126,-121,-207,-143,-127,-141,-211,-143,-139,-145,-148,-132,-148,-150,-219,-154,-156,-155,-148,-224,-141,-147,-227,-144,-157,-161,-231,-165,-161,-165,-168,-161,-157,-159,-166,-162,-157,-228,-265,263,-253,-199,-233,-158,-156,-151,-169,-226,-239,-158,-162,-176,-164,-160,-172,-179,-247,-162,-170,-177,-184,-183,-253,-171,-190,-167,-174,-258,-257,-227,-183,-197,-187,-175,-182,-193,-184,-268,-202,-191,-194,-192,-197,-205,-191,-207,-276,-278,-222,-201,-196,-282,-206,-219,-196,-286,-207,-206,-210,-223,-222,-223,-225,-280,-293,-296,-232,-220,-231,-300,-212,-223,-218,-304,-236,-228,-223,-239,-227,-310,-227,-240,-244,-314,-248,-237,-250,-243,-239,-247,-237,-308,-345,-273,-260,-248,-243,-263,-329,-252,-252,-248,-260,-267,-266,-253,-337,-249,-260,-255,-259,-342,-260,-267,-280,-270,-271,-348,-281,-268,-272,-279,-285,-342,-355,-280,-278,-279,-284,-277,-361,-282,-278,-274,-275,-290,-298,-300,-369,-300,-292,-290,-373,-309,-375,-299,-298,-301,-310,-302,-297,-370,-383,-302,-316,-321,-311,-315,-299,-321,-308,-392,-306,-322,-330,-312,-397,-326,-334,-317,-401,-330,-338,-324,-325,-337,-329,-339,-341,-398,-411,-347,-335,-346,-415,-334,-352,-350,-346,-341,-338,-422,-334,-345,-340,-344,-427,-345,-357,-357,-351,-432,-365,-361,-353,-367,-370,-354,-363,-351,-427,-464,-441,-397,-373,-434,-447,-376,-380,-374,-375,-373,-452,-454,-398,-377,-372,-458,-376,-388,-382,-377,-387,-396,-465,-400,-398,-468,-404,-404,-395,-403,-473,-390,-396,-476,-406,-409,-395,-480,-408,-404,-483,-418,-396,-486,-403,-399,-409,-417,-413,-421,-493,37,-5,73,71,-8,75,62,58,-12,62,55,74,64,48,50,-19,45,63,-22,61,48,44,-26,50,37,44,48,-31,33,40,48,41,43,30,37,-25,-38,-63,0,0,109,7,21102,0,1,-2,22208,-2,-5,-1,1205,-1,1169,22202,-2,-4,1,22201,1,-6,1,21201,-2,0,2,21102,1162,1,0,2105,1,-3,21201,-2,1,-2,1106,0,1136,109,-7,2105,1,0,109,6,1202,-5,1,1182,20102,1,0,-2,21102,0,1,-3,21201,-5,1,-5,22208,-3,-2,-1,1205,-1,1229,2201,-5,-3,1205,20102,1,0,1,21201,-3,0,2,21202,-2,1,3,21102,1222,1,0,2105,1,-4,21201,-3,1,-3,1106,0,1192,109,-6,2106,0,0,109,2,22102,1,-1,1,21102,1256,1,2,21101,1251,0,0,1105,1,1174,109,-2,2106,0,0,109,5,22201,-4,-3,-1,22201,-2,-1,-1,204,-1,109,-5,2105,1,0,109,3,2102,1,-2,1280,1006,0,1303,104,45,104,32,1201,-1,66,1292,20102,1,0,1,21102,1301,1,0,1106,0,1234,104,10,109,-3,2105,1,0,0,0,109,2,1202,-1,1,1309,1101,0,0,1308,21102,4601,1,1,21102,1,13,2,21101,4,0,3,21101,0,1353,4,21101,0,1343,0,1105,1,1130,20102,1,1308,-1,109,-2,2105,1,0,60,109,3,2101,0,-2,1360,20008,0,1309,-1,1206,-1,1419,1005,1308,1398,1101,1,0,1308,21008,1309,-1,-1,1206,-1,1387,21101,0,106,1,1105,1,1391,21102,1,92,1,21102,1,1398,0,1106,0,1234,104,45,104,32,1201,-2,1,1407,21001,0,0,1,21101,0,1417,0,1106,0,1234,104,10,109,-3,2106,0,0,109,3,2102,1,-2,1128,21102,1,34,1,21102,1,1441,0,1106,0,1234,1001,1128,0,1447,20101,0,0,1,21102,1456,1,0,1105,1,1234,21102,1,41,1,21102,1467,1,0,1106,0,1234,1001,1128,1,1473,20102,1,0,1,21101,1482,0,0,1105,1,1234,21102,1,46,1,21102,1,1493,0,1106,0,1234,21001,1128,3,1,21102,4,1,2,21102,1,1,3,21102,1273,1,4,21102,1516,1,0,1106,0,1130,20102,1,1128,1,21101,0,1527,0,1106,0,1310,1001,1128,2,1533,20102,1,0,-1,1206,-1,1545,21102,1545,1,0,2105,1,-1,109,-3,2106,0,0,109,0,99,109,2,1101,0,0,1550,21101,4601,0,1,21101,13,0,2,21101,0,4,3,21101,0,1664,4,21102,1582,1,0,1106,0,1130,2,2486,1352,1551,1102,1,0,1552,20101,0,1550,1,21102,33,1,2,21102,1,1702,3,21101,1609,0,0,1105,1,2722,21007,1552,0,-1,1205,-1,1630,20107,0,1552,-1,1205,-1,1637,21102,1630,1,0,1106,0,1752,21101,0,548,1,1106,0,1641,21102,687,1,1,21101,1648,0,0,1106,0,1234,21102,4457,1,1,21102,1,1659,0,1105,1,1424,109,-2,2105,1,0,109,4,21202,-2,-1,-2,1202,-3,1,1675,21008,0,-1,-1,1206,-1,1697,1201,-3,2,1687,20101,-27,0,-3,22201,-3,-2,-3,2001,1550,-3,1550,109,-4,2106,0,0,109,5,21008,1552,0,-1,1206,-1,1747,1201,-3,1901,1716,21002,0,1,-2,1205,-4,1736,20207,-2,1551,-1,1205,-1,1747,1102,-1,1,1552,1106,0,1747,22007,1551,-2,-1,1205,-1,1747,1101,1,0,1552,109,-5,2106,0,0,109,1,21101,826,0,1,21101,1765,0,0,1105,1,1234,21001,1550,0,1,21102,1,1776,0,1106,0,2863,21102,1090,1,1,21102,1787,1,0,1105,1,1234,99,1106,0,1787,109,-1,2106,0,0,109,1,21101,512,0,1,21101,1809,0,0,1106,0,1234,99,1106,0,1809,109,-1,2105,1,0,109,1,1101,0,1,1129,109,-1,2105,1,0,109,1,21102,377,1,1,21101,1842,0,0,1106,0,1234,1106,0,1831,109,-1,2106,0,0,109,1,21102,1,407,1,21101,0,1863,0,1106,0,1234,99,1105,1,1863,109,-1,2105,1,0,109,1,21101,452,0,1,21102,1885,1,0,1106,0,1234,99,1106,0,1885,109,-1,2105,1,0,1941,1947,1953,1958,1965,1972,1978,4644,4853,4973,4783,5358,4913,5097,5094,4978,4807,4898,5299,5404,4910,5242,4681,5153,5343,4709,4668,5405,4869,5198,5101,5201,4896,5220,5237,5268,5175,5235,4668,5257,2281,2468,2418,2450,2487,2125,2505,5,95,108,104,104,23,5,96,91,108,108,1,4,101,105,112,3,6,104,104,106,107,94,-1,6,109,104,109,107,94,-1,5,111,91,100,93,23,5,114,95,108,108,1,109,3,21101,1993,0,0,1105,1,2634,1006,1129,2010,21102,316,1,1,21102,2007,1,0,1105,1,1234,1105,1,2076,21101,0,0,-1,1201,-1,1894,2019,21002,0,1,1,21101,0,0,2,21102,0,1,3,21102,2037,1,0,1106,0,2525,1206,1,2054,1201,-1,1934,2050,21101,2051,0,0,105,1,0,1106,0,2076,21201,-1,1,-1,21207,-1,7,-2,1205,-2,2014,21101,0,177,1,21102,1,2076,0,1105,1,1234,109,-3,2105,1,0,109,3,2001,1128,-2,2089,20102,1,0,-1,1205,-1,2108,21101,201,0,1,21101,0,2105,0,1105,1,1234,1105,1,2119,22102,1,-1,1,21101,2119,0,0,1106,0,1424,109,-3,2105,1,0,0,109,1,1102,1,0,2124,21101,0,4601,1,21102,1,13,2,21101,0,4,3,21101,2173,0,4,21101,0,2154,0,1105,1,1130,1005,2124,2168,21102,1,226,1,21102,1,2168,0,1105,1,1234,109,-1,2106,0,0,109,3,1005,2124,2275,1201,-2,0,2183,20008,0,1128,-1,1206,-1,2275,1201,-2,1,2194,21001,0,0,-1,21202,-1,1,1,21101,5,0,2,21102,1,1,3,21102,1,2216,0,1106,0,2525,1206,1,2275,21101,0,258,1,21102,1,2230,0,1105,1,1234,21201,-1,0,1,21101,0,2241,0,1106,0,1234,104,46,104,10,1102,1,1,2124,1201,-2,0,2256,1101,0,-1,0,1201,-2,3,2263,20102,1,0,-1,1206,-1,2275,21101,0,2275,0,2105,1,-1,109,-3,2105,1,0,0,109,1,1102,1,0,2280,21102,1,4601,1,21101,13,0,2,21101,0,4,3,21102,2329,1,4,21101,2310,0,0,1106,0,1130,1005,2280,2324,21101,273,0,1,21102,1,2324,0,1106,0,1234,109,-1,2105,1,0,109,3,1005,2280,2413,1201,-2,0,2339,21008,0,-1,-1,1206,-1,2413,1201,-2,1,2351,20102,1,0,-1,22101,0,-1,1,21101,5,0,2,21101,1,0,3,21101,0,2372,0,1105,1,2525,1206,1,2413,21102,1,301,1,21102,1,2386,0,1105,1,1234,22102,1,-1,1,21102,2397,1,0,1105,1,1234,104,46,104,10,1102,1,1,2280,1201,-2,0,2412,1001,1128,0,0,109,-3,2105,1,0,109,1,21101,0,-1,1,21102,1,2431,0,1106,0,1310,1205,1,2445,21101,0,133,1,21102,2445,1,0,1105,1,1234,109,-1,2105,1,0,109,1,21101,3,0,1,21102,2463,1,0,1106,0,2081,109,-1,2105,1,0,109,1,21101,4,0,1,21102,1,2481,0,1106,0,2081,109,-1,2106,0,0,89,109,1,21101,0,5,1,21101,0,2500,0,1106,0,2081,109,-1,2105,1,0,109,1,21102,6,1,1,21101,2518,0,0,1106,0,2081,109,-1,2106,0,0,0,0,109,5,1201,-3,0,2523,1101,1,0,2524,21201,-4,0,1,21101,0,2585,2,21102,2550,1,0,1106,0,1174,1206,-2,2576,2102,1,-4,2558,2001,0,-3,2566,101,3094,2566,2566,21008,0,-1,-1,1205,-1,2576,1102,0,1,2524,20102,1,2524,-4,109,-5,2106,0,0,109,5,22201,-4,-3,-4,22201,-4,-2,-4,21208,-4,10,-1,1206,-1,2606,21102,-1,1,-4,201,-3,2523,2616,1001,2616,3094,2616,20101,0,0,-1,22208,-4,-1,-1,1205,-1,2629,1101,0,0,2524,109,-5,2106,0,0,109,4,21102,1,3094,1,21101,0,30,2,21102,1,1,3,21101,2706,0,4,21102,1,2659,0,1105,1,1130,21101,0,0,-3,203,-2,21208,-2,10,-1,1205,-1,2701,21207,-2,0,-1,1205,-1,2663,21207,-3,29,-1,1206,-1,2663,2101,3094,-3,2693,2102,1,-2,0,21201,-3,1,-3,1106,0,2663,109,-4,2105,1,0,109,2,1202,-1,1,2715,1101,0,-1,0,109,-2,2106,0,0,0,109,5,1201,-2,0,2721,21207,-4,0,-1,1206,-1,2739,21101,0,0,-4,21202,-4,1,1,22102,1,-3,2,21101,1,0,3,21102,1,2758,0,1105,1,2763,109,-5,2105,1,0,109,6,21207,-4,1,-1,1206,-1,2786,22207,-5,-3,-1,1206,-1,2786,22102,1,-5,-5,1105,1,2858,21201,-5,0,1,21201,-4,-1,2,21202,-3,2,3,21101,2805,0,0,1106,0,2763,22101,0,1,-5,21102,1,1,-2,22207,-5,-3,-1,1206,-1,2824,21102,1,0,-2,22202,-3,-2,-3,22107,0,-4,-1,1206,-1,2850,21201,-2,0,1,21201,-4,-1,2,21101,2850,0,0,106,0,2721,21202,-3,-1,-3,22201,-5,-3,-5,109,-6,2105,1,0,109,3,21208,-2,0,-1,1205,-1,2902,21207,-2,0,-1,1205,-1,2882,1105,1,2888,104,45,21202,-2,-1,-2,21201,-2,0,1,21101,0,2899,0,1105,1,2909,1105,1,2904,104,48,109,-3,2106,0,0,109,4,21202,-3,1,1,21101,0,10,2,21102,2926,1,0,1106,0,3010,22102,1,1,-2,21202,2,1,-1,1206,-2,2948,21202,-2,1,1,21102,1,2948,0,1105,1,2909,22101,48,-1,-1,204,-1,109,-4,2105,1,0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,109,8,21102,0,1,-4,21101,0,0,-3,21101,0,51,-2,21201,-2,-1,-2,1201,-2,2959,3034,20101,0,0,-1,21202,-3,2,-3,22207,-7,-1,-5,1205,-5,3059,21201,-3,1,-3,22102,-1,-1,-5,22201,-7,-5,-7,22207,-3,-6,-5,1205,-5,3078,22102,-1,-6,-5,22201,-3,-5,-3,22201,-1,-4,-4,1205,-2,3024,21201,-4,0,-7,22101,0,-3,-6,109,-8,2106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3131,3143,0,0,3252,3401,0,11,61,105,95,94,17,50,97,83,78,79,83,108,-19,2,7,-79,-9,-2,2,-83,-11,-7,-86,-3,-16,-7,-11,-6,-21,-21,-94,-30,-96,-25,-19,-23,-31,-101,-29,-25,-104,-21,-34,-38,-108,-39,-34,-32,-33,-31,-114,-43,-47,-35,-49,-105,-120,-69,-43,-123,-49,-56,-57,-47,-128,-40,-51,-46,-50,-133,-51,-63,-63,-57,-138,-69,-58,-62,-65,-143,-79,-69,-63,-68,-148,-79,-68,-82,-83,-63,-81,-77,-85,-145,-158,-75,-88,-92,-162,-91,-85,-89,-97,-167,-96,-104,-87,-171,-106,-104,-105,-97,-176,-94,-109,-114,-104,-112,-114,-169,3259,3273,0,3351,3309,0,3124,13,54,100,86,103,15,63,98,77,93,94,78,90,90,35,49,68,64,-6,59,61,59,73,-11,53,69,55,-15,49,59,58,-19,64,58,57,-23,59,52,39,49,48,-29,40,48,50,-33,55,44,49,-23,3316,3324,0,4208,3641,0,3252,7,68,97,107,89,93,89,97,26,43,91,73,85,91,85,72,72,76,68,3,78,-6,63,74,60,59,79,57,0,54,67,57,52,50,-5,3358,3366,0,3474,3778,3252,0,7,76,108,88,88,97,89,102,34,48,66,69,73,62,62,61,73,3,72,61,77,55,53,-2,-17,34,53,49,68,-15,59,45,-25,39,49,48,-29,39,46,48,51,55,-21,3408,3417,0,3124,3566,0,3849,8,64,102,98,100,88,88,85,92,56,27,54,51,42,51,49,39,-31,51,36,35,42,47,-37,46,40,-40,31,23,43,25,-45,30,22,22,35,-50,22,32,-53,25,23,-56,27,14,10,-60,-22,11,2,14,19,-66,-28,14,4,-2,-71,11,-4,10,9,-3,1,-7,-65,3481,3489,0,4025,0,3351,4084,7,65,89,99,98,108,85,108,76,8,27,27,36,-48,16,32,18,13,-53,18,10,27,-57,8,10,9,17,-62,16,16,19,7,10,5,21,-1,-3,-72,-3,5,7,-76,6,1,-2,-11,3,-10,-10,-6,-14,-59,-87,1,-10,-5,-84,-10,-24,-94,-21,-11,-14,-14,-99,-22,-22,-18,-103,-23,-20,-33,-23,-39,-109,-27,-26,-30,-44,-114,-28,-44,-52,-34,-105,3573,3585,0,0,0,0,3401,11,72,87,92,87,95,83,84,14,57,77,77,55,34,55,60,-26,56,41,40,-30,38,54,40,34,34,42,30,31,-39,32,28,40,26,-44,34,24,-47,32,33,29,33,27,31,35,25,13,-57,22,20,16,28,15,6,18,-65,2,2,15,4,1,7,-72,14,5,7,-1,-63,3648,3671,0,0,0,3706,3309,22,65,74,90,87,6,41,86,76,88,70,0,44,63,70,74,79,63,71,57,69,57,58,34,39,81,-4,60,74,73,61,56,72,72,-12,71,65,-15,50,52,-18,68,59,61,53,50,54,46,-26,51,51,53,47,34,44,43,55,-21,3713,3722,0,3641,4368,0,4139,8,72,88,105,104,85,90,87,100,55,29,48,44,63,-20,54,40,-30,34,-32,43,39,49,48,39,31,-39,44,46,31,40,40,44,-46,18,30,19,-50,32,32,12,28,29,17,21,13,-59,24,18,-62,13,15,14,9,-67,-3,7,6,-71,-7,3,-1,0,-7,-63,3785,3797,0,3929,0,0,3351,11,58,98,90,91,95,85,84,96,86,90,82,51,38,59,64,-22,60,45,44,-26,38,-28,58,42,42,52,36,32,44,29,45,30,-39,47,32,42,29,-44,35,30,18,30,34,-50,19,27,29,-54,-4,24,25,15,19,11,7,20,16,9,3,-66,19,-50,-55,3856,3868,0,0,3401,0,0,11,68,86,102,87,99,102,80,98,92,94,100,60,24,43,39,51,37,-33,31,47,33,-37,27,-39,30,28,45,-43,40,24,30,22,35,18,29,29,17,30,-27,-55,28,15,11,30,-53,21,7,-63,1,11,10,-67,-2,10,6,13,-3,-5,-74,-7,3,10,0,-67,-80,3,-10,-4,1,-14,-14,-73,3936,3947,0,0,0,3778,0,10,68,86,106,92,89,82,100,88,93,91,77,6,38,18,36,36,33,-25,-52,-2,30,27,9,21,10,10,8,-47,-62,-15,12,4,-1,16,1,-69,13,14,8,7,2,14,-76,0,-9,-14,3,4,0,-14,-7,-16,-8,-3,-5,-89,-20,-9,-13,-16,-94,-25,-23,-27,-14,-10,-100,-18,-18,-38,-22,-22,-106,-23,-29,-109,-28,-42,-45,-48,-38,-42,-50,-35,-53,-35,-51,-107,4032,4055,0,0,4272,3474,0,22,50,88,92,7,41,77,83,70,81,77,65,83,67,-3,34,74,79,71,76,56,63,67,28,55,82,79,70,72,78,85,9,-4,68,78,0,75,-9,73,73,61,63,62,-15,71,62,64,56,53,57,49,-9,4091,4098,0,0,3474,0,0,6,59,107,91,88,90,90,40,38,70,68,58,-12,66,56,-15,68,55,51,-19,47,44,44,50,54,44,58,56,-28,54,39,38,45,-33,50,44,-36,35,27,47,29,-41,38,36,43,24,36,-33,4146,4167,0,0,3706,0,0,20,51,84,80,93,8,62,88,70,84,83,75,79,71,-1,33,66,74,79,63,75,40,32,70,77,-11,57,63,69,54,-16,51,61,-19,69,58,63,-23,63,57,39,53,-28,51,52,38,51,36,44,49,47,-37,41,39,-40,43,30,26,-44,26,33,-16,4215,4223,0,0,0,3309,0,7,76,108,102,104,86,91,88,48,36,55,51,-19,46,58,66,46,59,-25,48,58,55,55,-30,36,47,45,50,30,37,41,-38,38,39,41,27,-43,22,34,42,22,35,-35,-50,-51,-2,16,13,30,26,26,15,27,9,15,27,-49,4279,4288,0,0,0,0,4025,8,59,102,104,103,93,87,97,99,79,5,24,20,-50,26,17,31,11,21,-56,30,7,17,16,22,-62,2,14,3,-66,17,4,0,-70,6,-3,11,-9,1,-76,-7,-2,0,-1,1,-82,-18,-2,-16,-86,-4,-12,-16,-19,-19,-8,-17,-5,-95,-28,-24,-28,-29,-31,-19,-33,-25,-20,-105,-39,-28,-32,-30,-28,-28,-98,-113,-67,-33,-116,-52,-36,-50,-120,-37,-50,-54,-35,-94,4375,4384,0,0,4457,0,3706,8,75,96,89,96,20,53,83,106,72,11,44,38,37,35,37,38,36,-48,17,29,33,20,-53,-4,14,12,-44,-12,20,23,8,6,-63,-14,4,7,11,0,0,-1,11,-72,4,-5,-7,-3,-10,-5,-1,-11,-81,-17,-5,-16,-85,-4,-18,-17,-4,-14,-26,-10,-93,-12,-26,-23,-19,-30,-30,-31,-19,-102,-26,-35,-37,-33,-40,-35,-31,-41,-97,4464,4484,0,4556,0,0,4368,19,64,81,78,95,91,81,91,95,5,39,75,71,68,75,79,77,70,74,79,71,2,38,-41,42,29,25,-45,32,22,40,35,-50,31,27,26,23,-43,-56,8,-58,21,22,8,21,20,21,17,3,-54,15,0,8,12,1,11,-1,11,-7,-77,-8,-3,-1,-2,0,-83,3,-12,-10,-11,-88,-3,-21,-9,-19,-23,-5,-95,-7,-18,-13,-17,-100,-28,-34,-34,-26,-21,-33,-23,-19,-95,4563,4588,1553,0,0,4457,0,24,56,89,75,88,87,88,84,70,13,50,67,75,79,68,78,66,78,60,-10,27,64,66,65,67,12,53,97,83,93,105,105,87,91,83,25,24,23,4139,4653,27,1850,4025,4665,4124,0,3252,4678,16777245,0,4208,4689,33554462,0,3351,4694,31,1829,3849,4708,1048608,0,3566,4717,97,0,3401,4729,36,0,4084,4737,35,1818,3474,4757,268435492,0,3929,4763,32805,0,4368,4767,38,1872,4272,4775,39,1796,11,98,99,95,102,86,94,15,90,78,98,76,12,100,101,91,94,85,15,92,98,89,77,79,91,10,89,86,98,87,107,17,83,80,92,82,4,104,106,105,102,13,92,96,87,89,93,87,97,81,11,86,88,87,87,8,89,106,106,90,102,92,101,92,11,91,99,98,86,17,98,80,98,86,91,89,7,91,103,108,98,89,89,101,19,84,85,76,88,93,8,76,82,74,71,87,84,80,77,64,69,75,65,79,5,104,111,109,93,111,3,106,113,98,7,105,96,102,106,100,98,102,10,91,104,87,84,98,86,16,95,93,81
diff --git a/problems/day25.html b/problems/day25.html
new file mode 100644 (file)
index 0000000..307a686
--- /dev/null
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+<meta charset="utf-8"/>
+<title>Day 25 - Advent of Code 2019</title>
+<!--[if lt IE 9]><script src="/static/html5.js"></script><![endif]-->
+<link href='//fonts.googleapis.com/css?family=Source+Code+Pro:300&subset=latin,latin-ext' rel='stylesheet' type='text/css'/>
+<link rel="stylesheet" type="text/css" href="/static/style.css?25"/>
+<link rel="stylesheet alternate" type="text/css" href="/static/highcontrast.css?0" title="High Contrast"/>
+<link rel="shortcut icon" href="/favicon.png"/>
+</head><!--
+
+
+
+
+Oh, hello!  Funny seeing you here.
+
+I appreciate your enthusiasm, but you aren't going to find much down here.
+There certainly aren't clues to any of the puzzles.  The best surprises don't
+even appear in the source until you unlock them for real.
+
+Please be careful with automated requests; I'm not a massive company, and I can
+only take so much traffic.  Please be considerate so that everyone gets to play.
+
+If you're curious about how Advent of Code works, it's running on some custom
+Perl code. Other than a few integrations (auth, analytics, social media), I
+built the whole thing myself, including the design, animations, prose, and all
+of the puzzles.
+
+The puzzles are most of the work; preparing a new calendar and a new set of
+puzzles each year takes all of my free time for 4-5 months. A lot of effort
+went into building this thing - I hope you're enjoying playing it as much as I
+enjoyed making it for you!
+
+If you'd like to hang out, I'm @ericwastl on Twitter.
+
+- Eric Wastl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-->
+<body>
+<header><div><h1 class="title-global"><a href="/">Advent of Code</a></h1><nav><ul><li><a href="/2019/about">[About]</a></li><li><a href="/2019/events">[Events]</a></li><li><a href="https://teespring.com/stores/advent-of-code" target="_blank">[Shop]</a></li><li><a href="/2019/settings">[Settings]</a></li><li><a href="/2019/auth/logout">[Log Out]</a></li></ul></nav><div class="user">Neil Smith <a href="/2019/support" class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <span class="star-count">50*</span></div></div><div><h1 class="title-event">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">//</span><a href="/2019">2019</a><span class="title-event-wrap"></span></h1><nav><ul><li><a href="/2019">[Calendar]</a></li><li><a href="/2019/support">[AoC++]</a></li><li><a href="/2019/sponsors">[Sponsors]</a></li><li><a href="/2019/leaderboard">[Leaderboard]</a></li><li><a href="/2019/stats">[Stats]</a></li></ul></nav></div></header>
+
+<div id="sidebar">
+<div id="sponsor"><div class="quiet">Our <a href="/2019/sponsors">sponsors</a> help make Advent of Code possible:</div><div class="sponsor"><a href="https://www.twilio.com/quest" target="_blank" onclick="if(ga)ga('send','event','sponsor','sidebar',this.href);" rel="noopener">TwilioQuest</a> - Play Advent of Code and earn rad loot in TwilioQuest, a developer RPG for Mac, Windows, and Linux. Learn JavaScript, Python, git, APIs for SMS, VoIP, or WhatsApp, and much more.</div></div>
+</div><!--/sidebar-->
+
+<main>
+<style>article *[title]{border-bottom:1px dotted #ffff66;}</style><script>window.addEventListener('click', function(e,s,r){if(e.target.nodeName==='CODE'&&e.detail===3){s=window.getSelection();s.removeAllRanges();r=document.createRange();r.selectNodeContents(e.target);s.addRange(r);}});</script>
+<article class="day-desc"><h2>--- Day 25: Cryostasis ---</h2><p>As you approach Santa's ship, your sensors report two important details:</p>
+<p>First, that you might be too late: the internal temperature is <span title="This is the same in Fahrenheit and Celsius."><code>-40</code> degrees</span>.</p>
+<p>Second, that one faint life signature is somewhere on the ship.</p>
+<p>The airlock door is locked with a code; your best option is to send in a small droid to investigate the situation.  You attach your ship to Santa's, break a small hole in the hull, and let the droid run in before you seal it up again. Before your ship starts freezing, you detach your ship and set it to automatically stay within range of Santa's ship.</p>
+<p>This droid can follow basic instructions and report on its surroundings; you can communicate with it through an <a href="9">Intcode</a> program (your puzzle input) running on an <a href="17">ASCII-capable</a> computer.</p>
+<p>As the droid moves through its environment, it will describe what it encounters.  When it says <code>Command?</code>, you can give it a single instruction terminated with a newline (ASCII code <code>10</code>). Possible instructions are:</p>
+<ul>
+<li><em>Movement</em> via <code>north</code>, <code>south</code>, <code>east</code>, or <code>west</code>.</li>
+<li>To <em>take</em> an item the droid sees in the environment, use the command <code>take &lt;name of item&gt;</code>. For example, if the droid reports seeing a <code>red ball</code>, you can pick it up with <code>take red ball</code>.</li>
+<li>To <em>drop</em> an item the droid is carrying, use the command <code>drop &lt;name of item&gt;</code>. For example, if the droid is carrying a <code>green ball</code>, you can drop it with <code>drop green ball</code>.</li>
+<li>To get a <em>list of all of the items</em> the droid is currently carrying, use the command <code>inv</code> (for "inventory").</li>
+</ul>
+<p>Extra spaces or other characters aren't allowed - instructions must be provided precisely.</p>
+<p>Santa's ship is a <em>Reindeer-class starship</em>; these ships use pressure-sensitive floors to determine the identity of droids and crew members.  The standard configuration for these starships is for all droids to weigh exactly the same amount to make them easier to detect.  If you need to get past such a sensor, you might be able to reach the correct weight by carrying items from the environment.</p>
+<p>Look around the ship and see if you can find the <em>password for the main airlock</em>.</p>
+</article>
+<p>Your puzzle answer was <code>269520896</code>.</p><article class="day-desc"><h2 id="part2">--- Part Two ---</h2><p>As you move through the main airlock, the air inside the ship is already heating up to reasonable levels.  Santa explains that he didn't notice you coming because he was just taking a quick nap.  The ship wasn't frozen; he just had the thermostat set to "North Pole".</p>
+<p>You make your way over to the navigation console. It beeps. "Status: Stranded. Please supply measurements from <em class="star">49 stars</em> to recalibrate."</p>
+<p>"49 stars? But the Elves told me you needed fifty--"</p>
+<p>Santa just smiles and nods his head toward the window.  There, in the distance, you can see the center of the Solar System: the Sun!</p>
+<p>The navigation console beeps again.</p>
+</article>
+<form method="post" action="25/answer"><input type="hidden" name="level" value="2"/><input type="hidden" name="answer" value="0"/><p>If you like, you can <input type="submit" value="[Align the Warp Drive again]"/>.</p></form>
+<p class="day-success">Both parts of this puzzle are complete! They provide two gold stars: **</p>
+<p>At this point, all that is left is for you to <a href="/2019">admire your Advent calendar</a>.</p>
+<p>If you still want to see it, you can <a href="25/input" target="_blank">get your puzzle input</a>.</p>
+<p>You can also <span class="share">[Share<span class="share-content">on
+  <a href="https://twitter.com/intent/tweet?text=I%27ve+completed+%22Cryostasis%22+%2D+Day+25+%2D+Advent+of+Code+2019&amp;url=https%3A%2F%2Fadventofcode%2Ecom%2F2019%2Fday%2F25&amp;related=ericwastl&amp;hashtags=AdventOfCode" target="_blank">Twitter</a>
+  <a href="javascript:void(0);" onclick="var mastodon_instance=prompt('Mastodon Instance / Server Name?'); if(typeof mastodon_instance==='string' && mastodon_instance.length){this.href='https://'+mastodon_instance+'/share?text=I%27ve+completed+%22Cryostasis%22+%2D+Day+25+%2D+Advent+of+Code+2019+%23AdventOfCode+https%3A%2F%2Fadventofcode%2Ecom%2F2019%2Fday%2F25'}else{return false;}" target="_blank">Mastodon</a
+></span>]</span> this puzzle.</p>
+</main>
+
+<!-- ga -->
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-69522494-1', 'auto');
+ga('set', 'anonymizeIp', true);
+ga('send', 'pageview');
+</script>
+<!-- /ga -->
+</body>
+</html>
\ No newline at end of file
index 50f56d8da9d36c4f6451eaf7f1ee68cc1691c911..2a50d8c6b584b51177036f00e088aa2492c62a7a 100644 (file)
@@ -62,6 +62,7 @@ packages:
 - advent22
 - advent23
 - advent24
+- advent25
 
 
 # Dependency packages to be pulled from upstream that are not in the resolver.