{
"cells": [
{
"cell_type": "code",
"execution_count": 201,
"metadata": {
"Collapsed": "false"
},
"outputs": [],
"source": [
"import glob\n",
"import json\n",
"import pandas as pd\n",
"import numpy as np\n",
"import datetime\n",
"import re\n",
"\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"! cd .. && cabal install"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"Collapsed": "false",
"scrolled": true,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - split-0.2.3.5 (lib) (requires build)\n",
" - advent-of-code22-0.1.0.0 (exe:advent01) --enable-profiling (configuration changed)\n",
"Starting split-0.2.3.5 (lib)\n",
"Building split-0.2.3.5 (lib)\n",
"Installing split-0.2.3.5 (lib)\n",
"Completed split-0.2.3.5 (lib)\n",
"Configuring executable 'advent01' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent01' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent01' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent01/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01-tmp/Main.dyn_o ) [Data.List.Split changed]\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent01/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01 ...\n",
"66719\n",
"198551\n",
" 19,449,616 bytes allocated in the heap\n",
" 1,325,784 bytes copied during GC\n",
" 408,784 bytes maximum residency (2 sample(s))\n",
" 144,176 bytes maximum slop\n",
" 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 3 colls, 3 par 0.002s 0.001s 0.0003s 0.0003s\n",
" Gen 1 2 colls, 1 par 0.002s 0.001s 0.0004s 0.0005s\n",
"\n",
" Parallel GC work balance: 29.84% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.013s ( 0.012s elapsed)\n",
" GC time 0.004s ( 0.002s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.023s ( 0.017s elapsed)\n",
"\n",
" Alloc rate 1,512,211,092 bytes per MUT second\n",
"\n",
" Productivity 56.0% of total user, 69.2% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - attoparsec-0.14.4 (lib:attoparsec-internal) (requires build)\n",
" - attoparsec-0.14.4 (lib) (requires build)\n",
" - advent-of-code22-0.1.0.0 (exe:advent02) --enable-profiling (configuration changed)\n",
"Starting attoparsec-0.14.4 (lib:attoparsec-internal)\n",
"Building attoparsec-0.14.4 (lib:attoparsec-internal)\n",
"Installing attoparsec-0.14.4 (lib:attoparsec-internal)\n",
"Completed attoparsec-0.14.4 (lib:attoparsec-internal)\n",
"Starting attoparsec-0.14.4 (lib)\n",
"Building attoparsec-0.14.4 (lib)\n",
"Installing attoparsec-0.14.4 (lib)\n",
"Completed attoparsec-0.14.4 (lib)\n",
"Configuring executable 'advent02' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent02' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent02' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent02/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02-tmp/Main.dyn_o ) [Data.Attoparsec.Text changed]\n",
"\n",
"\u001b[;1madvent02/Main.hs:55:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" match1P :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text [Round]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m55 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch1P\u001b[0m\u001b[0m = roundP `sepBy` endOfLine\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" roundP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Round\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mroundP\u001b[0m\u001b[0m = Round <$> p1ShapeP <*> (\" \" *> p2ShapeP)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" match2P :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text [ShapeResult]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch2P\u001b[0m\u001b[0m = shapeResultP `sepBy` endOfLine\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:59:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" shapeResultP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text ShapeResult\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m59 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshapeResultP\u001b[0m\u001b[0m = ShapeResult <$> p1ShapeP <*> (\" \" *> resultP)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:61:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" p1ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m61 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp1ShapeP\u001b[0m\u001b[0m = aP <|> bP <|> cP\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:62:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" aP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m62 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35maP\u001b[0m\u001b[0m = Rock <$ \"A\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:63:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" bP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m63 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mbP\u001b[0m\u001b[0m = Paper <$ \"B\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:64:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" cP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m64 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mcP\u001b[0m\u001b[0m = Scissors <$ \"C\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:66:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" p2ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m66 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp2ShapeP\u001b[0m\u001b[0m = xP <|> yP <|> zP\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:67:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" xP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m67 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxP\u001b[0m\u001b[0m = Rock <$ \"X\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:68:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" yP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m68 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myP\u001b[0m\u001b[0m = Paper <$ \"Y\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:69:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" zP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m69 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzP\u001b[0m\u001b[0m = Scissors <$ \"Z\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:71:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" resultP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m71 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mresultP\u001b[0m\u001b[0m = xrP <|> yrP <|> zrP\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:72:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" xrP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m72 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxrP\u001b[0m\u001b[0m = Loss <$ \"X\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:73:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" yrP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m73 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myrP\u001b[0m\u001b[0m = Draw <$ \"Y\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:74:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" zrP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzrP\u001b[0m\u001b[0m = Win <$ \"Z\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:77:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" successfulParse1 :: Data.Text.Internal.Text -> [Round]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m77 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse1\u001b[0m\u001b[0m input = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:80:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘match’ shadows the existing binding\n",
" imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
" (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m80 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:82:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" successfulParse2 :: Data.Text.Internal.Text -> [ShapeResult]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m82 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse2\u001b[0m\u001b[0m input = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:85:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘match’ shadows the existing binding\n",
" imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
" (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m85 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent02/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent02/Main.hs:55:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" match1P :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text [Round]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m55 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch1P\u001b[0m\u001b[0m = roundP `sepBy` endOfLine\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" roundP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Round\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mroundP\u001b[0m\u001b[0m = Round <$> p1ShapeP <*> (\" \" *> p2ShapeP)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" match2P :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text [ShapeResult]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch2P\u001b[0m\u001b[0m = shapeResultP `sepBy` endOfLine\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:59:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" shapeResultP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text ShapeResult\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m59 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshapeResultP\u001b[0m\u001b[0m = ShapeResult <$> p1ShapeP <*> (\" \" *> resultP)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:61:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" p1ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m61 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp1ShapeP\u001b[0m\u001b[0m = aP <|> bP <|> cP\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:62:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" aP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m62 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35maP\u001b[0m\u001b[0m = Rock <$ \"A\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:63:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" bP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m63 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mbP\u001b[0m\u001b[0m = Paper <$ \"B\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:64:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" cP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m64 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mcP\u001b[0m\u001b[0m = Scissors <$ \"C\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:66:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" p2ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m66 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp2ShapeP\u001b[0m\u001b[0m = xP <|> yP <|> zP\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:67:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" xP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m67 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxP\u001b[0m\u001b[0m = Rock <$ \"X\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:68:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" yP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m68 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myP\u001b[0m\u001b[0m = Paper <$ \"Y\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:69:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" zP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m69 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzP\u001b[0m\u001b[0m = Scissors <$ \"Z\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:71:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" resultP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m71 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mresultP\u001b[0m\u001b[0m = xrP <|> yrP <|> zrP\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:72:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" xrP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m72 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxrP\u001b[0m\u001b[0m = Loss <$ \"X\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:73:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" yrP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m73 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myrP\u001b[0m\u001b[0m = Draw <$ \"Y\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:74:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" zrP :: Data.Attoparsec.Internal.Types.Parser\n",
" Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzrP\u001b[0m\u001b[0m = Win <$ \"Z\"\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:77:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" successfulParse1 :: Data.Text.Internal.Text -> [Round]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m77 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse1\u001b[0m\u001b[0m input = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:80:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘match’ shadows the existing binding\n",
" imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
" (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m80 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:82:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Top-level binding with no type signature:\n",
" successfulParse2 :: Data.Text.Internal.Text -> [ShapeResult]\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m82 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse2\u001b[0m\u001b[0m input = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent02/Main.hs:85:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘match’ shadows the existing binding\n",
" imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
" (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m85 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02 ...\n",
"13009\n",
"10398\n",
" 15,142,040 bytes allocated in the heap\n",
" 1,016,576 bytes copied during GC\n",
" 294,736 bytes maximum residency (2 sample(s))\n",
" 143,536 bytes maximum slop\n",
" 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 2 colls, 2 par 0.001s 0.001s 0.0004s 0.0004s\n",
" Gen 1 2 colls, 1 par 0.002s 0.001s 0.0003s 0.0003s\n",
"\n",
" Parallel GC work balance: 31.81% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.014s ( 0.013s elapsed)\n",
" GC time 0.003s ( 0.001s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.023s ( 0.017s elapsed)\n",
"\n",
" Alloc rate 1,119,000,702 bytes per MUT second\n",
"\n",
" Productivity 59.2% of total user, 73.6% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent03) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent03' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent03' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent03' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent03/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03-tmp/Main.dyn_o ) [Data.List.Split changed]\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent03/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03 ...\n",
"7727\n",
"2609\n",
" 9,004,224 bytes allocated in the heap\n",
" 886,400 bytes copied during GC\n",
" 214,088 bytes maximum residency (1 sample(s))\n",
" 121,784 bytes maximum slop\n",
" 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 2 colls, 2 par 0.002s 0.001s 0.0006s 0.0010s\n",
" Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
"\n",
" Parallel GC work balance: 24.28% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.007s ( 0.006s elapsed)\n",
" GC time 0.002s ( 0.002s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.015s ( 0.011s elapsed)\n",
"\n",
" Alloc rate 1,362,247,646 bytes per MUT second\n",
"\n",
" Productivity 43.5% of total user, 54.5% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent04) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent04' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent04' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent04' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent04/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04-tmp/Main.dyn_o ) [Data.Attoparsec.Text changed]\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent04/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04 ...\n",
"513\n",
"878\n",
" 4,443,080 bytes allocated in the heap\n",
" 164,040 bytes copied during GC\n",
" 223,280 bytes maximum residency (1 sample(s))\n",
" 124,880 bytes maximum slop\n",
" 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 0 colls, 0 par 0.000s 0.000s 0.0000s 0.0000s\n",
" Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.005s ( 0.003s elapsed)\n",
" MUT time 0.005s ( 0.005s elapsed)\n",
" GC time 0.000s ( 0.000s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.013s ( 0.009s elapsed)\n",
"\n",
" Alloc rate 853,932,014 bytes per MUT second\n",
"\n",
" Productivity 40.5% of total user, 54.6% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent05) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent05' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent05' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent05' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent05/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05-tmp/Main.dyn_o ) [Data.Attoparsec.Text changed]\n",
"\n",
"\u001b[;1madvent05/Main.hs:54:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-uni-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Pattern match(es) are non-exhaustive\n",
" In a pattern binding: Patterns of type ‘[Crate]’ not matched: []\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m54 |\u001b[0m\u001b[0m where \u001b[;1m\u001b[35m(c:origin) = wharf!from\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent05/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent05/Main.hs:54:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-uni-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Pattern match(es) are non-exhaustive\n",
" In a pattern binding: Patterns of type ‘[Crate]’ not matched: []\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m54 |\u001b[0m\u001b[0m where \u001b[;1m\u001b[35m(c:origin) = wharf!from\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05 ...\n",
"TGWSMRBPN\n",
"TZLTLWRNF\n",
" 5,094,344 bytes allocated in the heap\n",
" 425,056 bytes copied during GC\n",
" 214,088 bytes maximum residency (1 sample(s))\n",
" 125,880 bytes maximum slop\n",
" 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 1 colls, 1 par 0.001s 0.000s 0.0003s 0.0003s\n",
" Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
"\n",
" Parallel GC work balance: 49.39% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.005s ( 0.004s elapsed)\n",
" GC time 0.001s ( 0.001s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.012s ( 0.008s elapsed)\n",
"\n",
" Alloc rate 1,061,113,423 bytes per MUT second\n",
"\n",
" Productivity 40.8% of total user, 53.4% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent06) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent06' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent06' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent06' for advent-of-code22-0.1.0.0..\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent06/build/advent06/advent06-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent06/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent06/build/advent06/advent06-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent06/build/advent06/advent06 ...\n",
"1080\n",
"3645\n",
" 7,728,352 bytes allocated in the heap\n",
" 340,432 bytes copied during GC\n",
" 231,824 bytes maximum residency (1 sample(s))\n",
" 132,720 bytes maximum slop\n",
" 61 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 1 colls, 1 par 0.001s 0.000s 0.0002s 0.0002s\n",
" Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
"\n",
" Parallel GC work balance: 57.64% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.003s elapsed)\n",
" MUT time 0.004s ( 0.004s elapsed)\n",
" GC time 0.001s ( 0.000s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.012s ( 0.008s elapsed)\n",
"\n",
" Alloc rate 1,749,470,406 bytes per MUT second\n",
"\n",
" Productivity 37.0% of total user, 50.2% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - rosezipper-0.2 (lib:rosezipper) (requires build)\n",
" - advent-of-code22-0.1.0.0 (exe:advent07) --enable-profiling (configuration changed)\n",
"Starting rosezipper-0.2 (all, legacy fallback)\n",
"Building rosezipper-0.2 (all, legacy fallback)\n",
"Installing rosezipper-0.2 (all, legacy fallback)\n",
"Completed rosezipper-0.2 (all, legacy fallback)\n",
"Configuring executable 'advent07' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent07' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent07' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent07/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07-tmp/Main.dyn_o )\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent07/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07 ...\n",
"1084134\n",
"6183184\n",
" 4,838,856 bytes allocated in the heap\n",
" 510,704 bytes copied during GC\n",
" 214,088 bytes maximum residency (1 sample(s))\n",
" 125,880 bytes maximum slop\n",
" 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 1 colls, 1 par 0.001s 0.000s 0.0005s 0.0005s\n",
" Gen 1 1 colls, 0 par 0.000s 0.000s 0.0004s 0.0004s\n",
"\n",
" Parallel GC work balance: 41.61% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.006s ( 0.006s elapsed)\n",
" GC time 0.001s ( 0.001s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.013s ( 0.010s elapsed)\n",
"\n",
" Alloc rate 792,510,382 bytes per MUT second\n",
"\n",
" Productivity 45.7% of total user, 56.1% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent08) --enable-profiling (first run)\n",
"Configuring executable 'advent08' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent08' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent08' for advent-of-code22-0.1.0.0..\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/AoC.dyn_o )\n",
"[2 of 2] Compiling Main ( advent08/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/Main.dyn_o )\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent08/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08 ...\n",
"1823\n",
"211680\n",
" 351,652,392 bytes allocated in the heap\n",
" 11,062,736 bytes copied during GC\n",
" 1,485,704 bytes maximum residency (6 sample(s))\n",
" 138,792 bytes maximum slop\n",
" 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 80 colls, 80 par 0.077s 0.025s 0.0003s 0.0069s\n",
" Gen 1 6 colls, 5 par 0.016s 0.004s 0.0007s 0.0013s\n",
"\n",
" Parallel GC work balance: 45.01% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.005s ( 0.003s elapsed)\n",
" MUT time 0.174s ( 0.164s elapsed)\n",
" GC time 0.092s ( 0.029s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.001s ( 0.001s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.273s ( 0.197s elapsed)\n",
"\n",
" Alloc rate 2,024,427,305 bytes per MUT second\n",
"\n",
" Productivity 63.9% of total user, 83.3% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent09) --enable-profiling (first run)\n",
"Configuring executable 'advent09' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent09' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent09' for advent-of-code22-0.1.0.0..\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/AoC.dyn_o )\n",
"[2 of 2] Compiling Main ( advent09/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/Main.dyn_o )\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent09/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09 ...\n",
"6243\n",
"2630\n",
" 59,497,800 bytes allocated in the heap\n",
" 40,326,560 bytes copied during GC\n",
" 8,220,544 bytes maximum residency (6 sample(s))\n",
" 2,878,880 bytes maximum slop\n",
" 77 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 7 colls, 7 par 0.029s 0.027s 0.0038s 0.0066s\n",
" Gen 1 6 colls, 5 par 0.054s 0.037s 0.0061s 0.0125s\n",
"\n",
" Parallel GC work balance: 7.47% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.041s ( 0.039s elapsed)\n",
" GC time 0.083s ( 0.063s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.131s ( 0.105s elapsed)\n",
"\n",
" Alloc rate 1,443,718,624 bytes per MUT second\n",
"\n",
" Productivity 31.6% of total user, 36.9% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent10) --enable-profiling (first run)\n",
"Configuring executable 'advent10' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent10' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent10' for advent-of-code22-0.1.0.0..\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/AoC.dyn_o )\n",
"[2 of 2] Compiling Main ( advent10/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/Main.dyn_o )\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent10/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10 ...\n",
"15140\n",
"███ ███ ██ ██ ████ ██ ██ ███ \n",
"█ █ █ █ █ █ █ █ █ █ █ █ █ █ \n",
"███ █ █ █ █ █ █ █ █ █ █ █ \n",
"█ █ ███ █ ████ █ █ ██ ████ ███ \n",
"█ █ █ █ █ █ █ █ █ █ █ █ █ \n",
"███ █ ██ █ █ ████ ███ █ █ █ \n",
" \n",
"\n",
" 900,472 bytes allocated in the heap\n",
" 164,040 bytes copied during GC\n",
" 223,280 bytes maximum residency (1 sample(s))\n",
" 124,880 bytes maximum slop\n",
" 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 0 colls, 0 par 0.000s 0.000s 0.0000s 0.0000s\n",
" Gen 1 1 colls, 0 par 0.000s 0.000s 0.0005s 0.0005s\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.001s ( 0.001s elapsed)\n",
" GC time 0.000s ( 0.000s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.008s ( 0.005s elapsed)\n",
"\n",
" Alloc rate 680,385,621 bytes per MUT second\n",
"\n",
" Productivity 16.9% of total user, 23.5% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent11) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent11' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent11' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent11' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent11/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent11/Main.hs:89:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Pattern match(es) are non-exhaustive\n",
" In an equation for ‘updateWorry’:\n",
" Patterns of type ‘Int’, ‘Expression’, ‘Int -> Int’ not matched:\n",
" _ (Expression Plus (Literal _)) _\n",
" _ (Expression Plus Old) _\n",
" _ (Expression Times (Literal _)) _\n",
" _ (Expression Times Old) _\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m89 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mupdateWorry current (Expression operator operand) threshold\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent11/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent11/Main.hs:89:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Pattern match(es) are non-exhaustive\n",
" In an equation for ‘updateWorry’:\n",
" Patterns of type ‘Int’, ‘Expression’, ‘Int -> Int’ not matched:\n",
" _ (Expression Plus (Literal _)) _\n",
" _ (Expression Plus Old) _\n",
" _ (Expression Times (Literal _)) _\n",
" _ (Expression Times Old) _\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m89 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mupdateWorry current (Expression operator operand) threshold\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11 ...\n",
"112815\n",
"25738411485\n",
" 1,017,483,040 bytes allocated in the heap\n",
" 383,219,896 bytes copied during GC\n",
" 59,332,752 bytes maximum residency (11 sample(s))\n",
" 748,528 bytes maximum slop\n",
" 179 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 231 colls, 231 par 0.216s 0.175s 0.0008s 0.0086s\n",
" Gen 1 11 colls, 10 par 0.733s 0.215s 0.0195s 0.0584s\n",
"\n",
" Parallel GC work balance: 49.26% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.003s elapsed)\n",
" MUT time 0.508s ( 0.467s elapsed)\n",
" GC time 0.860s ( 0.301s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.089s ( 0.088s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 1.464s ( 0.860s elapsed)\n",
"\n",
" Alloc rate 2,004,482,550 bytes per MUT second\n",
"\n",
" Productivity 40.8% of total user, 64.5% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - pqueue-1.4.3.0 (lib) (requires build)\n",
" - advent-of-code22-0.1.0.0 (exe:advent12) --enable-profiling (configuration changed)\n",
"Starting pqueue-1.4.3.0 (lib)\n",
"Building pqueue-1.4.3.0 (lib)\n",
"Installing pqueue-1.4.3.0 (lib)\n",
"Completed pqueue-1.4.3.0 (lib)\n",
"Configuring executable 'advent12' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent12' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent12' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent12/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent12/Main.hs:29:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘goal’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m29 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Mountain\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:39:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘cost’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m39 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:81:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘grid’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m81 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m = grid0 // [(s, mkCell 'a'), (g, mkCell 'z')]\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘grid’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘grid’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:134:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘goal’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m134 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:139:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘grid’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m139 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:153:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘goal’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m153 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent12/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent12/Main.hs:29:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘goal’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m29 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Mountain\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:39:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘cost’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m39 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:81:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘grid’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m81 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m = grid0 // [(s, mkCell 'a'), (g, mkCell 'z')]\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘grid’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘grid’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:134:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘goal’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m134 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:139:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘grid’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m139 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent12/Main.hs:153:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘goal’ shadows the existing binding\n",
" defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m153 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12 ...\n",
"468\n",
"459\n",
" 2,329,680,024 bytes allocated in the heap\n",
" 94,728,104 bytes copied during GC\n",
" 849,440 bytes maximum residency (43 sample(s))\n",
" 186,352 bytes maximum slop\n",
" 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 521 colls, 521 par 0.250s 0.156s 0.0003s 0.0014s\n",
" Gen 1 43 colls, 42 par 0.086s 0.028s 0.0007s 0.0016s\n",
"\n",
" Parallel GC work balance: 16.10% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.005s ( 0.003s elapsed)\n",
" MUT time 2.081s ( 1.966s elapsed)\n",
" GC time 0.331s ( 0.179s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.005s ( 0.005s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 2.423s ( 2.154s elapsed)\n",
"\n",
" Alloc rate 1,119,659,454 bytes per MUT second\n",
"\n",
" Productivity 86.0% of total user, 91.5% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent13) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent13' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent13' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent13' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent13/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13-tmp/Main.dyn_o )\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent13/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13 ...\n",
"5675\n",
"20383\n",
" 15,983,552 bytes allocated in the heap\n",
" 2,677,272 bytes copied during GC\n",
" 1,145,232 bytes maximum residency (2 sample(s))\n",
" 136,816 bytes maximum slop\n",
" 64 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 2 colls, 2 par 0.003s 0.002s 0.0011s 0.0011s\n",
" Gen 1 2 colls, 1 par 0.004s 0.001s 0.0007s 0.0010s\n",
"\n",
" Parallel GC work balance: 30.00% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.005s ( 0.003s elapsed)\n",
" MUT time 0.016s ( 0.016s elapsed)\n",
" GC time 0.007s ( 0.004s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.030s ( 0.023s elapsed)\n",
"\n",
" Alloc rate 975,509,592 bytes per MUT second\n",
"\n",
" Productivity 55.1% of total user, 67.1% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent14) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent14' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent14' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent14' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent14/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent14/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Control.Applicative’ is redundant\n",
" except perhaps to import instances from ‘Control.Applicative’\n",
" To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent14/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent14/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Control.Applicative’ is redundant\n",
" except perhaps to import instances from ‘Control.Applicative’\n",
" To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14 ...\n",
"644\n",
"27324\n",
" 474,666,344 bytes allocated in the heap\n",
" 44,189,776 bytes copied during GC\n",
" 3,669,176 bytes maximum residency (17 sample(s))\n",
" 160,312 bytes maximum slop\n",
" 66 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 99 colls, 99 par 0.047s 0.027s 0.0003s 0.0009s\n",
" Gen 1 17 colls, 16 par 0.080s 0.028s 0.0017s 0.0031s\n",
"\n",
" Parallel GC work balance: 50.21% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.003s elapsed)\n",
" MUT time 1.617s ( 1.592s elapsed)\n",
" GC time 0.112s ( 0.040s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.015s ( 0.015s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 1.751s ( 1.650s elapsed)\n",
"\n",
" Alloc rate 293,505,646 bytes per MUT second\n",
"\n",
" Productivity 93.3% of total user, 97.4% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent15) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent15' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent15' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent15' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent15/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent15/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Control.Applicative’ is redundant\n",
" except perhaps to import instances from ‘Control.Applicative’\n",
" To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent15/Main.hs:8:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Data.List’ is redundant\n",
" except perhaps to import instances from ‘Data.List’\n",
" To import instances alone, use: import Data.List()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m8 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.List\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent15/Main.hs:12:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Control.Lens’ is redundant\n",
" except perhaps to import instances from ‘Control.Lens’\n",
" To import instances alone, use: import Control.Lens()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m12 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Lens\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent15/Main.hs:25:21: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘p’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m25 |\u001b[0m\u001b[0m mempty = Region (\\\u001b[;1m\u001b[35mp\u001b[0m\u001b[0m -> False)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent15/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent15/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Control.Applicative’ is redundant\n",
" except perhaps to import instances from ‘Control.Applicative’\n",
" To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent15/Main.hs:8:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Data.List’ is redundant\n",
" except perhaps to import instances from ‘Data.List’\n",
" To import instances alone, use: import Data.List()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m8 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.List\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent15/Main.hs:12:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Control.Lens’ is redundant\n",
" except perhaps to import instances from ‘Control.Lens’\n",
" To import instances alone, use: import Control.Lens()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m12 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Lens\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent15/Main.hs:25:21: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘p’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m25 |\u001b[0m\u001b[0m mempty = Region (\\\u001b[;1m\u001b[35mp\u001b[0m\u001b[0m -> False)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15 ...\n",
"5147333\n",
"13734006908372\n",
" 189,084,295,488 bytes allocated in the heap\n",
"10,329,767,309,344 bytes copied during GC\n",
" 13,185,529,696 bytes maximum residency (1550 sample(s))\n",
" 64,387,232 bytes maximum slop\n",
" 25723 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 44034 colls, 44034 par 69.955s 59.862s 0.0014s 0.0142s\n",
" Gen 1 1550 colls, 1549 par 18709.588s 6375.071s 4.1129s 9.0665s\n",
"\n",
" Parallel GC work balance: 91.17% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.005s ( 0.003s elapsed)\n",
" MUT time 257.456s (161.075s elapsed)\n",
" GC time 14408.495s (2094.011s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 4371.048s (4340.921s elapsed)\n",
" EXIT time 1.473s ( 0.001s elapsed)\n",
" Total time 19038.476s (6596.011s elapsed)\n",
"\n",
" Alloc rate 734,434,270 bytes per MUT second\n",
"\n",
" Productivity 24.3% of total user, 68.3% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent16) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent16' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent16' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent16' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent16/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent16/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent16/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent16/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16 ...\n",
"1792\n",
"2587\n",
" 436,836,396,688 bytes allocated in the heap\n",
" 48,620,803,928 bytes copied during GC\n",
" 20,171,424 bytes maximum residency (2171 sample(s))\n",
" 351,712 bytes maximum slop\n",
" 97 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 103284 colls, 103284 par 56.327s 37.400s 0.0004s 0.0132s\n",
" Gen 1 2171 colls, 2170 par 47.089s 15.604s 0.0072s 0.0351s\n",
"\n",
" Parallel GC work balance: 31.48% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 224.034s (206.413s elapsed)\n",
" GC time 93.183s ( 42.812s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 10.234s ( 10.192s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 327.457s (259.420s elapsed)\n",
"\n",
" Alloc rate 1,949,862,696 bytes per MUT second\n",
"\n",
" Productivity 71.5% of total user, 83.5% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent17) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent17' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent17' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent17' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent17/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent17/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The qualified import of ‘Data.Map.Strict’ is redundant\n",
" except perhaps to import instances from ‘Data.Map.Strict’\n",
" To import instances alone, use: import Data.Map.Strict()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport qualified Data.Map.Strict as M\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:70:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘simSome’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m70 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msimSome\u001b[0m\u001b[0m oneJetCycle n = fromMaybe -1 $ maximumOf (folded . _y) (final ^. chamber)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:74:10: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘rocks’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate \u001b[;1m\u001b[35mrocks\u001b[0m\u001b[0m jets n = (!!n) $ iterate dropFromTop initState\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:74:16: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘jets’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate rocks \u001b[;1m\u001b[35mjets\u001b[0m\u001b[0m n = (!!n) $ iterate dropFromTop initState\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:96:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘chamber’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m96 |\u001b[0m\u001b[0m push \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock direction \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:106:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘chamber’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m106 |\u001b[0m\u001b[0m fall \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:143:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘showChamber’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshowChamber\u001b[0m\u001b[0m chamber = unlines \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:143:13: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘chamber’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m showChamber \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m = unlines \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent17/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent17/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The qualified import of ‘Data.Map.Strict’ is redundant\n",
" except perhaps to import instances from ‘Data.Map.Strict’\n",
" To import instances alone, use: import Data.Map.Strict()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport qualified Data.Map.Strict as M\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:70:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘simSome’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m70 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msimSome\u001b[0m\u001b[0m oneJetCycle n = fromMaybe -1 $ maximumOf (folded . _y) (final ^. chamber)\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:74:10: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘rocks’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate \u001b[;1m\u001b[35mrocks\u001b[0m\u001b[0m jets n = (!!n) $ iterate dropFromTop initState\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:74:16: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘jets’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate rocks \u001b[;1m\u001b[35mjets\u001b[0m\u001b[0m n = (!!n) $ iterate dropFromTop initState\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:96:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘chamber’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m96 |\u001b[0m\u001b[0m push \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock direction \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:106:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘chamber’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m106 |\u001b[0m\u001b[0m fall \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:143:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘showChamber’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshowChamber\u001b[0m\u001b[0m chamber = unlines \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent17/Main.hs:143:13: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘chamber’ shadows the existing binding\n",
" defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m showChamber \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m = unlines \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17 ...\n",
"3211\n",
"1589142857183\n",
" 112,643,551,288 bytes allocated in the heap\n",
" 3,363,497,384 bytes copied during GC\n",
" 4,914,576 bytes maximum residency (500 sample(s))\n",
" 766,208 bytes maximum slop\n",
" 65 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 24300 colls, 24300 par 7.144s 3.060s 0.0001s 0.0112s\n",
" Gen 1 500 colls, 499 par 2.683s 1.091s 0.0022s 0.0114s\n",
"\n",
" Parallel GC work balance: 32.92% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 56.213s ( 52.282s elapsed)\n",
" GC time 9.185s ( 3.513s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.641s ( 0.638s elapsed)\n",
" EXIT time 0.003s ( 0.002s elapsed)\n",
" Total time 66.046s ( 56.437s elapsed)\n",
"\n",
" Alloc rate 2,003,871,640 bytes per MUT second\n",
"\n",
" Productivity 86.1% of total user, 93.8% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent18) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent18' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent18' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent18' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent18/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18-tmp/Main.dyn_o )\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent18/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18-tmp/Main.p_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18 ...\n",
"3364\n",
"2006\n",
" 101,387,336 bytes allocated in the heap\n",
" 7,046,080 bytes copied during GC\n",
" 1,772,120 bytes maximum residency (3 sample(s))\n",
" 198,056 bytes maximum slop\n",
" 64 MiB total memory in use (0 MB lost due to fragmentation)\n",
"\n",
" Tot time (elapsed) Avg pause Max pause\n",
" Gen 0 22 colls, 22 par 0.011s 0.007s 0.0003s 0.0015s\n",
" Gen 1 3 colls, 2 par 0.006s 0.001s 0.0005s 0.0005s\n",
"\n",
" Parallel GC work balance: 27.29% (serial 0%, perfect 100%)\n",
"\n",
" TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
"\n",
" SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
"\n",
" INIT time 0.004s ( 0.002s elapsed)\n",
" MUT time 0.095s ( 0.092s elapsed)\n",
" GC time 0.017s ( 0.008s elapsed)\n",
" RP time 0.000s ( 0.000s elapsed)\n",
" PROF time 0.000s ( 0.000s elapsed)\n",
" EXIT time 0.002s ( 0.001s elapsed)\n",
" Total time 0.118s ( 0.103s elapsed)\n",
"\n",
" Alloc rate 1,068,522,257 bytes per MUT second\n",
"\n",
" Productivity 80.4% of total user, 88.9% of total elapsed\n",
"\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent19) --enable-profiling (configuration changed)\n",
"Configuring executable 'advent19' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent19' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent19' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent19/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19-tmp/Main.dyn_o ) [Control.Parallel.Strategies changed]\n",
"\n",
"\u001b[;1madvent19/Main.hs:3:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Debug.Trace’ is redundant\n",
" except perhaps to import instances from ‘Debug.Trace’\n",
" To import instances alone, use: import Debug.Trace()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m3 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Debug.Trace\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:19:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Data.Ord’ is redundant\n",
" except perhaps to import instances from ‘Data.Ord’\n",
" To import instances alone, use: import Data.Ord()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m19 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.Ord\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:166:22: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘prevBenefit’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m166 |\u001b[0m\u001b[0m makeAgendum previous \u001b[;1m\u001b[35mprevBenefit\u001b[0m\u001b[0m newState = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:193:24: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘robots’ shadows the existing binding\n",
" defined at advent19/Main.hs:45:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m193 |\u001b[0m\u001b[0m where blueprintify n \u001b[;1m\u001b[35mrobots\u001b[0m\u001b[0m = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
"[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19-tmp/AoC.p_o )\n",
"[2 of 2] Compiling Main ( advent19/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19-tmp/Main.p_o )\n",
"\n",
"\u001b[;1madvent19/Main.hs:3:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Debug.Trace’ is redundant\n",
" except perhaps to import instances from ‘Debug.Trace’\n",
" To import instances alone, use: import Debug.Trace()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m3 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Debug.Trace\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:19:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" The import of ‘Data.Ord’ is redundant\n",
" except perhaps to import instances from ‘Data.Ord’\n",
" To import instances alone, use: import Data.Ord()\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m19 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.Ord\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:166:22: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘prevBenefit’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m166 |\u001b[0m\u001b[0m makeAgendum previous \u001b[;1m\u001b[35mprevBenefit\u001b[0m\u001b[0m newState = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent19/Main.hs:193:24: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" This binding for ‘robots’ shadows the existing binding\n",
" defined at advent19/Main.hs:45:1\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m193 |\u001b[0m\u001b[0m where blueprintify n \u001b[;1m\u001b[35mrobots\u001b[0m\u001b[0m = \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19 ...\n",
"1199\n"
]
}
],
"source": [
"! cd .. && for i in {01..25}; do cabal run advent${i} --enable-profiling -- +RTS -N -pj -s -hT ; done"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"rm: cannot remove '../times.csv': No such file or directory\n",
"rm: cannot remove '../times_raw.csv': No such file or directory\n"
]
}
],
"source": [
"! rm ../times.csv\n",
"! rm ../times_raw.csv"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"Collapsed": "false",
"scrolled": true,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Up to date\n",
"66719\n",
"198551\n",
"Up to date\n",
"13009\n",
"10398\n",
"Up to date\n",
"7727\n",
"2609\n",
"Up to date\n",
"513\n",
"878\n",
"Up to date\n",
"TGWSMRBPN\n",
"TZLTLWRNF\n",
"Up to date\n",
"1080\n",
"3645\n",
"Up to date\n",
"1084134\n",
"6183184\n",
"Up to date\n",
"1823\n",
"211680\n",
"Up to date\n",
"6243\n",
"2630\n",
"Up to date\n",
"15140\n",
"███ ███ ██ ██ ████ ██ ██ ███ \n",
"█ █ █ █ █ █ █ █ █ █ █ █ █ █ \n",
"███ █ █ █ █ █ █ █ █ █ █ █ \n",
"█ █ ███ █ ████ █ █ ██ ████ ███ \n",
"█ █ █ █ █ █ █ █ █ █ █ █ █ \n",
"███ █ ██ █ █ ████ ███ █ █ █ \n",
" \n",
"\n",
"Up to date\n",
"112815\n",
"25738411485\n",
"Up to date\n",
"468\n",
"459\n",
"Up to date\n",
"5675\n",
"20383\n",
"Up to date\n",
"644\n",
"27324\n",
"Up to date\n",
"5147333\n",
"13734006908372\n",
"Up to date\n",
"1792\n",
"2587\n",
"Up to date\n",
"3211\n",
"1589142857183\n",
"Up to date\n",
"3364\n",
"2006\n",
"Up to date\n",
"1199\n",
"3510\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent20) (file advent20/Main.hs changed)\n",
"Preprocessing executable 'advent20' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent20' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent20/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent20/build/advent20/advent20-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent20/build/advent20/advent20-tmp/Main.dyn_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent20/build/advent20/advent20 ...\n",
"8721\n",
"831878881825\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent21) (file advent21/Main.hs changed)\n",
"Preprocessing executable 'advent21' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent21' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent21/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent21/build/advent21/advent21-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent21/build/advent21/advent21-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent21/Main.hs:38:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-uni-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Pattern match(es) are non-exhaustive\n",
" In a pattern binding:\n",
" Patterns of type ‘Shout’ not matched: Literal _\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m38 |\u001b[0m\u001b[0m where \u001b[;1m\u001b[35m(Operation _ rootL rootR) = monkeys ! \"root\"\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent21/Main.hs:50:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Pattern match(es) are non-exhaustive\n",
" In an equation for ‘binarySearch’:\n",
" Patterns of type ‘Monkeys’, ‘Monkeys’, ‘Int’, ‘Int’ not matched:\n",
" (Data.Map.Internal.Bin _ _ _ _ _) (Data.Map.Internal.Bin _ _ _ _ _)\n",
" _ _\n",
" (Data.Map.Internal.Bin _ _ _ _ _) Data.Map.Internal.Tip _ _\n",
" Data.Map.Internal.Tip (Data.Map.Internal.Bin _ _ _ _ _) _ _\n",
" Data.Map.Internal.Tip Data.Map.Internal.Tip _ _\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m50 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mbinarySearch values operations lower upper \u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent21/build/advent21/advent21 ...\n",
"21120928600114\n",
"3453748220116\n",
"Up to date\n",
"26558\n",
"110400\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent23) (file advent23/Main.hs changed)\n",
"Preprocessing executable 'advent23' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent23' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent23/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent23/build/advent23/advent23-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent23/build/advent23/advent23-tmp/Main.dyn_o )\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent23/build/advent23/advent23 ...\n",
"4236\n",
"1023\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent24) (file advent24/Main.hs changed)\n",
"Preprocessing executable 'advent24' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent24' for advent-of-code22-0.1.0.0..\n",
"[2 of 2] Compiling Main ( advent24/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent24/build/advent24/advent24-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent24/build/advent24/advent24-tmp/Main.dyn_o )\n",
"\n",
"\u001b[;1madvent24/Main.hs:53:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘cost’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m53 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
"\n",
"\u001b[;1madvent24/Main.hs:221:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
" Defined but not used: ‘showSafe’\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
"\u001b[;1m\u001b[34m221 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshowSafe\u001b[0m\u001b[0m valley = unlines $ reverse rows\n",
"\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent24/build/advent24/advent24 ...\n",
"288\n",
"861\n",
"Build profile: -w ghc-9.2.5 -O1\n",
"In order, the following will be built (use -v for more details):\n",
" - advent-of-code22-0.1.0.0 (exe:advent25) (configuration changed)\n",
"Configuring executable 'advent25' for advent-of-code22-0.1.0.0..\n",
"Preprocessing executable 'advent25' for advent-of-code22-0.1.0.0..\n",
"Building executable 'advent25' for advent-of-code22-0.1.0.0..\n",
"Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent25/build/advent25/advent25 ...\n",
"20==1==12=0111=2--20\n"
]
}
],
"source": [
"! cd .. && for i in {01..25}; do /usr/bin/time -f \"%C,%S,%E,%M\" -o times.csv -a cabal run advent${i}; done"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"Collapsed": "false",
"scrolled": true,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"66719\n",
"198551\n",
"13009\n",
"10398\n",
"7727\n",
"2609\n",
"513\n",
"878\n",
"TGWSMRBPN\n",
"TZLTLWRNF\n",
"1080\n",
"3645\n",
"1084134\n",
"6183184\n",
"1823\n",
"211680\n",
"6243\n",
"2630\n",
"15140\n",
"███ ███ ██ ██ ████ ██ ██ ███ \n",
"█ █ █ █ █ █ █ █ █ █ █ █ █ █ \n",
"███ █ █ █ █ █ █ █ █ █ █ █ \n",
"█ █ ███ █ ████ █ █ ██ ████ ███ \n",
"█ █ █ █ █ █ █ █ █ █ █ █ █ \n",
"███ █ ██ █ █ ████ ███ █ █ █ \n",
" \n",
"\n",
"112815\n",
"25738411485\n",
"468\n",
"459\n",
"5675\n",
"20383\n",
"644\n",
"27324\n",
"5147333\n",
"13734006908372\n",
"1792\n",
"2587\n",
"3211\n",
"1589142857183\n",
"3364\n",
"2006\n",
"1199\n",
"3510\n",
"8721\n",
"831878881825\n",
"21120928600114\n",
"3453748220116\n",
"26558\n",
"110400\n",
"4236\n",
"1023\n",
"288\n",
"861\n",
"20==1==12=0111=2--20\n"
]
}
],
"source": [
"! cd .. && for i in {01..25}; do /usr/bin/time -f \"%C,%S,%E,%M\" -o times_raw.csv -a advent${i}; done"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"!mv ../*prof ."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"!mv ../times.csv ."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"!mv ../times_raw.csv ."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"!mv ../*hp ."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/bin/bash: -c: line 1: syntax error near unexpected token `;'\n",
"/bin/bash: -c: line 1: ` for f in *hp ; do hp2ps $<_io.TextIOWrapper name='advent24.prof' mode='r' encoding='UTF-8'> ; done'\n"
]
}
],
"source": [
"! for f in *hp ; do hp2ps ${f} ; done"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/plain": [
"['advent13.prof',\n",
" 'advent10.prof',\n",
" 'advent03.prof',\n",
" 'advent07.prof',\n",
" 'advent20.prof',\n",
" 'advent19.prof',\n",
" 'advent01.prof',\n",
" 'advent18.prof',\n",
" 'advent06.prof',\n",
" 'advent09.prof',\n",
" 'advent08.prof',\n",
" 'advent23.prof',\n",
" 'advent21.prof',\n",
" 'advent22.prof',\n",
" 'advent16.prof',\n",
" 'advent25.prof',\n",
" 'advent11.prof',\n",
" 'advent02.prof',\n",
" 'advent15.prof',\n",
" 'advent17.prof',\n",
" 'advent05.prof',\n",
" 'advent12.prof',\n",
" 'advent04.prof',\n",
" 'advent14.prof',\n",
" 'advent24.prof']"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"glob.glob('*prof')"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"Collapsed": "false",
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[{'program': 'advent13',\n",
" 'total_time': 0.08,\n",
" 'total_alloc': 10281760,\n",
" 'total_ticks': 264,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent10',\n",
" 'total_time': 0.01,\n",
" 'total_alloc': 631808,\n",
" 'total_ticks': 48,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent03',\n",
" 'total_time': 0.04,\n",
" 'total_alloc': 6018112,\n",
" 'total_ticks': 120,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent07',\n",
" 'total_time': 0.03,\n",
" 'total_alloc': 3049136,\n",
" 'total_ticks': 108,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent20',\n",
" 'total_time': 116.93,\n",
" 'total_alloc': 55860434768,\n",
" 'total_ticks': 398748,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent19',\n",
" 'total_time': 125807.27,\n",
" 'total_alloc': 1964531122296,\n",
" 'total_ticks': 429011004,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent01',\n",
" 'total_time': 0.06,\n",
" 'total_alloc': 11516576,\n",
" 'total_ticks': 192,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent18',\n",
" 'total_time': 0.36,\n",
" 'total_alloc': 68244096,\n",
" 'total_ticks': 1224,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent06',\n",
" 'total_time': 0.02,\n",
" 'total_alloc': 5025888,\n",
" 'total_ticks': 84,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent09',\n",
" 'total_time': 0.37,\n",
" 'total_alloc': 39708256,\n",
" 'total_ticks': 1248,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent08',\n",
" 'total_time': 0.69,\n",
" 'total_alloc': 214597512,\n",
" 'total_ticks': 2352,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent23',\n",
" 'total_time': 1977.02,\n",
" 'total_alloc': 26387446504,\n",
" 'total_ticks': 6741780,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent21',\n",
" 'total_time': 1.97,\n",
" 'total_alloc': 351135824,\n",
" 'total_ticks': 6720,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent22',\n",
" 'total_time': 3671.94,\n",
" 'total_alloc': 528445105288,\n",
" 'total_ticks': 12521556,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent16',\n",
" 'total_time': 910.42,\n",
" 'total_alloc': 296137053800,\n",
" 'total_ticks': 3104592,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent25',\n",
" 'total_time': 0.01,\n",
" 'total_alloc': 642496,\n",
" 'total_ticks': 48,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent11',\n",
" 'total_time': 3.02,\n",
" 'total_alloc': 655812832,\n",
" 'total_ticks': 10308,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent02',\n",
" 'total_time': 0.06,\n",
" 'total_alloc': 9613016,\n",
" 'total_ticks': 192,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent15',\n",
" 'total_time': 23014.42,\n",
" 'total_alloc': 126607950592,\n",
" 'total_ticks': 78480684,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent17',\n",
" 'total_time': 198.34,\n",
" 'total_alloc': 77649009464,\n",
" 'total_ticks': 676368,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent05',\n",
" 'total_time': 0.02,\n",
" 'total_alloc': 3396888,\n",
" 'total_ticks': 84,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent12',\n",
" 'total_time': 7.58,\n",
" 'total_alloc': 1598902400,\n",
" 'total_ticks': 25836,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent04',\n",
" 'total_time': 0.03,\n",
" 'total_alloc': 2913824,\n",
" 'total_ticks': 96,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent14',\n",
" 'total_time': 5.8,\n",
" 'total_alloc': 258169680,\n",
" 'total_ticks': 19788,\n",
" 'initial_capabilities': 12},\n",
" {'program': 'advent24',\n",
" 'total_time': 18.13,\n",
" 'total_alloc': 3268072336,\n",
" 'total_ticks': 61836,\n",
" 'initial_capabilities': 12}]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"profs = []\n",
"for fn in glob.glob('*prof'):\n",
" with open(fn) as f:\n",
" j = json.load(f)\n",
" prof = {}\n",
" for n in 'program total_time total_alloc total_ticks initial_capabilities'.split():\n",
" prof[n] = j[n]\n",
" profs.append(prof)\n",
"profs"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" total_time | \n",
" total_alloc | \n",
" total_ticks | \n",
" initial_capabilities | \n",
"
\n",
" \n",
" program | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" advent01 | \n",
" 0.06 | \n",
" 11516576 | \n",
" 192 | \n",
" 12 | \n",
"
\n",
" \n",
" advent02 | \n",
" 0.06 | \n",
" 9613016 | \n",
" 192 | \n",
" 12 | \n",
"
\n",
" \n",
" advent03 | \n",
" 0.04 | \n",
" 6018112 | \n",
" 120 | \n",
" 12 | \n",
"
\n",
" \n",
" advent04 | \n",
" 0.03 | \n",
" 2913824 | \n",
" 96 | \n",
" 12 | \n",
"
\n",
" \n",
" advent05 | \n",
" 0.02 | \n",
" 3396888 | \n",
" 84 | \n",
" 12 | \n",
"
\n",
" \n",
" advent06 | \n",
" 0.02 | \n",
" 5025888 | \n",
" 84 | \n",
" 12 | \n",
"
\n",
" \n",
" advent07 | \n",
" 0.03 | \n",
" 3049136 | \n",
" 108 | \n",
" 12 | \n",
"
\n",
" \n",
" advent08 | \n",
" 0.69 | \n",
" 214597512 | \n",
" 2352 | \n",
" 12 | \n",
"
\n",
" \n",
" advent09 | \n",
" 0.37 | \n",
" 39708256 | \n",
" 1248 | \n",
" 12 | \n",
"
\n",
" \n",
" advent10 | \n",
" 0.01 | \n",
" 631808 | \n",
" 48 | \n",
" 12 | \n",
"
\n",
" \n",
" advent11 | \n",
" 3.02 | \n",
" 655812832 | \n",
" 10308 | \n",
" 12 | \n",
"
\n",
" \n",
" advent12 | \n",
" 7.58 | \n",
" 1598902400 | \n",
" 25836 | \n",
" 12 | \n",
"
\n",
" \n",
" advent13 | \n",
" 0.08 | \n",
" 10281760 | \n",
" 264 | \n",
" 12 | \n",
"
\n",
" \n",
" advent14 | \n",
" 5.80 | \n",
" 258169680 | \n",
" 19788 | \n",
" 12 | \n",
"
\n",
" \n",
" advent15 | \n",
" 23014.42 | \n",
" 126607950592 | \n",
" 78480684 | \n",
" 12 | \n",
"
\n",
" \n",
" advent16 | \n",
" 910.42 | \n",
" 296137053800 | \n",
" 3104592 | \n",
" 12 | \n",
"
\n",
" \n",
" advent17 | \n",
" 198.34 | \n",
" 77649009464 | \n",
" 676368 | \n",
" 12 | \n",
"
\n",
" \n",
" advent18 | \n",
" 0.36 | \n",
" 68244096 | \n",
" 1224 | \n",
" 12 | \n",
"
\n",
" \n",
" advent19 | \n",
" 125807.27 | \n",
" 1964531122296 | \n",
" 429011004 | \n",
" 12 | \n",
"
\n",
" \n",
" advent20 | \n",
" 116.93 | \n",
" 55860434768 | \n",
" 398748 | \n",
" 12 | \n",
"
\n",
" \n",
" advent21 | \n",
" 1.97 | \n",
" 351135824 | \n",
" 6720 | \n",
" 12 | \n",
"
\n",
" \n",
" advent22 | \n",
" 3671.94 | \n",
" 528445105288 | \n",
" 12521556 | \n",
" 12 | \n",
"
\n",
" \n",
" advent23 | \n",
" 1977.02 | \n",
" 26387446504 | \n",
" 6741780 | \n",
" 12 | \n",
"
\n",
" \n",
" advent24 | \n",
" 18.13 | \n",
" 3268072336 | \n",
" 61836 | \n",
" 12 | \n",
"
\n",
" \n",
" advent25 | \n",
" 0.01 | \n",
" 642496 | \n",
" 48 | \n",
" 12 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" total_time total_alloc total_ticks initial_capabilities\n",
"program \n",
"advent01 0.06 11516576 192 12\n",
"advent02 0.06 9613016 192 12\n",
"advent03 0.04 6018112 120 12\n",
"advent04 0.03 2913824 96 12\n",
"advent05 0.02 3396888 84 12\n",
"advent06 0.02 5025888 84 12\n",
"advent07 0.03 3049136 108 12\n",
"advent08 0.69 214597512 2352 12\n",
"advent09 0.37 39708256 1248 12\n",
"advent10 0.01 631808 48 12\n",
"advent11 3.02 655812832 10308 12\n",
"advent12 7.58 1598902400 25836 12\n",
"advent13 0.08 10281760 264 12\n",
"advent14 5.80 258169680 19788 12\n",
"advent15 23014.42 126607950592 78480684 12\n",
"advent16 910.42 296137053800 3104592 12\n",
"advent17 198.34 77649009464 676368 12\n",
"advent18 0.36 68244096 1224 12\n",
"advent19 125807.27 1964531122296 429011004 12\n",
"advent20 116.93 55860434768 398748 12\n",
"advent21 1.97 351135824 6720 12\n",
"advent22 3671.94 528445105288 12521556 12\n",
"advent23 1977.02 26387446504 6741780 12\n",
"advent24 18.13 3268072336 61836 12\n",
"advent25 0.01 642496 48 12"
]
},
"execution_count": 158,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"performance = pd.DataFrame(profs).set_index('program').sort_index()\n",
"performance"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 159,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"performance.total_ticks.plot.bar()"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"performance.total_ticks.plot.bar(logy=True)"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"performance.total_alloc.plot.bar()"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"performance.total_alloc.plot.bar(logy=True)"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"image/png": "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nXfemS233LLdpUjSmFfaIYOenh623XZbdt11V6qu5a5RIjNZt24dPT09TJkypd3lSNKY19ZDHjJzSWbO7erq2uy5l156iUmTJtkYGKUigkmTJtkDJGms6oqIhcUP41Io7ZABYGNglHP/ShrDejNzbruLqFbaIQNJktQ6bW0QFCdjWNLd3X3yUK/ddf71Td32mgXvG/T5Z555hssuu4xTTjll4Iw1a7j99ts54YQTBt/WmjUcfvjhrFy5st/nV6xYwdq1a/nzP/9zAK699lruu+8+5s+fP6w8SZLqVarTJpbJM888w1e/+tVBX7NmzRouu+yyhre1YsUKli5duunxkUceOWBjQJKkkdDWBkFEHBERC3t7e9tZRr/mz5/PL3/5S2bOnMmpp57KqaeeyrRp09h7771ZvHjxptfccsstzJw5k3PPPZc1a9bwrne9i3333Zd9992X22+/fcjtvPzyy5x++uksXryYmTNnsnjxYhYtWsS8efMAeOyxxzjmmGOYMWMGM2bM2CzzoYceYp999mH58uXce++9zJo1i5kzZzJ9+nQefPDB5n8wkqRRqWOGDFptwYIFrFy5khUrVnDVVVdxwQUXcPfdd/Pkk0/y9re/nQMOOIAFCxZwzjnncN111wHw4osvcuONNzJhwgQefPBB5syZw5133jnodsaPH8/nPvc57rzzTs477zwAFi1atOn5T3ziE8yePZurr76a3t5enn/+eZ5++mkA7r//fo4//ni+9rWvMXPmTD7+8Y/zyU9+kr/6q7/i5ZdfpowNLUlSOZX6KIOyuPXWW5kzZw5dXV3ssMMOzJ49m+XLl7Pddtu95nWvvPIK8+bNY8WKFXR1dfHAAw80vO2bbrqJSy+9FICuri4mTpzI008/zRNPPMFRRx3FVVddxdve9jYA/viP/5jPf/7z9PT08P73v5/dd9+94e1LksYGGwQ1qPX0zueeey477LADd999N6+++ioTJkwYsZomTpzILrvswm233bapQXDCCSew//77c/3113PIIYdw4YUX8u53v3vEapA0cvpOpF4zoZ/Jy2eub1E1GgFdZbvaoXMIBrDtttvy3HPPAXDAAQewePFient7eeKJJ1i2bBmzZs16zWsA1q9fz0477cQWW2zB17/+9Zq77PvmVPuzP/szzj//fAB6e3t59tlngcpQwzXXXMOll166aWLjQw89xG677cYnPvEJjjzySH7+858P+/1LkkZUb2bOLUtjADpoDsFQhwk226RJk3jnO9/JtGnTOOyww5g+fTozZswgIjj77LPZcccdmTRpEuPGjWPGjBmceOKJnHLKKRx77LFceeWVHHTQQXR313bdioMOOogFCxYwc+ZMPv3pT7/muS9+8YvMnTuXiy66iK6uLs4//3x22mknALq7u7nuuut4z3veQ3d3N/fddx/f+MY32HLLLdlxxx05/fTTm/65SJJGp9Je7XDVqlXstddebapIreJ+lvrnkMHoVsarHXoeAkmS5KTCVrrhhhs47bTTXrNsypQpXH311W2qSJKkChsELXTIIYdwyCGHtLsMSZI248WNJElSe+cQZOaSzJzb1dXVzjIkSRrznFQoSVKHi4jdIuKiiPh21bKjI+JfI+LfIuK9Q2XYIJAkqYQi4uKIeDwiVvZZfmhE3B8RqyNiPkBmPpSZJ1W/LjOvycyTgROBvxxqe53TIDhzYnNvQ6jl8sdQ+yWQ16xZw7Rp02p6qwOtd/PNN3P44YfXndGf4447joceeqjf5z760Y9y3333Dbr+iSeeyLe//e3Nlvf9PO655x5OPPHEhmqVpDFqEXBo9YKI6AK+AhwGTAXmRMTUIXI+W6wzqM5pELRYsxsEZXLvvffS29vLbrvtttlzvb29XHjhhUydOtT3q399P4+9996bnp4efv3rXw+7XkkaizJzGfBUn8WzgNVFj8DLwOXAUf2tHxX/BHw3M+8aans2CAYwf/58fvnLXzJz5kxOPfVUMpNTTz2VadOmsffee7N48eJNr7vllluYOXMm5557LmvWrOFd73oX++67L/vuuy+33357Tdurd72nnnqKo48+munTp/OOd7xj03ULnn/+eT784Q+z9957M336dK666qrN1v3mN7/JUUf97vuzzTbbcPrpp7P//vtzxx13cOCBB266bPNFF13EHnvswYEHHsjJJ5/MvHnzNq23bNky/uRP/oTddtttU29B388D4IgjjuDyyy+v6XOQpDFiXETcWXWbW+N6k4GHqx73AJMjYlJEXADsExEbz4H/ceBg4LiI+NiQBdVTfbOV+bDDBQsWsHLlSlasWAHAVVddxYoVK7j77rt58sknefvb384BBxzAggULOOecc7juuusAePHFF7nxxhuZMGECDz74IHPmzNn0x3Uw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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"performance[['total_ticks', 'total_alloc']].plot.bar(\n",
" logy=True, secondary_y=['total_alloc'], \n",
" figsize=(8, 6), title=\"Internal time and memory\")\n",
"plt.savefig('internal_time_and_memory_log.png')"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"image/png": "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5MnMnj2bWbNmccoppwDw+OOPc9RRRzFp0iQmTZq0XuaSJUvYddddWbBgAXfffTdTp05l8uTJTJw4kQcffHDg3xhJUsOVV8J/H7g3M7/ZxWzzgA9FYQ9gRWY+BiwAxkfEuIgYBhxbztulQTss32wzZszgrrvuYtGiRcyZM4fzzz+f22+/nT//+c+89a1vZa+99mLGjBl84xvf4IorrgDghRde4Oqrr2b48OE8+OCDTJ8+nYULF3a7nmHDhnHWWWexcOFCzjnnHABmzZq1dvonP/lJpk2bxty5c1m9ejXPPfccTz/9NAD3338/xx57LD/4wQ+YPHkyn/jEJ/jUpz7F+9//fl5++WVWr17dmDdHktRoewIfBO6MiEXluC8A2wNk5vnAfIqvwS2m+CrcCeW0VRFxCnAlxVfhLsjMu7tb2UbT3GvdcMMNTJ8+nba2NrbaaiumTZvGggUL2HTTTdeZ769//SunnHIKixYtoq2tjQceeKDf677mmmu46KKLAGhra2PMmDE8/fTTPPnkkxxxxBHMmTOHt7zlLQC87W1v4ytf+Qrt7e285z3vYfz48f1evySp+TLzBjo/d147TwIf72LafIrmX5eN5rB8reL969nZZ5/NVlttxe23387ChQt5+eWXG1bTmDFj2G677bjxxhvXjjvuuOOYN28eI0aM4MADD+Saa65p2PolSdWx0ey5jx49mmeffRaAvfbai3//93/nwx/+ME899RTXX389X//613n00UfXzgOwYsUKxo4dyyabbMKFF15Y92Hx2nV19K53vYvzzjuPT3/606xevXrtrXGHDRvG5ZdfzoEHHsioUaM47rjjWLJkCTvuuCOf/OQnWbJkCXfccQf77rtvP98JSc3W2beDlg7v8K2cM1c0qRptDAatuff01bWBtvnmm7PnnnsyYcIEDj74YCZOnMikSZOICL72ta+x9dZbs/nmmzNkyBAmTZrE8ccfz8knn8zRRx/NZZddxj777MPIkSPrWtc+++zDjBkzmDx5Mp///OfXmfbtb3+bk046ie9///u0tbVx3nnnsc022wAwcuRIrrjiCvbff39GjhzJPffcw49+9COGDh3K1ltvzemnnz7g74skqXqi3kPUvTFy5Mhcs0e6xr333stOO+004OtS63AbS51zz736IuKFzKxvD7AJNspz7pIkVdlGc869Ea688ko+97nPrTNu3LhxzJ07d5AqkiTJ5t4vBx54IAceeOBglyFJ0jo8LC9JUsXY3CVJqhibuyRJFWNzlySpYgavuZ85ZmAfPajnlq9Q/21fly5dyoQJE+p6qV0td91113HYYYf1OqMzxxxzDEuWLOl02oknnsg999zT7fLHH388P/3pT9cb3/H9uPPOOzn++OP7VaskqbE2mj33gW7ureTuu+9m9erV7LjjjutNW716Nd/73vfYeeed+5Td8f3YZZddaG9v5+GHH+5zvZKkxtpomnvH+7lnZsPu6Q70ermnnnqKI488kokTJ7LHHntwxx13APDcc89xwgknsMsuuzBx4kTmzJmz3rIXX3wxRxxxxNrhUaNGcfrpp7P77rtz8803s/fee6+9Ve33v/993vSmN7H33nvzsY99bO195gGuv/563v72t7Pjjjuu3Yvv+H4AvPvd7+bSSy+t632QJDXfRvM999r7uQPMmTOHRYsWNeSe7gBbbrllr5Y744wz2HXXXbn88su55ppr+NCHPsSiRYv48pe/zJgxY7jzzjsB1t77vdaNN97I9OnT1w4///zzTJgwgbPOOmud+ZYtW8aXv/xlbrvtNkaPHs2+++7LpEmT1k5/7LHHuOGGG7jvvvs4/PDDOeaYY9Z7PwCmTJnCjBkz+OxnP9vj+yBJar6Nprl31Oh7uvd2uRtuuGHtXvm+++7L8uXLWbFiBb/+9a/X2UvebLPN1lv2scce43Wve93a4ba2No4++uj15vv973/PtGnTeO1rXwvAe9/73nXqOvLII9lkk03Yeeedefzxx7usdcstt2TZsmXdvh5J0uDZaJt7X+7p/sorrzB8+PCGLNdZPRFBZhIR3S47YsQIVq5cuXZ4+PDhtLW11bWOWq961avqmnflypWMGDGi2yxJ0uDZaM65d7zH+l577cXs2bNZvXo1Tz75JNdffz1Tp05db74VK1awzTbbsMkmm/DDH/6w7nu693a5vfbai4svvhgorqLfYost2HTTTTnggAM455xz1s7X2WH5nXbaicWLF/dY09SpU/nNb37D008/zapVqzo9f99RZ/emf+CBB/r0TQFJUnPUveceEW3AQuDRzOz/97eafHvDjvdz/9rXvsbNN9/csHu693a5M888kxNOOIGJEyfy6le/mgsvvBCAL37xi3z84x9nwoQJtLW1ccYZZ/Ce97xn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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"performance[['total_ticks', 'total_alloc']].plot.bar(\n",
" logy=False, secondary_y=['total_alloc'], \n",
" figsize=(8, 6), title=\"Internal time and memory\")\n",
"plt.savefig('internal_time_and_memory_linear.png')"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [],
"source": [
"# times = pd.read_csv('times.csv', \n",
"# names=['program', 'system', 'elapsed', 'memory'], \n",
"# index_col='program')\n",
"# times.index = times.index.str.slice(start=len('cabal run '))\n",
"# times.elapsed = pd.to_numeric(times.elapsed.str.slice(start=2))\n",
"# times"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"datetime.datetime(2022, 12, 26, 23, 59, 59)"
]
},
"execution_count": 166,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"today = datetime.date.today()\n",
"today = datetime.datetime(year=today.year, month=today.month, day=today.day) - datetime.timedelta(seconds=1)\n",
"today"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"datetime.datetime(1900, 1, 1, 0, 0)"
]
},
"execution_count": 167,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"epoch = datetime.datetime(year=1900, month=1, day=1)\n",
"epoch"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" system | \n",
" elapsed | \n",
" memory | \n",
"
\n",
" \n",
" program | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" advent01 | \n",
" 0.00 | \n",
" 0.02 | \n",
" 10488 | \n",
"
\n",
" \n",
" advent02 | \n",
" 0.00 | \n",
" 0.02 | \n",
" 11112 | \n",
"
\n",
" \n",
" advent03 | \n",
" 0.00 | \n",
" 0.02 | \n",
" 10408 | \n",
"
\n",
" \n",
" advent04 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 9040 | \n",
"
\n",
" \n",
" advent05 | \n",
" 0.01 | \n",
" 0.01 | \n",
" 9324 | \n",
"
\n",
" \n",
" advent06 | \n",
" 0.01 | \n",
" 0.02 | \n",
" 10124 | \n",
"
\n",
" \n",
" advent07 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 9192 | \n",
"
\n",
" \n",
" advent08 | \n",
" 0.02 | \n",
" 0.09 | \n",
" 12204 | \n",
"
\n",
" \n",
" advent09 | \n",
" 0.01 | \n",
" 0.06 | \n",
" 23660 | \n",
"
\n",
" \n",
" advent10 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 6800 | \n",
"
\n",
" \n",
" advent11 | \n",
" 0.07 | \n",
" 0.36 | \n",
" 66664 | \n",
"
\n",
" \n",
" advent12 | \n",
" 0.06 | \n",
" 1.09 | \n",
" 13264 | \n",
"
\n",
" \n",
" advent13 | \n",
" 0.01 | \n",
" 0.01 | \n",
" 12300 | \n",
"
\n",
" \n",
" advent14 | \n",
" 0.01 | \n",
" 0.85 | \n",
" 15068 | \n",
"
\n",
" \n",
" advent15 | \n",
" 20.65 | \n",
" 137.27 | \n",
" 18101260 | \n",
"
\n",
" \n",
" advent16 | \n",
" 15.74 | \n",
" 144.64 | \n",
" 45628 | \n",
"
\n",
" \n",
" advent17 | \n",
" 3.94 | \n",
" 20.67 | \n",
" 22000 | \n",
"
\n",
" \n",
" advent18 | \n",
" 0.02 | \n",
" 0.06 | \n",
" 14060 | \n",
"
\n",
" \n",
" advent19 | \n",
" 87.22 | \n",
" 1134.12 | \n",
" 14295324 | \n",
"
\n",
" \n",
" advent20 | \n",
" 2.81 | \n",
" 15.04 | \n",
" 13940 | \n",
"
\n",
" \n",
" advent21 | \n",
" 0.02 | \n",
" 0.40 | \n",
" 12680 | \n",
"
\n",
" \n",
" advent22 | \n",
" 0.02 | \n",
" 0.23 | \n",
" 15908 | \n",
"
\n",
" \n",
" advent23 | \n",
" 1.87 | \n",
" 370.18 | \n",
" 13628 | \n",
"
\n",
" \n",
" advent24 | \n",
" 0.24 | \n",
" 2.74 | \n",
" 74820 | \n",
"
\n",
" \n",
" advent25 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 5896 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" system elapsed memory\n",
"program \n",
"advent01 0.00 0.02 10488\n",
"advent02 0.00 0.02 11112\n",
"advent03 0.00 0.02 10408\n",
"advent04 0.00 0.01 9040\n",
"advent05 0.01 0.01 9324\n",
"advent06 0.01 0.02 10124\n",
"advent07 0.00 0.01 9192\n",
"advent08 0.02 0.09 12204\n",
"advent09 0.01 0.06 23660\n",
"advent10 0.00 0.01 6800\n",
"advent11 0.07 0.36 66664\n",
"advent12 0.06 1.09 13264\n",
"advent13 0.01 0.01 12300\n",
"advent14 0.01 0.85 15068\n",
"advent15 20.65 137.27 18101260\n",
"advent16 15.74 144.64 45628\n",
"advent17 3.94 20.67 22000\n",
"advent18 0.02 0.06 14060\n",
"advent19 87.22 1134.12 14295324\n",
"advent20 2.81 15.04 13940\n",
"advent21 0.02 0.40 12680\n",
"advent22 0.02 0.23 15908\n",
"advent23 1.87 370.18 13628\n",
"advent24 0.24 2.74 74820\n",
"advent25 0.00 0.01 5896"
]
},
"execution_count": 168,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"times = pd.read_csv('times_raw.csv', \n",
" names=['program', 'system', 'elapsed', 'memory'], \n",
" index_col='program')\n",
"times.elapsed = (pd.to_datetime(times.elapsed, format=\"%M:%S.%f\") - epoch)\n",
"times.elapsed = times.elapsed.apply(lambda x: x.total_seconds())\n",
"times"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"system float64\n",
"elapsed float64\n",
"memory int64\n",
"dtype: object"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"times.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" system | \n",
" elapsed | \n",
" memory | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 25.000000 | \n",
" 25.000000 | \n",
" 2.500000e+01 | \n",
"
\n",
" \n",
" mean | \n",
" 5.309200 | \n",
" 73.117600 | \n",
" 1.313392e+06 | \n",
"
\n",
" \n",
" std | \n",
" 17.799571 | \n",
" 235.410442 | \n",
" 4.513418e+06 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 0.010000 | \n",
" 5.896000e+03 | \n",
"
\n",
" \n",
" 25% | \n",
" 0.000000 | \n",
" 0.020000 | \n",
" 1.040800e+04 | \n",
"
\n",
" \n",
" 50% | \n",
" 0.020000 | \n",
" 0.090000 | \n",
" 1.326400e+04 | \n",
"
\n",
" \n",
" 75% | \n",
" 0.240000 | \n",
" 2.740000 | \n",
" 2.200000e+04 | \n",
"
\n",
" \n",
" max | \n",
" 87.220000 | \n",
" 1134.120000 | \n",
" 1.810126e+07 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" system elapsed memory\n",
"count 25.000000 25.000000 2.500000e+01\n",
"mean 5.309200 73.117600 1.313392e+06\n",
"std 17.799571 235.410442 4.513418e+06\n",
"min 0.000000 0.010000 5.896000e+03\n",
"25% 0.000000 0.020000 1.040800e+04\n",
"50% 0.020000 0.090000 1.326400e+04\n",
"75% 0.240000 2.740000 2.200000e+04\n",
"max 87.220000 1134.120000 1.810126e+07"
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"times.describe()"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" total_time | \n",
" total_alloc | \n",
" total_ticks | \n",
" initial_capabilities | \n",
" system | \n",
" elapsed | \n",
" memory | \n",
"
\n",
" \n",
" program | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" advent01 | \n",
" 0.06 | \n",
" 11516576 | \n",
" 192 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.02 | \n",
" 10488 | \n",
"
\n",
" \n",
" advent02 | \n",
" 0.06 | \n",
" 9613016 | \n",
" 192 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.02 | \n",
" 11112 | \n",
"
\n",
" \n",
" advent03 | \n",
" 0.04 | \n",
" 6018112 | \n",
" 120 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.02 | \n",
" 10408 | \n",
"
\n",
" \n",
" advent04 | \n",
" 0.03 | \n",
" 2913824 | \n",
" 96 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 9040 | \n",
"
\n",
" \n",
" advent05 | \n",
" 0.02 | \n",
" 3396888 | \n",
" 84 | \n",
" 12 | \n",
" 0.01 | \n",
" 0.01 | \n",
" 9324 | \n",
"
\n",
" \n",
" advent06 | \n",
" 0.02 | \n",
" 5025888 | \n",
" 84 | \n",
" 12 | \n",
" 0.01 | \n",
" 0.02 | \n",
" 10124 | \n",
"
\n",
" \n",
" advent07 | \n",
" 0.03 | \n",
" 3049136 | \n",
" 108 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 9192 | \n",
"
\n",
" \n",
" advent08 | \n",
" 0.69 | \n",
" 214597512 | \n",
" 2352 | \n",
" 12 | \n",
" 0.02 | \n",
" 0.09 | \n",
" 12204 | \n",
"
\n",
" \n",
" advent09 | \n",
" 0.37 | \n",
" 39708256 | \n",
" 1248 | \n",
" 12 | \n",
" 0.01 | \n",
" 0.06 | \n",
" 23660 | \n",
"
\n",
" \n",
" advent10 | \n",
" 0.01 | \n",
" 631808 | \n",
" 48 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 6800 | \n",
"
\n",
" \n",
" advent11 | \n",
" 3.02 | \n",
" 655812832 | \n",
" 10308 | \n",
" 12 | \n",
" 0.07 | \n",
" 0.36 | \n",
" 66664 | \n",
"
\n",
" \n",
" advent12 | \n",
" 7.58 | \n",
" 1598902400 | \n",
" 25836 | \n",
" 12 | \n",
" 0.06 | \n",
" 1.09 | \n",
" 13264 | \n",
"
\n",
" \n",
" advent13 | \n",
" 0.08 | \n",
" 10281760 | \n",
" 264 | \n",
" 12 | \n",
" 0.01 | \n",
" 0.01 | \n",
" 12300 | \n",
"
\n",
" \n",
" advent14 | \n",
" 5.80 | \n",
" 258169680 | \n",
" 19788 | \n",
" 12 | \n",
" 0.01 | \n",
" 0.85 | \n",
" 15068 | \n",
"
\n",
" \n",
" advent15 | \n",
" 23014.42 | \n",
" 126607950592 | \n",
" 78480684 | \n",
" 12 | \n",
" 20.65 | \n",
" 137.27 | \n",
" 18101260 | \n",
"
\n",
" \n",
" advent16 | \n",
" 910.42 | \n",
" 296137053800 | \n",
" 3104592 | \n",
" 12 | \n",
" 15.74 | \n",
" 144.64 | \n",
" 45628 | \n",
"
\n",
" \n",
" advent17 | \n",
" 198.34 | \n",
" 77649009464 | \n",
" 676368 | \n",
" 12 | \n",
" 3.94 | \n",
" 20.67 | \n",
" 22000 | \n",
"
\n",
" \n",
" advent18 | \n",
" 0.36 | \n",
" 68244096 | \n",
" 1224 | \n",
" 12 | \n",
" 0.02 | \n",
" 0.06 | \n",
" 14060 | \n",
"
\n",
" \n",
" advent19 | \n",
" 125807.27 | \n",
" 1964531122296 | \n",
" 429011004 | \n",
" 12 | \n",
" 87.22 | \n",
" 1134.12 | \n",
" 14295324 | \n",
"
\n",
" \n",
" advent20 | \n",
" 116.93 | \n",
" 55860434768 | \n",
" 398748 | \n",
" 12 | \n",
" 2.81 | \n",
" 15.04 | \n",
" 13940 | \n",
"
\n",
" \n",
" advent21 | \n",
" 1.97 | \n",
" 351135824 | \n",
" 6720 | \n",
" 12 | \n",
" 0.02 | \n",
" 0.40 | \n",
" 12680 | \n",
"
\n",
" \n",
" advent22 | \n",
" 3671.94 | \n",
" 528445105288 | \n",
" 12521556 | \n",
" 12 | \n",
" 0.02 | \n",
" 0.23 | \n",
" 15908 | \n",
"
\n",
" \n",
" advent23 | \n",
" 1977.02 | \n",
" 26387446504 | \n",
" 6741780 | \n",
" 12 | \n",
" 1.87 | \n",
" 370.18 | \n",
" 13628 | \n",
"
\n",
" \n",
" advent24 | \n",
" 18.13 | \n",
" 3268072336 | \n",
" 61836 | \n",
" 12 | \n",
" 0.24 | \n",
" 2.74 | \n",
" 74820 | \n",
"
\n",
" \n",
" advent25 | \n",
" 0.01 | \n",
" 642496 | \n",
" 48 | \n",
" 12 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 5896 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" total_time total_alloc total_ticks initial_capabilities \\\n",
"program \n",
"advent01 0.06 11516576 192 12 \n",
"advent02 0.06 9613016 192 12 \n",
"advent03 0.04 6018112 120 12 \n",
"advent04 0.03 2913824 96 12 \n",
"advent05 0.02 3396888 84 12 \n",
"advent06 0.02 5025888 84 12 \n",
"advent07 0.03 3049136 108 12 \n",
"advent08 0.69 214597512 2352 12 \n",
"advent09 0.37 39708256 1248 12 \n",
"advent10 0.01 631808 48 12 \n",
"advent11 3.02 655812832 10308 12 \n",
"advent12 7.58 1598902400 25836 12 \n",
"advent13 0.08 10281760 264 12 \n",
"advent14 5.80 258169680 19788 12 \n",
"advent15 23014.42 126607950592 78480684 12 \n",
"advent16 910.42 296137053800 3104592 12 \n",
"advent17 198.34 77649009464 676368 12 \n",
"advent18 0.36 68244096 1224 12 \n",
"advent19 125807.27 1964531122296 429011004 12 \n",
"advent20 116.93 55860434768 398748 12 \n",
"advent21 1.97 351135824 6720 12 \n",
"advent22 3671.94 528445105288 12521556 12 \n",
"advent23 1977.02 26387446504 6741780 12 \n",
"advent24 18.13 3268072336 61836 12 \n",
"advent25 0.01 642496 48 12 \n",
"\n",
" system elapsed memory \n",
"program \n",
"advent01 0.00 0.02 10488 \n",
"advent02 0.00 0.02 11112 \n",
"advent03 0.00 0.02 10408 \n",
"advent04 0.00 0.01 9040 \n",
"advent05 0.01 0.01 9324 \n",
"advent06 0.01 0.02 10124 \n",
"advent07 0.00 0.01 9192 \n",
"advent08 0.02 0.09 12204 \n",
"advent09 0.01 0.06 23660 \n",
"advent10 0.00 0.01 6800 \n",
"advent11 0.07 0.36 66664 \n",
"advent12 0.06 1.09 13264 \n",
"advent13 0.01 0.01 12300 \n",
"advent14 0.01 0.85 15068 \n",
"advent15 20.65 137.27 18101260 \n",
"advent16 15.74 144.64 45628 \n",
"advent17 3.94 20.67 22000 \n",
"advent18 0.02 0.06 14060 \n",
"advent19 87.22 1134.12 14295324 \n",
"advent20 2.81 15.04 13940 \n",
"advent21 0.02 0.40 12680 \n",
"advent22 0.02 0.23 15908 \n",
"advent23 1.87 370.18 13628 \n",
"advent24 0.24 2.74 74820 \n",
"advent25 0.00 0.01 5896 "
]
},
"execution_count": 171,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"performance = performance.merge(times, left_index=True, right_index=True)\n",
"# performance.drop(index='advent15loop', inplace=True)\n",
"performance"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['total_time', 'total_alloc', 'total_ticks', 'initial_capabilities',\n",
" 'system', 'elapsed', 'memory'],\n",
" dtype='object')"
]
},
"execution_count": 172,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"performance.columns"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"