aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/lib/utils.rkt
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-02-17 12:27:24 +0800
committerMistivia <i@mistivia.com>2024-02-17 12:27:24 +0800
commit8fcd7e1ed30a8b04d4d658b2d8c6acad938424d4 (patch)
tree1cf064396cb0ddfdf77b2d3d6b56ebdd27c0ba9b /advent-of-code/lib/utils.rkt
parent050fa7cbfb6b7cf293fb02e06daf123b3e6af816 (diff)
add aoc 2022
Diffstat (limited to 'advent-of-code/lib/utils.rkt')
-rw-r--r--advent-of-code/lib/utils.rkt36
1 files changed, 36 insertions, 0 deletions
diff --git a/advent-of-code/lib/utils.rkt b/advent-of-code/lib/utils.rkt
new file mode 100644
index 0000000..1e777c8
--- /dev/null
+++ b/advent-of-code/lib/utils.rkt
@@ -0,0 +1,36 @@
+#lang racket/base
+
+(provide get-lines
+ enumerate
+ repeat
+ split-list-by)
+
+(define (repeat n e)
+ (let loop ((i 0) (ret '()))
+ (if (>= i n)
+ ret
+ (loop (+ 1 i) (cons e ret)))))
+
+(define (get-lines fp)
+ (let loop ((lines '()))
+ (define l (read-line fp))
+ (if (eof-object? l)
+ (reverse lines)
+ (loop (cons l lines)))))
+
+(define (enumerate lst)
+ (let loop ((i 1) (ret '()) (remain lst))
+ (if (null? remain)
+ (reverse ret)
+ (loop (+ 1 i) (cons (list (car remain) i) ret) (cdr remain)))))
+
+(define (split-list-by e lst . eq)
+ (define cmp (if (null? eq) equal? eq))
+ (let loop ((ret '())
+ (cur '())
+ (lst lst))
+ (if (null? lst)
+ (reverse (cons (reverse cur) ret))
+ (if (cmp e (car lst))
+ (loop (cons (reverse cur) ret) '() (cdr lst))
+ (loop ret (cons (car lst) cur) (cdr lst)))))) \ No newline at end of file