f9bb2e14caf06d504c1f1419b65b627af40164cb
[advent-of-code-18.git] / README.md
1 ---
2 title: "Advent of Code 2018"
3 output: html_document
4 css: modest.css
5 ---
6 Code to solve the [Advent of Code](http://adventofcode.com/2018/) puzzles. This year, I'm using the puzzles to develop my skills in [Haskell](https://wiki.haskell.org/Haskell).
7
8 [Learn you a Haskell](http://learnyouahaskell.com/chapters), [Introduction to Haskell 98](https://www.haskell.org/tutorial/index.html), and [Hackage](https://hackage.haskell.org/) are good resources.
9
10 The [Stack documentation](https://docs.haskellstack.org/en/stable/README/) and [How I Start: Haskell](http://howistart.org/posts/haskell/1/) are good sources of using the tools.
11
12 # Toolchain
13
14 I'm using the basic Haskell Platform installation, togeher with `stack` to manage the packages and dependencies (install with
15 ```
16 $ sudo aptitude install haskell-platform haskell-stack
17 ```
18 ).
19
20 ## Creating the repository and project
21 Create the repository as normal: create the project in Gitolite, clone it, and insert the `.gitignore` and `README.md` files.
22
23 There's just one package, with the code in sub-directories of the `src` directory. Each day will generate one (or more) entries in the `adventofcode17.cabal` file.
24
25 Create the basic `stack` project. This will create a new directory. Note that this new directory name can't have a hyphen-delimited word that's just digits, so the project will have to be `advent-of-code`
26
27 ```
28 stack new advent-of-code --bare simple
29 ```
30
31 Modify the `stack.yaml` file as needed, such as adding the `ghc-options` stanza.
32
33 ## Creating subsequent days
34
35 Each day lives in a separate directory within the `src` directory. It will also need it's own stanza in `advent-of-code.cabal`.
36
37 Compile with
38 ```
39 stack build
40 ```
41 or
42 ```
43 stack build advent01
44 ```
45
46 Run with
47 ```
48 stack exec advent01
49 ```
50
51 Run interactively with
52 ```
53 stack ghci advent-of-code:exe:advent01
54 ```
55
56 To profile, use
57 ```
58 stack build --executable-profiling --library-profiling --ghc-options="-fprof-auto -rtsopts"
59 ```
60 then run with
61 ```
62 stack exec -- advent01 +RTS -p -hy
63 ```
64 Generate the profile graph with
65 ```
66 stack exec hp2ps advent01.hp
67 ```
68
69 # Packages
70
71 Stack is using the [12.20-lts resolver](https://www.stackage.org/lts-12.20) for packages, so make sure you read the [correct documentation for the packages included in it](https://www.stackage.org/lts-12.20/docs).
72
73 When you use a new package, use
74
75 ```
76 stack solver
77 ```
78 to see how the `stack.yaml` file needs to change, and
79 ```
80 stack solver --update-yaml
81 ```
82 to implement the changes.
83
84 # IHaskell
85
86 Install following the [IHaskell instructions](https://github.com/gibiansky/IHaskell).
87
88 Run it with
89
90 ```
91 stack exec jupyter -- notebook
92 ```
93
94 # Readme
95
96 Build this readme file wth
97 ```
98 pandoc -s README.md > README.html
99 ```
100
101 (Using the [Modest style](https://github.com/markdowncss/modest).)