aboutsummaryrefslogtreecommitdiff
path: root/leetcode/lc-1700-students-unable-to-eat.rkt
diff options
context:
space:
mode:
authorHJ <thechairman@thechairman.info>2023-01-17 12:46:04 -0500
committerHJ <thechairman@thechairman.info>2023-01-17 12:46:04 -0500
commitfafbeaf9e3c09ba7a5bea7e47d5736001f8a5aa1 (patch)
treed586a28650cbbfb20ece931a85bcce4c29e5e40b /leetcode/lc-1700-students-unable-to-eat.rkt
parentbc5387512ba529072338648d6337ddab731b8b8c (diff)
downloadgleam_aoc-fafbeaf9e3c09ba7a5bea7e47d5736001f8a5aa1.tar.gz
gleam_aoc-fafbeaf9e3c09ba7a5bea7e47d5736001f8a5aa1.zip
adding old leetcode solutions
Diffstat (limited to 'leetcode/lc-1700-students-unable-to-eat.rkt')
-rw-r--r--leetcode/lc-1700-students-unable-to-eat.rkt36
1 files changed, 36 insertions, 0 deletions
diff --git a/leetcode/lc-1700-students-unable-to-eat.rkt b/leetcode/lc-1700-students-unable-to-eat.rkt
new file mode 100644
index 0000000..75cc243
--- /dev/null
+++ b/leetcode/lc-1700-students-unable-to-eat.rkt
@@ -0,0 +1,36 @@
+#lang racket
+(define/contract (count-students students sandwiches)
+ (-> (listof exact-integer?) (listof exact-integer?) exact-integer?)
+ (for/fold ([sandwich-pile sandwiches]
+ [student-line students]
+ [remaining-students (length students)]
+ [break? #false]
+ #:result remaining-students)
+ ([i (in-naturals)]
+ #:break break?)
+ (cond [(and (empty? sandwich-pile)
+ (empty? student-line))
+ (values void
+ void
+ remaining-students
+ #true)]
+ [(equal? (car sandwich-pile)
+ (car student-line))
+ (values (cdr sandwich-pile)
+ (cdr student-line)
+ (sub1 remaining-students)
+ #false)]
+ [(and (not (equal? (list (car sandwich-pile))
+ (remove-duplicates student-line)))
+ (= 1 (length (remove-duplicates student-line))))
+ (values void
+ void
+ remaining-students
+ #true)]
+ [else
+ (values sandwich-pile
+ (append (cdr student-line) (list (car student-line)))
+ remaining-students
+ #false)])))
+
+(count-students '(1 1 0 0) '(0 1 0 1))