#| Babysitter Kata Background ---------- This kata simulates a babysitter working and getting paid for one night. The rules are pretty straight forward: The babysitter - starts no earlier than 5:00PM - leaves no later than 4:00AM - gets paid $12/hour from start-time to bedtime - gets paid $8/hour from bedtime to midnight - gets paid $16/hour from midnight to end of job - gets paid for full hours (no fractional hours) Feature: As a babysitter In order to get paid for 1 night of work I want to calculate my nightly charge |# ;; doing this in guile scheme because they said i could use any language, and if ;; i'm gonna be writing code on saturday morning its gonna be lisp :P (import (only (rnrs base) assert)) (define +max+ 4) ;; can't work longer than 4am (define +start+ 5) ;; can't start before 5pm ;; times are represented as a pair of (hours . minutes) (define (h time) (car time)) (define (m time) (cdr time)) ;; if hour is > 1 && < +max+, add 12h to account for midnight rollover ;; (always call this on end time) (define (handle-midnight time) (if (and (>= (h time) 1) (<= (h time) +max+)) `(,(+ 12 (h time)) . ,(m time)) time)) ;; round-* functions return just the hour for simplicity, but ideally these ;; would operate on a