aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2024-03-22 23:05:39 +0100
committerMarvin Borner2024-03-22 23:05:39 +0100
commitfd75e9dd97c8fb8672ba609fe4003a3865391c09 (patch)
tree2aa1daabe0b2f6107b68f5dc56ae9b7be8ef2fa9
parenta9880a191bbb5eeaf0faef9336263c92ef9351b6 (diff)
More AOC
-rw-r--r--samples/aoc/2022/02/input3
-rw-r--r--samples/aoc/2022/02/solve.bruijn18
-rw-r--r--samples/aoc/2023/02/input5
-rw-r--r--samples/aoc/2023/02/solve.bruijn18
4 files changed, 44 insertions, 0 deletions
diff --git a/samples/aoc/2022/02/input b/samples/aoc/2022/02/input
new file mode 100644
index 0000000..25097e8
--- /dev/null
+++ b/samples/aoc/2022/02/input
@@ -0,0 +1,3 @@
+A Y
+B X
+C Z \ No newline at end of file
diff --git a/samples/aoc/2022/02/solve.bruijn b/samples/aoc/2022/02/solve.bruijn
new file mode 100644
index 0000000..9dfbbef
--- /dev/null
+++ b/samples/aoc/2022/02/solve.bruijn
@@ -0,0 +1,18 @@
+# perfectly normal rock paper scissors :)
+
+:import std/Combinator .
+:import std/String .
+:import std/Number .
+:import std/Number/Conversion .
+
+:import std/Char C
+:import std/Number/Binary B
+
+parse (split-by (C.eq? ' ')) → &[[²³(B.sub ^1 'A') : ²³(B.sub ^0 'X')]]
+
+solve [foldr go (+0)]
+ go &[[[^3 !! 1 + ((drop 0 ^(~3)) ++ (take 0 ^(~3)) !! 1)] (~(~2) !! 1)]] → add
+
+main lines → (map parse) → (φ cons part1 part2)
+ part1 solve (((+1) : ((+2) : {}(+3))) : (((+0) : ((+3) : {}(+6))) : ((+1) : ((+0) : {}(+2)))))
+ part2 solve (((+0) : ((+3) : {}(+6))) : (((+3) : ((+1) : {}(+2))) : ((+0) : ((+1) : {}(+2)))))
diff --git a/samples/aoc/2023/02/input b/samples/aoc/2023/02/input
new file mode 100644
index 0000000..1cd7d33
--- /dev/null
+++ b/samples/aoc/2023/02/input
@@ -0,0 +1,5 @@
+Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green \ No newline at end of file
diff --git a/samples/aoc/2023/02/solve.bruijn b/samples/aoc/2023/02/solve.bruijn
new file mode 100644
index 0000000..2daed35
--- /dev/null
+++ b/samples/aoc/2023/02/solve.bruijn
@@ -0,0 +1,18 @@
+:import std/Combinator .
+:import std/String .
+:import std/Math .
+:import std/Char C
+
+valid? &[[\(C.eq? 0 'r' (1 >? (+12)) (C.eq? 0 'g' (1 >? (+13)) (1 >? (+14))))]]
+
+parse map (game → (map (sets → (map (cubes → (map (tail → cube)))) → concat → maxes)) → head)
+ game (split-list-by (C.eq? ':')) → tail
+ sets split-list-by (C.eq? ';')
+ cubes split-list-by (C.eq? ',')
+ cube (split-list-by (C.eq? ' ')) → &[[(string→number 1) : ^(^0)]]
+ maxes [(m 'r') : ((m 'g') : {}(m 'b'))]
+ m [max-by (compare ⋔ head) (filter [C.eq? (tail 0) 1] 1)]
+
+main lines → parse → enumerate → (φ cons part1 part2)
+ part1 (map &[[1 : (all? valid? 0)]]) → (filter tail) → (map (head → inc)) → sum
+ part2 (map &[(map head) → product]) → sum