diff options
| author | Mistivia <i@mistivia.com> | 2024-02-13 14:44:03 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2024-02-13 14:44:03 +0800 |
| commit | 60b0586ddc42cd8060e796e61267fc63a4397712 (patch) | |
| tree | 4cfd965df09da7628012f7d0650d5140d122900f /advent-of-code/2023/05/part1.scm | |
| parent | 02e5b2a4bf9fee71792ea1431a55bf36996dbc67 (diff) | |
refactor scheme to racket
Diffstat (limited to 'advent-of-code/2023/05/part1.scm')
| -rwxr-xr-x | advent-of-code/2023/05/part1.scm | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/advent-of-code/2023/05/part1.scm b/advent-of-code/2023/05/part1.scm deleted file mode 100755 index 5413bf0..0000000 --- a/advent-of-code/2023/05/part1.scm +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env guile -!# - -(use-modules (ice-9 rdelim)) - -(define port (open-input-file "input")) - -(define seed - (let () - (define nums-str - (string-trim - (list-ref (string-split (read-line port) #\:) 1))) - (map string->number (string-split nums-str #\space)))) - -(read-line port) - -(define (read-line-convert-eof port) - (define line (read-line port)) - (if (eof-object? line) "" line)) - -(define (read-map) - (define (loop ret) - (define line (string-trim (read-line-convert-eof port))) - (if (= 0 (string-length line)) - (reverse ret) - (loop (cons (map string->number (string-split line #\space)) - ret)))) - (read-line port) - (loop '())) - -(define s2s (read-map)) -(define s2f (read-map)) -(define f2w (read-map)) -(define w2l (read-map)) -(define l2t (read-map)) -(define t2h (read-map)) -(define h2l (read-map)) -(define maps (list s2s s2f f2w w2l l2t t2h h2l)) - - -(define (gen-mapper the-map) - (define (mapper x) - (define (loop the-map) - (if (nil? the-map) - x - (let () - (define cur-map (car the-map)) - (define target (car cur-map)) - (define start (cadr cur-map)) - (define len (caddr cur-map)) - (if (and (>= x start) - (<= x (+ start len))) - (+ target (- x start)) - (loop (cdr the-map)))))) - (loop the-map)) - mapper) - -(define mappers (map gen-mapper maps)) - - -(define (comp-func funcs) - (define procs (reverse funcs)) - (define (comp-rec arg) - (if (null? procs) - arg - (let ((proc (car procs)) - (rest (cdr procs))) - (set! procs rest) - (proc (comp-rec arg))))) - comp-rec) - -(define (find-location x) - ((comp-func mappers) x)) - -(display (apply min (map find-location seed))) |
