From a9ff5724c9a74f4b788638e293c91412394aaa06 Mon Sep 17 00:00:00 2001 From: Drew Malzahn Date: Wed, 29 Oct 2025 20:42:01 -0400 Subject: [PATCH] More files --- janet/Makefile | 4 ++++ janet/project.janet | 7 +++++++ janet/src/day5.janet | 34 ++++++++++++++++++++++++++++++++++ janet/test/day5.janet | 19 +++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 janet/Makefile create mode 100644 janet/project.janet create mode 100644 janet/src/day5.janet create mode 100644 janet/test/day5.janet diff --git a/janet/Makefile b/janet/Makefile new file mode 100644 index 0000000..942f464 --- /dev/null +++ b/janet/Makefile @@ -0,0 +1,4 @@ + +.PHONY: test +test: + jpm test diff --git a/janet/project.janet b/janet/project.janet new file mode 100644 index 0000000..f8ce7f2 --- /dev/null +++ b/janet/project.janet @@ -0,0 +1,7 @@ + +(declare-project + :name "2024-advent-of-code" + :description "Advent of Code 2024" + :dependencies []) + +(declare-source :source ["src/"]) diff --git a/janet/src/day5.janet b/janet/src/day5.janet new file mode 100644 index 0000000..9e13460 --- /dev/null +++ b/janet/src/day5.janet @@ -0,0 +1,34 @@ + +(def peg-dep + (peg/compile + ~{:main (sequence (capture :d+) "|" (capture :d+)) })) + +(defn parse-dep [line] + (match (peg/match peg-dep (string/trim line)) + [src dst] (tuple (scan-number src) (scan-number dst)) + _ nil)) + +(defn parse-deps [lines] + (map parse-dep lines)) + +(defn parse-deps-file [filename] + (def stream (file/open filename)) + (if stream + (defer (file/close stream)) + (break nil)) + (parse-deps (file/read stream :lines))) + +(defn sources [deps] + (map |($ 0) deps)) + +(defn sinks [deps] + (map |($ 1) deps)) + +(defn roots [deps] + (def sinks_ (sinks deps)) + (defn is-sink? [value] + (not (= nil (in sinks_ value)))) + ()) + +(defn main [prog & rest] + (print "Hello world!")) diff --git a/janet/test/day5.janet b/janet/test/day5.janet new file mode 100644 index 0000000..b1febea --- /dev/null +++ b/janet/test/day5.janet @@ -0,0 +1,19 @@ +(import /src/day5 :prefix "") + +(assert (deep= + [1 2] + (parse-dep "1|2"))) + +(assert (deep= + @[[1 2] [3 4] [5 6]] + (parse-deps ["1|2" "3|4" "5|6"]))) + + +(assert (deep= + [1 3 5] + (sources [[1 2] [3 4] [5 6]]))) + +(assert (deep= + [2 4 6] + (sinks [[1 2] [3 4] [5 6]]))) +