diff options
author | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
---|---|---|
committer | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
commit | 8777ff071f7bb37631baa7b6717ad29961e50911 (patch) | |
tree | 6d59c4ed58e454b960339c3d1151f0a879e8d7cb /codingquest2024/src/day7 | |
parent | 6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff) | |
download | gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip |
sorting by language
Diffstat (limited to 'codingquest2024/src/day7')
-rw-r--r-- | codingquest2024/src/day7/solution.gleam | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/codingquest2024/src/day7/solution.gleam b/codingquest2024/src/day7/solution.gleam deleted file mode 100644 index 2ca7cbf..0000000 --- a/codingquest2024/src/day7/solution.gleam +++ /dev/null @@ -1,73 +0,0 @@ -import gleam/io -import gleam/string -import gleam/set.{type Set} -import gleam/int -import gleam/regex.{Match} -import gleam/option.{Some} -import simplifile - -pub opaque type Item { - File(name: String, size: Int) - Directory(name: String) -} - -pub fn main() { - let assert Ok(data) = simplifile.read(from: "./src/day7/data.txt") - let lines = string.split(data, "\n") - - mark_for_deletion(lines, 0, "", set.new()) - |> io.debug() -} - -fn mark_for_deletion( - lines: List(String), - deleted: Int, - current_folder: String, - deleted_folders: Set(String), -) { - case lines { - [] -> deleted - ["Folder: " <> folder, ..rest] -> - mark_for_deletion(rest, deleted, folder, deleted_folders) - [file, ..rest] -> { - case - string.contains(file, "temporary") - || string.contains(file, "delete") - || set.contains(deleted_folders, current_folder) - { - True -> - case string.contains(file, "[FOLDER") { - True -> { - file - |> get_folder_number() - |> set.insert(deleted_folders, _) - |> mark_for_deletion(rest, deleted, current_folder, _) - } - False -> { - file - |> get_file_size() - |> int.add(deleted, _) - |> mark_for_deletion(rest, _, current_folder, deleted_folders) - } - } - False -> - mark_for_deletion(rest, deleted, current_folder, deleted_folders) - } - } - } -} - -fn get_folder_number(file) { - let assert Ok(re) = regex.from_string("\\[FOLDER ([0-9]+)\\]") - - let assert [Match(submatches: [Some(n)], ..)] = regex.scan(re, file) - n -} - -fn get_file_size(file) { - let assert Ok(re) = regex.from_string("- .+ ([0-9]+)$") - - let assert [Match(submatches: [Some(n)], ..)] = regex.scan(re, file) - let assert Ok(n) = int.parse(n) - n -} |