summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x5.scm54
-rw-r--r--5.txt214
-rw-r--r--5s.txt34
3 files changed, 302 insertions, 0 deletions
diff --git a/5.scm b/5.scm
new file mode 100755
index 0000000..39929d3
--- /dev/null
+++ b/5.scm
@@ -0,0 +1,54 @@
+#!/usr/bin/env -S guile -s
+!#
+(use-modules (ice-9 regex)
+ (ice-9 textual-ports)
+ (srfi srfi-1))
+
+(define (read-lines port)
+ (letrec ((loop (lambda (l ls)
+ (if (eof-object? l)
+ ls
+ (loop (get-line port) (cons l ls))))))
+ (reverse (loop (get-line port) '()))))
+
+(define (split-up nums)
+ (map string->number (filter (lambda (x) (not (string-null? x))) (string-split nums char-set:whitespace))))
+
+(define (perform-mapping val map)
+ (let* ((mapping (filter (lambda (x) (and (> val (cadr x))
+ (< val (+ (cadr x) (caddr x))))) map)))
+ (if (null? mapping) val
+ (+ val (- (caar mapping) (cadar mapping))))))
+
+(define (perform-all-mappings val maps)
+ (do ((i 0 (1+ i))) ((= i (length maps)))
+ (set! val (perform-mapping val (list-ref maps i))))
+ val)
+
+(define (parse-next-map lines)
+ (let ((map-started #f)
+ (map-parsed #f)
+ (current-map '()))
+ (while (not map-parsed)
+ (if (and (not map-started)
+ (string-match "map" (car lines)))
+ (set! map-started #t)
+ (when map-started
+ (if (string-match "[0-9]" (car lines))
+ (set! current-map (append current-map `(,(split-up (car lines)))))
+ (set! map-parsed #t))))
+ (set! lines (cdr lines)))
+ `(,current-map ,lines)))
+
+(let* ((port (open-input-file "5.txt"))
+ (lines (read-lines port))
+ (seeds (split-up (match:substring (string-match ": ([0-9| ]+)" (car lines)) 1)))
+ (lines (cdr lines))
+ (maps '()))
+ (close-port port)
+ (do ((i 0 (1+ i))) ((= i 7))
+ (let ((res (parse-next-map lines)))
+ (set! maps (append maps `(,(car res))))
+ (set! lines (cadr res))))
+ (let ((locations (map (lambda (x) (perform-all-mappings x maps)) seeds)))
+ (display (fold (lambda (x y) (if (> x y) y x)) (car locations) locations))))
diff --git a/5.txt b/5.txt
new file mode 100644
index 0000000..6cfa866
--- /dev/null
+++ b/5.txt
@@ -0,0 +1,214 @@
+seeds: 1044452533 40389941 3710737290 407166728 1552449232 639689359 3327654041 26912583 3440484265 219136668 1126550158 296212400 2332393052 229950158 200575068 532702401 4163696272 44707860 3067657312 45353528
+
+seed-to-soil map:
+1953514507 1808056938 198190267
+3721110896 2006247205 109062451
+1046714200 3920284337 339096560
+965003502 2389762347 16609477
+1946017538 563731936 3971811
+2151704774 1532707249 120594830
+1385810760 3525158 560206778
+1949989349 0 3525158
+3830173347 2115309656 274452691
+0 567703747 902873308
+2272299604 2471473045 1448811292
+902873308 1470577055 62130194
+981612979 2406371824 65101221
+4104626038 1653302079 154754859
+
+soil-to-fertilizer map:
+131659986 0 297180572
+86587273 297180572 45072713
+1582904051 2761968868 319965883
+2557550592 597853135 123775334
+3043086384 1215510442 38848367
+2396751907 437054450 160798685
+2705233686 1278266569 337852698
+2681325926 1254358809 23907760
+437054450 1616119267 1145849601
+0 342253285 86587273
+1902869934 721628469 493881973
+
+fertilizer-to-water map:
+467642512 2808058179 217483684
+2526131270 1651737021 215776571
+1565499377 511818960 6051670
+3343480207 1867513592 514593
+2798489883 3734797658 14675956
+3857697742 2589503758 214253670
+815171875 1987566640 37566751
+247326358 0 171803249
+2084427309 467642512 44176448
+2958404070 2075919098 113827599
+3343994800 3944730705 350236591
+2741907841 605954073 56582042
+1964888854 1868028185 119538455
+2128603757 3025541863 190296071
+0 171803249 247326358
+981208417 1018163709 584290960
+3339179456 2803757428 4300751
+3072231669 789607411 154371749
+685126196 2025133391 41962236
+852738626 2067095627 8823471
+1698622343 943979160 74184549
+1772806892 3215837934 192081962
+3694231391 3749473614 163466351
+3258394158 1602454669 49282352
+1571551047 662536115 127071296
+4071951412 2366487874 223015884
+2318899828 3407919896 207231442
+2813165839 2310334853 24650075
+877578219 3631167460 103630198
+2837815914 2189746697 120588156
+727088432 517870630 88083443
+861562097 3615151338 16016122
+3307676510 2334984928 31502946
+3226603418 3912939965 31790740
+
+water-to-light map:
+643811272 144875370 639662384
+3197353303 4064611747 230355549
+2428135249 2178155112 85507014
+2589388740 2163836443 14318669
+2641064681 3116679588 24929315
+1947728375 0 54427824
+2665993996 3141608903 36865900
+1660679363 2591737738 11969671
+3807776623 3220207966 248700485
+347509555 54427824 90447546
+0 2336205674 208134837
+3722035899 3726277139 85740724
+2002156199 1341605129 169698758
+4056477108 3563548228 162728911
+208134837 1511303887 139374718
+2513642263 1710884259 75746477
+2702859896 3468908451 18878500
+3427708852 3812017863 252593884
+1283473656 1786630736 377205707
+2736208594 2641064681 461144709
+2238047311 784537754 190087938
+1720046261 974625692 167476460
+1672649034 2544340511 47397227
+4219206019 3487786951 75761277
+1887522721 1650678605 60205654
+3680302736 3178474803 41733163
+510500649 1208294506 133310623
+437957101 2263662126 72543548
+2721738396 3102209390 14470198
+2171854957 1142102152 66192354
+
+light-to-temperature map:
+523464332 2485592576 7655734
+1306479498 3401177698 44583163
+72682795 2493248310 40062854
+1351062661 10924544 136936144
+1950759356 374811960 103408928
+1628354042 1079719374 5733623
+4278168745 4150271912 16798551
+1634087665 867706665 116014557
+112745649 147860688 85469942
+1487998805 1432016565 15767141
+46512214 3323202074 26170581
+198215591 1822839586 82352133
+1503765946 1905191719 124588096
+2320905962 233330630 141481330
+34455944 855650395 12056270
+945527000 2533311164 65423823
+1010950823 1238767929 68991034
+2089724509 1085452997 153314932
+4150271912 4228943070 66024226
+2923124195 1307758963 124257602
+3063630615 2029779815 155675415
+2243039441 3263624618 59076159
+0 2185455230 23531400
+1079941857 1447783706 219106104
+4216296138 4167070463 7178707
+3219306030 2208986630 276605946
+3814380111 3322700777 501297
+23531400 0 10924544
+280567724 2598734987 242896608
+3501210985 2841631595 313169126
+2462387292 478220888 358639145
+2054168284 3349372655 35556225
+1750102222 1666889810 91833237
+1299047961 3451860467 7431537
+3047381797 3384928880 16248818
+3495911976 1758723047 5299009
+2827126043 983721222 95998152
+4223474845 4174249170 54693900
+2302115600 836860033 18790362
+2821026437 3445760861 6099606
+531120066 3459292004 355589404
+1841935459 3154800721 108823897
+886709470 1764022056 58817530
+
+temperature-to-humidity map:
+2018290756 3339896462 24416138
+2758197106 1920240630 127305443
+1435979012 3212189099 87605129
+1769136092 2998937118 64911939
+3618781885 4020815132 64754456
+2463559257 2553699148 87957011
+3338671715 2945268602 53668516
+1346451950 4085569588 31754584
+2333003205 2227115482 79041240
+3021969750 3172189648 39999451
+3240436817 2192137296 17307942
+1418308768 2209445238 17670244
+357589270 447365191 170229577
+2551516268 2811272034 55795229
+2412044445 3120674836 51514812
+2155360081 4117324172 177643124
+3888375100 1524919566 145384982
+550058871 314116828 30128840
+2885502549 2867067263 78201339
+2963703888 2344871065 24585358
+4157684401 1782957735 137282895
+4033760082 3736328042 120993236
+3257744759 2142598135 45143696
+3392340231 3063849057 56825779
+2042706894 1670304548 112653187
+1523584141 3515198209 20686539
+341412066 830731292 16177204
+580187711 723815388 106915904
+3883979635 2187741831 4395465
+1378206534 3299794228 40102234
+764927838 617594768 20034273
+3449166010 2641656159 169615875
+1544270680 3857321278 163493854
+2988289246 2108917631 33680504
+687103615 645991165 77824223
+1707764534 2047546073 61371558
+527818847 344245668 22240024
+4154753318 2341939982 2931083
+793324235 393780930 53584261
+1834048031 2369456423 184242725
+314116828 366485692 27295238
+784962111 637629041 8362124
+2607311497 3364312600 150885609
+3683536341 3535884748 200443294
+3061969201 1346451950 178467616
+3302888455 2306156722 35783260
+
+humidity-to-location map:
+2289569155 2295914330 132474891
+3336845004 3857582618 604013
+137201536 465156883 67111840
+0 54072971 10834440
+2613787395 3979038278 315929018
+2929716413 2499280923 31840158
+2492935748 3858186631 120851647
+3337449017 2531121081 957518279
+1119175103 926319928 393815858
+220477639 0 54072971
+2975037529 1934106855 18186723
+2422044046 2428389221 70891702
+1934106855 3488639360 355462300
+867655257 658635819 251519846
+467405785 64907411 400249472
+204313376 910155665 16164263
+274550610 1320135786 192855175
+10834440 532268723 126367096
+2993224252 1952293578 343620752
+2961556571 3844101660 13480958
+
diff --git a/5s.txt b/5s.txt
new file mode 100644
index 0000000..64accf6
--- /dev/null
+++ b/5s.txt
@@ -0,0 +1,34 @@
+seeds: 79 14 55 13
+
+seed-to-soil map:
+50 98 2
+52 50 48
+
+soil-to-fertilizer map:
+0 15 37
+37 52 2
+39 0 15
+
+fertilizer-to-water map:
+49 53 8
+0 11 42
+42 0 7
+57 7 4
+
+water-to-light map:
+88 18 7
+18 25 70
+
+light-to-temperature map:
+45 77 23
+81 45 19
+68 64 13
+
+temperature-to-humidity map:
+0 69 1
+1 0 69
+
+humidity-to-location map:
+60 56 37
+56 93 4
+