diff options
author | bd <bdunahu@operationnull.com> | 2024-06-09 22:02:45 -0600 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2024-06-09 22:02:45 -0600 |
commit | e61508e4764d69a4ea0073f419b89ff0a06e813e (patch) | |
tree | b2f49eeced70c552c73e4030c87406f47a0a8f5e /not-quite-lisp/nql.scm | |
parent | aec326408dd6ad16347b5661112895e60335893a (diff) |
AoC 2015.1 p1+2
Diffstat (limited to 'not-quite-lisp/nql.scm')
-rw-r--r-- | not-quite-lisp/nql.scm | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/not-quite-lisp/nql.scm b/not-quite-lisp/nql.scm new file mode 100644 index 0000000..3863f02 --- /dev/null +++ b/not-quite-lisp/nql.scm @@ -0,0 +1,33 @@ +(define-module (nql) + #:use-module (srfi srfi-13) + #:export (nql + paren->number)) + + +(define (nql str count-all?) + "GIven string of parens STR, +calculates '(' - ')' when +COUNT-ALL is #t.. + +If COUNT-ALL? is #f, returns the +index of the first time a negative +number is reached." + (let loop ((floor 0) (iteration 0) (lst (map paren->number + (string->list str)))) + (cond + ((and (not count-all?) + (> 0 floor)) iteration) + ((null? lst) (and count-all? floor)) + (#t (loop (+ (car lst) floor) + (1+ iteration) + (cdr lst)))))) + +(define (paren->number char) + "Given a character representing a +parenthesis, returns 1 for '(' and +-1 for ')'. +Returns zero for all other characters." + (cond + ((char=? char #\() 1) + ((char=? char #\)) -1) + (#t 0))) |