aboutsummaryrefslogtreecommitdiff
path: root/racket/leetcode/lc-1700-students-unable-to-eat.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'racket/leetcode/lc-1700-students-unable-to-eat.rkt')
-rw-r--r--racket/leetcode/lc-1700-students-unable-to-eat.rkt36
1 files changed, 36 insertions, 0 deletions
diff --git a/racket/leetcode/lc-1700-students-unable-to-eat.rkt b/racket/leetcode/lc-1700-students-unable-to-eat.rkt
new file mode 100644
index 0000000..75cc243
--- /dev/null
+++ b/racket/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))