package cll
Mutable circular doubly linked list
Install
Dune Dependency
Authors
Maintainers
Sources
v0.1.0.tar.gz
md5=6e8da977fb231fd2edbfdfd3c4d1dd6f
sha512=7b24535331e07f7e1734d0db826344efba271b23a0e8322f722694c1b862fea0d9b965796bac32ee31c414f791771ac64d6c30b3f31b1e8e8dbcaaa6034697c1
README.md.html
ocaml-cll
OCaml circular linked list library
Installation
$ opam install cll
Usage
To be run in the ocaml toplevel
let cll = Cll.init [ 1; 2; 3; 4; 5; 6 ];;
Cll.head cll;;
(* int option = Some 1 *)
Cll.length cll;;
(* int = 6 *)
Cll.next cll;;
Cll.head cll;;
(* int option = Some 2 *)
Cll.prev cll;;
Cll.prev cll;;
Cll.head cll;;
(* int option = Some 6 *)
Cll.add cll 7;;
Cll.head cll;;
(* int option = Some 7 *)
Cll.pop cll;;
(* int option = Some 7 *)
Cll.head cll;;
(* int option = Some 1 *)
Cll.find cll 4;;
(* bool = true *)
Cll.head cll;;
(* int option = Some 4 *)
Cll.to_list cll;;
(* int list = [4; 5; 6; 1; 2; 3] *)
Development requirements
OCaml
Opam
Dune
$ ocaml --version
The OCaml toplevel, version 5.1.0
$ opam --version
2.1.5
$ dune --version
3.11.0
Development setup
Install dependencies
opam install . --deps-only --with-test -y
Build code
dune build
Testing
Run unit tests
$ dune test
.................
Ran: 17 tests in: 0.11 seconds.
OK
Check code coverage
dune test --instrument-with bisect_ppx --force
# show coverage summary
bisect-ppx-report summary
# create html coverage report
bisect-ppx-report html
open _coverage/index.html
Running examples
There aren't many uses I'm aware of for a circular linked list, but I have found two programming puzzles where it's been handy.
Prerequisites
From the project's root directory:
# install utop
$ opam install utop
Codewars: Josephus problem
# run the josphus_problem.ml toplevel script
$ dune utop . -- examples/josephus_problem.ml
4
Advent of Code 2020 day 23: Crab Cups
By default only part one of this puzzle will run, as part two takes about 40 seconds on my laptop when running with utop.
To enable part two, uncomment the last three lines in examples/crab_cups.ml
.
# run part one of the crab cups toplevel script
$ dune utop . -- examples/crab_cups.ml
part one: 67384529
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>