diff options
author | H.J <thechairman@thechairman.info> | 2024-03-07 15:50:04 -0500 |
---|---|---|
committer | H.J <thechairman@thechairman.info> | 2024-03-07 15:50:04 -0500 |
commit | 2a5e033b2d8882f50f2bfe4da25906c57f2a41f0 (patch) | |
tree | c7345e2dcdafa71f4069a34fb4ad200b5bc3f3d9 /codingquest2024/src/day3/solution.gleam | |
parent | 58269644808af2ce4eed40e546d82fee74db10c1 (diff) | |
download | gleam_aoc-2a5e033b2d8882f50f2bfe4da25906c57f2a41f0.tar.gz gleam_aoc-2a5e033b2d8882f50f2bfe4da25906c57f2a41f0.zip |
CodingQuest days 3 and 4 in Gleam
Diffstat (limited to 'codingquest2024/src/day3/solution.gleam')
-rw-r--r-- | codingquest2024/src/day3/solution.gleam | 50 |
1 files changed, 50 insertions, 0 deletions
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 + } +} |