Tweaked readme
[advent-of-code-17.git] / README.md
1 ---
2 title: "Advent of Code 2017"
3 output: html_document
4 css: modest.css
5 ---
6 Code to solve the [Advent of Code](http://adventofcode.com/2017/) 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 Within the project directory, there will be one package for each day. This will save time waiting for `stack` to check every executable before compiling what's changed. Each package needs a separate directory tree and a separate `.cabal` file.
24
25 ## Creating the first package
26 Then create the basic `stack` project with it. 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 initial project will have to be `adventofcode1701`
27
28 ```
29 stack new adventofcode1701 simple
30 ```
31
32 This project will be demoted to being a package, but one that will hold the overall project.
33
34 Then create the top-level `stack.yaml` file to hold the overall project information.
35
36 ```
37 stack init
38 ```
39
40 Modify this top-level `stack.yaml` file as needed, such as adding the `ghc-options` stanza. You can then delete `adventofcode1701/stack.yaml`.
41
42 ## Creating subsequent packages
43
44 Each package needs a separate directory tree and a separate `.cabal` file.
45
46 To work on a project, `cd` into that project's directory.
47
48 Compile with
49 ```
50 stack build
51 ```
52 or
53 ```
54 stack build adventofcode1701
55 ```
56
57 Run with
58 ```
59 stack exec advent01
60 ```
61
62 Run interactively with
63 ```
64 stack ghci adventofcode1701:exe:advent01
65 ```
66
67 To profile, use
68 ```
69 stack build --executable-profiling --library-profiling --ghc-options="-fprof-auto -rtsopts" adventofcode1601
70 ```
71 then run with
72 ```
73 stack exec -- advent01 +RTS -p -hy
74 ```
75
76 # IHaskell
77
78 Install following the [IHaskell instructions](https://github.com/gibiansky/IHaskell).
79
80 To run, change into the package's directory (after modifying the `.cabal` file) and run it with
81
82 ```
83 stack exec jupyter -- notebook
84 ```
85
86 # Readme
87
88 Build this readme file wth
89 ```
90 pandoc -s README.md > README.html
91 ```
92
93 (Using the [Modest style](https://github.com/markdowncss/modest).)