Code to solve the Summer of Code puzzles. These sample solutions are in Python and Haskell.
I develop the solutions with Jupyter Lab.
Learn you a Haskell, Introduction to Haskell 98, and Hackage are good resources.
The Stack documentation and How I Start: Haskell are good sources of using the tools.
I'm using the basic Haskell Platform installation, togeher with stack
to manage the packages and dependencies (install with
$ sudo aptitude install haskell-platform haskell-stack
).
Create the repository as normal: create the project in Gitolite, clone it, and insert the .gitignore
and README.md
files.
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 summerofcode2018soln.cabal
file.
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
stack new summerofcode2018soln --bare simple
Modify the stack.yaml
file as needed, such as adding the ghc-options
stanza.
Each day lives in a separate directory within the src
directory. It will also need it's own stanza in summerofcode2018.cabal
.
Compile with
stack build
or
stack build task1
Run with
stack exec task1
Run interactively with
stack ghci summerofcode2018soln:exe:task1
To profile, use
stack build --executable-profiling --library-profiling --ghc-options="-fprof-auto -rtsopts" task1
then run with
stack exec -- task1 +RTS -p -hy
Stack is using the 12.9-lts resolver for packages, so make sure you read the correct documentation for the packages included in it.
When you use a new package, use
stack solver
to see how the stack.yaml
file needs to change, and
stack solver --update-yaml
to implement the changes.
Build this readme file wth
pandoc -s README.md > README.html
(Using the Modest style.)