{ "cells": [ { "cell_type": "code", "execution_count": 202, "id": "09b5b05d-ae4f-4ec4-bebf-5824274e4631", "metadata": {}, "outputs": [], "source": [ "import os, glob\n", "import collections\n", "import pandas as pd\n", "import numpy as np\n", "\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 203, "id": "7bd3fc71-cd3b-4218-8912-c35bdc2584bf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[' build-depends: base >=4.15\\n',\n", " ' build-depends: base >=4.15\\n',\n", " ' -- build-depends: base >=4.13 && < 4.15\\n',\n", " ' build-depends: text, attoparsec\\n',\n", " ' build-depends: text, attoparsec\\n',\n", " ' build-depends: text, attoparsec, linear, containers\\n',\n", " ' build-depends: split, containers\\n',\n", " ' build-depends: split\\n',\n", " ' build-depends: text, attoparsec, containers\\n',\n", " ' build-depends: text, attoparsec, containers\\n',\n", " ' build-depends: array, containers, linear\\n',\n", " ' build-depends: containers\\n',\n", " ' build-depends: array, containers, linear\\n',\n", " ' build-depends: text, attoparsec, containers\\n',\n", " ' build-depends: text, attoparsec, containers, linear\\n',\n", " ' build-depends: text, attoparsec, containers, multiset\\n',\n", " ' build-depends: containers, linear, array, pqueue, mtl, lens\\n',\n", " ' build-depends: text, containers, linear, array, pqueue, mtl, lens\\n',\n", " ' build-depends: text, containers, linear, array, pqueue, mtl, lens\\n',\n", " ' build-depends: binary, bytestring, bitstream, mtl\\n',\n", " ' build-depends: linear, text, attoparsec, lens\\n',\n", " ' build-depends: text, attoparsec\\n',\n", " ' build-depends: linear, text, attoparsec, containers, multiset\\n',\n", " ' build-depends: linear, mtl, containers\\n',\n", " ' build-depends: text, attoparsec, containers, multiset\\n',\n", " ' build-depends: linear, text, attoparsec, containers, lens\\n',\n", " ' build-depends: containers, linear, pqueue, mtl, lens\\n',\n", " ' build-depends: containers, linear, pqueue, mtl, lens\\n',\n", " ' build-depends: text, attoparsec, containers\\n',\n", " ' build-depends: text, attoparsec, containers\\n',\n", " ' build-depends: text, attoparsec, containers\\n',\n", " ' build-depends: linear, containers\\n']" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with open('../advent-of-code21.cabal') as f:\n", " build_depends = [l for l in f.readlines() if 'build-depends' in l]\n", "build_depends" ] }, { "cell_type": "code", "execution_count": 204, "id": "d0e0655a-2fad-47c9-afe1-8ae4c44949ab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[' advent01\\n import: common-extensions, build-directives\\n main-is: advent01/Main.hs\\n -- other-modules:\\n -- other-extensions:\\n -- build-depends: base >=4.13 && < 4.15\\n -- hs-source-dirs:\\n -- default-language: Haskell2010\\n\\n',\n", " ' advent02\\n import: common-extensions, build-directives\\n main-is: advent02/Main.hs\\n build-depends: text, attoparsec\\n\\n',\n", " ' advent03\\n import: common-extensions, build-directives\\n main-is: advent03/Main.hs\\n\\n']" ] }, "execution_count": 204, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cabal_file = open('../advent-of-code21.cabal').read()\n", "executables = cabal_file.split('executable')[2:]\n", "executables[:3]" ] }, { "cell_type": "code", "execution_count": 205, "id": "62a719db-b264-4b95-8dd0-80ab08b3622a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['text', ' attoparsec']" ] }, "execution_count": 205, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e = executables[1]\n", "e.strip().split('build-depends: ')[1].split(',')" ] }, { "cell_type": "code", "execution_count": 206, "id": "5f5e51ea-4457-4701-99d2-844edcec721e", "metadata": {}, "outputs": [], "source": [ "def extract(line):\n", " parts = line.strip().split('build-depends: ')\n", " name = parts[0].split()[0]\n", " if len(parts) > 1:\n", " depends = [p.strip() for p in parts[1].split('\\n')[0].split(',') if 'base' not in p]\n", " else:\n", " depends = []\n", " return name, depends " ] }, { "cell_type": "code", "execution_count": 207, "id": "a852a10b-ee9a-46d5-a390-04f218424760", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'advent01': [],\n", " 'advent02': ['text', 'attoparsec'],\n", " 'advent03': [],\n", " 'advent04': ['text', 'attoparsec'],\n", " 'advent05': ['text', 'attoparsec', 'linear', 'containers'],\n", " 'advent06': ['split', 'containers'],\n", " 'advent07': ['split'],\n", " 'advent08': ['text', 'attoparsec', 'containers'],\n", " 'advent09': ['array', 'containers', 'linear'],\n", " 'advent10': ['containers'],\n", " 'advent11': ['array', 'containers', 'linear'],\n", " 'advent12': ['text', 'attoparsec', 'containers'],\n", " 'advent13': ['text', 'attoparsec', 'containers', 'linear'],\n", " 'advent14': ['text', 'attoparsec', 'containers', 'multiset'],\n", " 'advent15': ['containers', 'linear', 'array', 'pqueue', 'mtl', 'lens'],\n", " 'advent16': ['binary', 'bytestring', 'bitstream', 'mtl'],\n", " 'advent17': ['linear', 'text', 'attoparsec', 'lens'],\n", " 'advent18': ['text', 'attoparsec'],\n", " 'advent19': ['linear', 'text', 'attoparsec', 'containers', 'multiset'],\n", " 'advent20': ['linear', 'mtl', 'containers'],\n", " 'advent21': ['text', 'attoparsec', 'containers', 'multiset'],\n", " 'advent22': ['linear', 'text', 'attoparsec', 'containers', 'lens'],\n", " 'advent23': ['containers', 'linear', 'pqueue', 'mtl', 'lens'],\n", " 'advent24': ['text', 'attoparsec', 'containers'],\n", " 'advent25': ['linear', 'containers']}" ] }, "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], "source": [ "modules = {e: ms for e, ms in [extract(e) for e in executables] if e.endswith(tuple(str(i) for i in range(10)))}\n", "modules" ] }, { "cell_type": "code", "execution_count": 208, "id": "57036fc2-db73-4c5b-b3bc-b7e8f9bbccda", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | array | \n", "attoparsec | \n", "binary | \n", "bitstream | \n", "bytestring | \n", "containers | \n", "lens | \n", "linear | \n", "mtl | \n", "multiset | \n", "pqueue | \n", "split | \n", "text | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
advent01 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent02 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent03 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent04 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent05 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent06 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "
advent07 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "
advent08 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent09 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent10 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent11 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent12 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent13 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent14 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent15 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "
advent16 | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent17 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent18 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent19 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent20 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent21 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent22 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent23 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "
advent24 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent25 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
\n", " | program | \n", "module | \n", "present | \n", "
---|---|---|---|
14 | \n", "advent02 | \n", "attoparsec | \n", "True | \n", "
25 | \n", "advent02 | \n", "text | \n", "True | \n", "
40 | \n", "advent04 | \n", "attoparsec | \n", "True | \n", "
51 | \n", "advent04 | \n", "text | \n", "True | \n", "
53 | \n", "advent05 | \n", "attoparsec | \n", "True | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
300 | \n", "advent24 | \n", "attoparsec | \n", "True | \n", "
304 | \n", "advent24 | \n", "containers | \n", "True | \n", "
311 | \n", "advent24 | \n", "text | \n", "True | \n", "
317 | \n", "advent25 | \n", "containers | \n", "True | \n", "
319 | \n", "advent25 | \n", "linear | \n", "True | \n", "
75 rows × 3 columns
\n", "\n", " | Control.Applicative | \n", "Control.Lens | \n", "Control.Monad | \n", "Control.Monad.RWS.Strict | \n", "Control.Monad.Reader | \n", "Control.Monad.State.Strict | \n", "Data.Array | \n", "Data.Array.IArray | \n", "Data.Attoparsec.Text | \n", "Data.Bits | \n", "... | \n", "Data.Monoid | \n", "Data.MultiSet | \n", "Data.PQueue.Prio.Min | \n", "Data.Sequence | \n", "Data.Set | \n", "Data.Text | \n", "Data.Text.IO | \n", "Data.Tuple | \n", "Data.Word | \n", "Linear | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
advent01 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent02 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent03 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent04 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent05 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent06 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent07 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent08 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent09 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent10 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "
advent11 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent12 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "
advent13 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent14 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent15 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent16 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "
advent17 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent18 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent19 | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "True | \n", "True | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent20 | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent21 | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent22 | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "True | \n", "
advent23 | \n", "False | \n", "True | \n", "False | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "True | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
advent24 | \n", "True | \n", "False | \n", "True | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "True | \n", "False | \n", "False | \n", "False | \n", "
advent25 | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "... | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "False | \n", "True | \n", "
25 rows × 31 columns
\n", "\n", " | program | \n", "module | \n", "present | \n", "
---|---|---|---|
17 | \n", "advent01 | \n", "Data.List | \n", "True | \n", "
31 | \n", "advent02 | \n", "Control.Applicative | \n", "True | \n", "
39 | \n", "advent02 | \n", "Data.Attoparsec.Text | \n", "True | \n", "
57 | \n", "advent02 | \n", "Data.Text | \n", "True | \n", "
58 | \n", "advent02 | \n", "Data.Text.IO | \n", "True | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
739 | \n", "advent24 | \n", "Data.Text | \n", "True | \n", "
740 | \n", "advent24 | \n", "Data.Text.IO | \n", "True | \n", "
761 | \n", "advent25 | \n", "Data.List | \n", "True | \n", "
763 | \n", "advent25 | \n", "Data.Map.Strict | \n", "True | \n", "
774 | \n", "advent25 | \n", "Linear | \n", "True | \n", "
140 rows × 3 columns
\n", "