aboutsummaryrefslogtreecommitdiff
path: root/2024/01-Historian_Hysteria
diff options
context:
space:
mode:
Diffstat (limited to '2024/01-Historian_Hysteria')
-rw-r--r--2024/01-Historian_Hysteria/01-tests.factor7
-rw-r--r--2024/01-Historian_Hysteria/01.factor33
2 files changed, 40 insertions, 0 deletions
diff --git a/2024/01-Historian_Hysteria/01-tests.factor b/2024/01-Historian_Hysteria/01-tests.factor
new file mode 100644
index 0000000..48c6cb2
--- /dev/null
+++ b/2024/01-Historian_Hysteria/01-tests.factor
@@ -0,0 +1,7 @@
+! Copyright (C) 2024 Julien (adyxax) Dessaux.
+! See https://git.adyxax.org/adyxax/advent-of-code/tree/LICENSE for EUPL license.
+USING: tools.test aoc.2024.01.private ;
+IN: aoc.2024.01.tests
+
+{ 11 } [ "example" part1 ] unit-test
+{ 31 } [ "example" part2 ] unit-test
diff --git a/2024/01-Historian_Hysteria/01.factor b/2024/01-Historian_Hysteria/01.factor
new file mode 100644
index 0000000..a34721e
--- /dev/null
+++ b/2024/01-Historian_Hysteria/01.factor
@@ -0,0 +1,33 @@
+! Copyright (C) 2024 Julien (adyxax) Dessaux.
+! See https://git.adyxax.org/adyxax/advent-of-code/tree/LICENSE for EUPL license.
+USING: assocs io io.encodings.utf8 io.files kernel math math.parser
+math.statistics namespaces prettyprint sequences sorting splitting ;
+IN: aoc.2024.01
+
+<PRIVATE
+
+: load_input ( filename -- array array )
+ "~/git/adyxax/aoc/2024/01-Historian_Hysteria/"
+ swap append utf8 file-lines
+ [ split-words harvest ] map unzip
+ [ [ string>number ] map ] bi@ ;
+
+: part1 ( filename -- n )
+ load_input
+ [ sort ] bi@
+ [ - abs ] 2map
+ sum ;
+
+: part2 ( filename -- n )
+ load_input
+ histogram ! turns an array into a hashtable of { value occurrences }
+ '[ dup _ at 0 or * ] map
+ sum ;
+
+PRIVATE>
+
+: aoc202401 ( -- )
+ "input" part1 pprint nl
+ "input" part2 pprint nl ;
+
+MAIN: aoc202401