aboutsummaryrefslogtreecommitdiff
path: root/09/1.rkt
blob: 6623096e5b03ac536730ddf18d7c9c8b63801884 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#lang racket

(require "../lib/utils.rkt")

(define lines
  (call-with-input-file "input"
    (λ (fp)
      (get-lines fp))))

(define (parse-data line)
  (map string->number (string-split line)))

(define data (map parse-data lines))

(define (diff lst)
  (let loop ((cur lst) (ret '()))
    (if (or (null? cur) (null? (cdr cur)))
      (reverse ret)
      (loop (cdr cur) (cons (- (cadr cur) (car cur)) ret)))))

(define (predict lst)
  (if (andmap (λ (x) (= x (car lst))) lst)
    (car lst)
    (+ (last lst) (predict (diff lst)))))

(apply + (map predict data))