aboutsummaryrefslogtreecommitdiff
path: root/codingquest2024/src/day3
diff options
context:
space:
mode:
Diffstat (limited to 'codingquest2024/src/day3')
-rw-r--r--codingquest2024/src/day3/data.txt1
-rw-r--r--codingquest2024/src/day3/solution.gleam50
2 files changed, 51 insertions, 0 deletions
diff --git a/codingquest2024/src/day3/data.txt b/codingquest2024/src/day3/data.txt
new file mode 100644
index 0000000..ac7d887
--- /dev/null
+++ b/codingquest2024/src/day3/data.txt
@@ -0,0 +1 @@
+301 3 96 5 5 1 1 1 1 1 1 1 8 1 74 4 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 9 1 1 37 4 6 1 1 1 1 1 1 1 8 1 26 14 8 1 25 5 4 1 1 1 1 1 1 1 19 6 11 14 9 1 1 1 1 1 1 1 1 1 1 1 14 5 4 1 1 1 1 1 19 9 10 15 7 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 8 4 4 1 1 1 1 1 20 3 1 1 1 4 9 7 1 8 7 19 6 5 3 1 1 1 1 1 7 1 1 1 9 3 6 3 8 5 5 6 8 7 1 1 1 1 1 1 1 1 1 2 6 5 3 1 1 2 7 1 1 1 1 1 8 3 6 3 8 5 6 5 8 6 11 2 5 5 4 1 1 1 6 1 1 1 1 3 7 3 6 3 8 5 5 6 9 4 12 1 6 5 3 1 1 1 8 1 1 1 2 2 6 3 6 3 8 5 6 5 8 6 19 4 4 1 1 1 6 1 1 2 2 2 6 3 6 3 6 1 1 5 6 5 8 6 6 1 1 1 10 4 3 1 1 1 8 1 1 1 1 1 1 1 6 3 6 3 8 5 5 6 1 1 7 6 1 1 1 1 1 2 11 5 2 1 1 2 6 1 1 1 1 1 1 1 1 1 5 3 6 3 6 1 1 5 1 1 1 7 2 1 6 8 1 5 11 4 2 1 1 1 1 1 6 1 1 1 1 1 1 1 1 1 5 3 6 3 8 15 1 1 8 13 17 1 1 1 1 1 8 1 1 1 10 3 4 3 9 13 2 1 9 5 6 1 19 1 1 1 1 1 20 10 9 11 3 4 6 6 7 1 1 1 15 1 1 1 1 1 1 1 19 9 8 1 1 2 1 2 1 2 1 1 1 1 1 2 10 5 8 1 17 1 1 1 1 1 1 1 20 6 9 1 3 1 1 1 1 1 1 6 1 2 7 5 15 1 11 1 1 1 1 1 1 1 1 1 32 1 1 1 7 1 2 1 1 1 1 1 1 1 7 6 13 2 10 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 36 1 1 1 1 1 1 1 9 6 1 1 1 1 1 1 1 1 1 1 1 3 10 1 1 2 1 1 1 1 1 2 1 2 1 2 1 1 49 9 1 11 12 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 49 12 1 3 1 4 80 1 1 1 2 1 1 2 1 7 1 1 92 1 1 5 1026 2 1 4 9 10 14 3 1 1 1 1 7 1 1 1 10 2 1 2 26 9 7 14 11 11 1 6 8 6 26 10 7 14 12 17 7 1 1 6 24 1 1 4 2 3 6 6 4 6 10 18 7 8 18 1 4 5 4 3 5 5 7 6 9 5 1 1 1 1 1 1 1 1 1 1 10 8 16 1 1 1 1 1 1 1 1 4 4 3 5 5 8 5 9 5 20 7 16 1 2 1 2 1 1 4 6 2 5 5 8 5 10 3 22 7 17 1 1 1 2 4 2 1 3 3 5 5 8 5 9 5 19 2 1 6 19 1 1 4 1 3 4 2 5 6 6 6 9 14 11 1 1 6 20 4 2 3 3 4 5 5 6 6 8 6 1 1 1 7 10 7 20 4 2 4 3 3 6 7 2 1 1 6 8 6 3 1 1 6 9 1 1 6 19 4 1 5 4 3 5 16 9 4 7 7 9 6 19 3 2 6 3 4 7 13 10 1 1 1 10 6 7 7 17 5 1 7 4 3 10 1 1 1 1 6 11 1 11 6 7 1 1 6 16 4 2 7 3 4 14 6 24 5 7 1 1 5 16 4 4 1 2 1 7 2 14 5 24 7 6 1 1 5 16 12 1 1 3 4 12 6 25 6 7 1 1 5 16 14 4 3 12 5 26 7 6 1 1 5 17 13 3 4 11 6 26 6 7 1 1 5 17 13 3 4 10 6 15 1 11 5 8 7 17 2 1 7 1 1 4 1 1 2 9 6 12 7 7 6 8 1 1 6 18 19 9 5 14 6 5 1 1 6 9 1 1 1 1 1 1 1 17 1 1 1 1 16 28 9 1 7 1 1 8 9 20 1 2 1 1 8 1 1 30 15 1 1 9 1 1 3 1 2 68 1 1 6 1 1 91 1 2 1 1 1 1 1 233 4 4 4 88 5 3 4 88 4 4 4 85 2 2 2 93 3 10 4 82 4 4 2 4 4 14 2 65 5 3 4 2 5 13 3 58 12 3 11 12 5 32 11 12 13 4 11 12 9 16 26 6 14 7 10 13 14 2 35 2 13 15 5 15 60 20 3 18 36 7 15 46 21 21 8 56 5 34 1 21 \ No newline at end of file
diff --git a/codingquest2024/src/day3/solution.gleam b/codingquest2024/src/day3/solution.gleam
new file mode 100644
index 0000000..6314060
--- /dev/null
+++ b/codingquest2024/src/day3/solution.gleam
@@ -0,0 +1,50 @@
+import gleam/bit_array
+import gleam/int
+import gleam/io
+import gleam/string
+import gleam/string_builder.{type StringBuilder}
+import simplifile
+
+pub fn main() {
+ let assert Ok(data) = simplifile.read(from: "./src/day3/data.txt")
+
+ data
+ |> string.split(" ")
+ |> build_flat_image(" ", string_builder.new())
+ |> bit_array.from_string()
+ |> print_next_slice()
+}
+
+fn build_flat_image(
+ nums: List(String),
+ pixel: String,
+ acc: StringBuilder,
+) -> String {
+ case nums {
+ [] -> string_builder.to_string(acc)
+ [h, ..t] -> {
+ let assert Ok(n) = int.parse(h)
+ let pixels = string.repeat(pixel, n)
+ build_flat_image(t, next_pixel(pixel), string_builder.append(acc, pixels))
+ }
+ }
+}
+
+fn print_next_slice(str: BitArray) -> Nil {
+ case str {
+ <<slice:bytes-size(100), rest:bytes>> -> {
+ let assert Ok(out) = bit_array.to_string(slice)
+ io.println(out)
+ print_next_slice(rest)
+ }
+ _ -> Nil
+ }
+}
+
+fn next_pixel(p: String) -> String {
+ case p {
+ " " -> "#"
+ "#" -> " "
+ _ -> panic
+ }
+}