(define (count-increase text-port previous count) (let [(line (get-line text-port))] (if (eof-object? line) count (let [(number (string->number line))] (count-increase text-port number (+ count (if (> number previous) 1 0))))))) (let [(file (open-input-file "input"))] (display "part 1: ") (display (count-increase file 100000 0)) (newline) (close-port file)) (define (count-increase-sliding text-port triplet previous-sum count) (let [(line (get-line text-port))] (if (eof-object? line) count (let* [(number (string->number line)) (triplet (list (cadr triplet) (caddr triplet) number)) (sum (+ (car triplet) (cadr triplet) (caddr triplet)))] (count-increase-sliding text-port triplet sum (+ count (if (> sum previous-sum) 1 0))))))) (define (read-number text-port) (string->number (get-line text-port))) (let* [(file (open-input-file "input")) (triplet (list (read-number file) (read-number file) (read-number file))) (sum (+ (car triplet) (cadr triplet) (caddr triplet)))] (display "part 2: ") (display (count-increase-sliding file triplet sum 0)) (newline) (close-port file))