aboutsummaryrefslogtreecommitdiff
path: root/aoc-2020-gleam/src/ext
diff options
context:
space:
mode:
Diffstat (limited to 'aoc-2020-gleam/src/ext')
-rw-r--r--aoc-2020-gleam/src/ext/mapx.gleam16
-rw-r--r--aoc-2020-gleam/src/ext/setx.gleam10
2 files changed, 26 insertions, 0 deletions
diff --git a/aoc-2020-gleam/src/ext/mapx.gleam b/aoc-2020-gleam/src/ext/mapx.gleam
new file mode 100644
index 0000000..244c1ac
--- /dev/null
+++ b/aoc-2020-gleam/src/ext/mapx.gleam
@@ -0,0 +1,16 @@
+import gleam/map.{Map}
+import gleam/iterator.{Iterator} as iter
+
+pub fn from_iter(iterator: Iterator(#(k, v))) -> Map(k, v) {
+ iter.fold(
+ over: iterator,
+ from: map.new(),
+ with: fn(acc, cur) { map.insert(acc, cur.0, cur.1) },
+ )
+}
+
+pub fn to_iter(map: Map(k, v)) -> Iterator(#(k, v)) {
+ map
+ |> map.to_list
+ |> iter.from_list
+}
diff --git a/aoc-2020-gleam/src/ext/setx.gleam b/aoc-2020-gleam/src/ext/setx.gleam
new file mode 100644
index 0000000..57e368e
--- /dev/null
+++ b/aoc-2020-gleam/src/ext/setx.gleam
@@ -0,0 +1,10 @@
+import gleam/set.{Set}
+import gleam/iterator as iter
+import ext/iteratorx as iterx
+
+pub fn count(set: Set(a), satisfying predicate: fn(a) -> Bool) -> Int {
+ set
+ |> set.to_list
+ |> iter.from_list
+ |> iterx.count(satisfying: predicate)
+}