aboutsummaryrefslogtreecommitdiff
path: root/09/1.rkt
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-02-25 20:11:54 +0800
committerMistivia <i@mistivia.com>2024-02-25 20:11:54 +0800
commit515ecbf5a20a8e432a998b0a543bedcb1bd64cf4 (patch)
tree6353c603a8cf0276553f420205f8d1c730a318ce /09/1.rkt
parente191b610c11326b587cf0b01fd6fc37b8d07bb19 (diff)
reorg code
Diffstat (limited to '09/1.rkt')
-rw-r--r--09/1.rkt27
1 files changed, 27 insertions, 0 deletions
diff --git a/09/1.rkt b/09/1.rkt
new file mode 100644
index 0000000..6623096
--- /dev/null
+++ b/09/1.rkt
@@ -0,0 +1,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))
+