about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2022-12-09 18:32:25 +0100
committerLeah Neukirchen <leah@vuxu.org>2022-12-09 18:32:25 +0100
commit885fad8aa91cd7db112d49aefc6d50621c32716f (patch)
tree0c4ae7f0a8b18fbbea09fdd17069f98203686bd7
parent4a49127af3b9fb548dbfa5c55fdc8e15b180eb80 (diff)
downloadadventofcode2022-885fad8aa91cd7db112d49aefc6d50621c32716f.tar.gz
adventofcode2022-885fad8aa91cd7db112d49aefc6d50621c32716f.tar.xz
adventofcode2022-885fad8aa91cd7db112d49aefc6d50621c32716f.zip
day08
-rw-r--r--day0899
-rw-r--r--day08.k3
-rw-r--r--day08.rkt61
3 files changed, 163 insertions, 0 deletions
diff --git a/day08 b/day08
new file mode 100644
index 0000000..785f6e0
--- /dev/null
+++ b/day08
@@ -0,0 +1,99 @@
+101002200302221033023303143134003020403131311534441424251301311211314032120023113231033031121022011
+000000201330102222312340313324430424413214435242113342242434514432041413213343304030120232213020102
+010000203232213031433114342021403232235333514333553111322134215441434143114041342040010222003200011
+201120030122210332140433403113122131244442241135435342113515341543341343142312131142111133212030212
+102222201221120143442131002141522315514253432414212415252133341422341353034001030100033222300111111
+121102223123133443003222043412143224143335142344513313134225453143435255411141013220230131131103220
+001113200123030444213411141214335523335333534154243113221355254515244442254124002044421400233210010
+110103213102123332202242154123512313351111234166565435351154333252135532152130134301110311011211302
+202210200232024303040121311534141553542265444265636563223452433241214155443145244322333331220130021
+311321020104411241422115232552455355223632332662654636255644333321432523545314210123114112022121202
+222002132341041021001451442245143233564442235333245652526562422434515153555514555434223101320132320
+012330123123141204422541513243454542553522546663646433355336545446455311231412535553131322133211112
+221020042122012412514131344114346532626463563556224633256642443366425455121512441453010231033211133
+332033424242124441354515425455263244464236244225445544325265663643264335515552445211224403010100310
+030311420043214251151555343264543446453446552646733662422253465425563224633342525545450000211134232
+133130242134014131114123322632555364662426753737446646475562363245344344452314544451115100103124211
+010241031411233332141421664544623522355767756747554554747757666264354245633431233234531112142010000
+032200414320445341121222366366536655363775663475543654367763436632366656252654425223554320030244023
+100312204312544442231224422656636343643666666675437535763634446467552325246643265513544155011313414
+224200324014345533246524254552547477646677554437567554337355755446755334623236365331343231024211422
+033313133343534535442526235566556757756376445547773754345356657367535536454223645252453342101312232
+014214311423213321245644363264673667435545337543647756777577353345733666342643335553134311523334310
+433012115243133522264542435556563337454353635845778758545734666374637354763652326265532341134234010
+122104225233125212546633243745466643765468465558687657485774737446654743732535366535234121125424032
+204422031225321235542565463563676654365748455655554855875447656357557557553564355522251545122120414
+104030155235414325532425576445546567668547857674866766557768587675345755454524663452432145531304002
+433201242123126354333256673757544348684646787646657846685878846678477736547744545443362515111430002
+421041533111312262353644534644765667864485488887876654464654665486755377755356532333562554413540432
+342132214445526355546434337565344654655444658854445646855468648464874347744635352463235535235421003
+222432351445342522443766645456676656776867887889896877875754784787546635745633765324264433333551223
+341212355142466246464534667453446875455885986995966865976564675747584763576337373532355453154423412
+414423452431252544553637745358445755855869665699958857986985775584484587767664443655566454352331120
+331215421413552422267473475374764764685968687855585566867657585477656745667376557663644634513533254
+141521331136665233544534743877458854586759789577787777878566877976454647447747733666555522535352251
+402144545565566445336477735645686455987955977976986897797959998564448556455676776442342252552521451
+322442131336445645474737578875588748678578675776975869885577996779444458486775646674445543542124334
+003241123534254267466637376887768457676676697687767866888676895686968878848835646576663666545432111
+234333144534365657733346788857655988779985696798896978698598888876655458486736676576434555325322325
+033552244452442344756445574878458788978579767688788877779988976889865655445866355444755456364252412
+045212224265223274466546745678787779868966769796779996688776788997588766768566653733542466332343212
+022345335335622575577377665548779887775887668866967689898976679598597977564865565676552665532252433
+124424326262234276464756765868756565759887879677666689797988796776968864654566663767726322324124335
+333235323262262774735557685448988678797797668789888699889789979858656855774878653676666634655531341
+424333343566654656357438457485875989579778669668898998866878867779978654788886774367636526533252225
+415125222443226566336488555748579996699698777779888777798979989765676998674856437637353652266454354
+352445544426323443664578765568777867798698798797898998876679686986759578786745736574633332255424325
+234414146454465754353766676787665695889898688889799998979699988898879958587847734733456456546445213
+253423343266262636346545784545955997786868689787777888877989878667585988554475745545464666246345255
+223344452632624554335577685647698768667799967878779989777676967798899578558744854574747232646433315
+323143554223367457566474647879967975786699778989879879989898896767757786678775547767465565642312542
+453333425665457354663758546689578757986968687979879987979786897878578778558764873445465456444554251
+155241123442465734343774685765569588776788977988999898777967666866598756658647635644333635325524324
+133324323353235556775356684478588589688899969988787797978967799889667778488858574745533345265415432
+133433465463254577643484465878597856769979997797877989877976896969996799855585466476573354552411331
+322142442345334767374787688576777897796868768989777997787767697699997566868745535447346265543441455
+334123333556324657343574547669589758777898966977799899896987686797899798466557773536632423622355555
+252411345622435455733376748766597586798899988899787799866969666997598966844867765636372634226515431
+151451422566464676476636547768757596689778699796978997868699677765865767487847755454345544253541243
+241522424344532733447477666686899766556969789978797986887979976685588974646546376573463425453144442
+414153442333535675773778676465857568699869669979798878799699987555578544654866655766355464256143434
+254535114546225443653565564468588956985676686799687868668969677759799544785465437745366532254235544
+242354325525625246745576475877646586859558986979977676788989969868686685585574645776626326624152314
+311534354442664567445645456546887875578685886896868888778995555587868655487466666734642465562551342
+002211144542443356445646675767857767788697589869678789696659999887964585784844754653622362431441151
+321444222136434263753573364864445668989879955758697979559578965668845546758456377667636425635512435
+414532112334525645777645364755584566557779787975679695558987865866785684465356447773463436335142124
+031344233134526256667673555464868564656878988979998868666676959687487848847374753332446352421433230
+033414314236345666365347334576457447479979876959976796697989878876845844877346675432432545345335111
+223234514233244546235744434764588774445585595867867967979958876756686776747444433756462224514313130
+034354325554623636456367743544848648668869978989756578576878558576448675345736576332464452532335404
+333314415414336544645473564754765775745445998599878869766776785445665883745666543445236422534254343
+010124352335143245623535734775575868768457445896887988785744846678545657565366664436462333352114420
+241133243154345423423255773635648554845867764484448485764485687547646634676644634466423212541145312
+144323242255213222655427634775767456477656885488677655667865776854846364533353433622362243343123130
+300121513332133346652524546544554657846788487754577484485476445856537556455366326344443253531244041
+214312313412252446224434245656574644854775458585756885886757548546376564453624436535431411344442441
+344413254252322432546665356466536346455488854547546677556747685543743366537445433643315232412504023
+030420125114122234256653334466366437674664466777764545468744766663566333665553255266154254345444421
+201022041343111332264235342277534444744733675444554744888635745554563756363264366244234521125431143
+310101422412112412564453556665535356375565736473373764446357574757477663532553444551433143140032240
+012314020152242145455646464446435574447466754663444663635667635447474466354626635343323553204203443
+301431002405324343435445225364363665573647453443457376344534655734744645626433554455413541101031210
+220402234402321244123522323565664673457656366554777543476673677437665464342236224222241525244012343
+220413243141534321333134422233522646445365544774576465633777457645452462264364422521511214321414141
+132141004144343445425341422356543254466645567446756557773334777235533435444561522153115533032340122
+103320433201024354323412453646353445225544357655543544744544433555545632335324333523314131010244103
+120000103420114333412252226262424253356432654542437554352625536654452456453415255241241141213210301
+230111133023321345242332554223645255622442243546353532232263224265253656423424442512332241113030012
+012002204104404423142222435245362563453526446562334552352242626533532663145221123423411140404113320
+133132301104434132213122523451216645666342442525664663356233663355434224331132321242424042020300010
+300231011102122014443143353352244166655656365456622444622563466362355333112242211003402201113312131
+131113313033421421004254454232251141536335223326242246444432526552154551545414220312100320203333130
+003102322130011220131211452522433142255236443652565643264342211255545111112515532343240204112100111
+123133331310024423412433454313542233234224542223452553553512331141534342314224343121244143312101102
+122232320002101404113223133225112114533212125134253312412213451454333424514233200042430112130222232
+011003112002012034340041324422224354112355545251413535512312452115342144411141020000324121133331211
+110222203303002103314434412231554151352351455233215445523441215221313240230030321334321131320033200
+110202122210001303002442001413413542523211141353543531115315334551133023131104242032323233333112222
+110120101211020201230001300132340142214214554553131253415234133311121310214320100143302113213302021
diff --git a/day08.k b/day08.k
new file mode 100644
index 0000000..6788c7d
--- /dev/null
+++ b/day08.k
@@ -0,0 +1,3 @@
+s:{(4-y){+|x}/x@y{+|x}/(0:"day08")-"0"}
++//|/s[-1>':|\]'!4
+|//*/s[{x(+/|':&\>/:)'1_(1_)\x}]'!4
diff --git a/day08.rkt b/day08.rkt
new file mode 100644
index 0000000..25cf4ef
--- /dev/null
+++ b/day08.rkt
@@ -0,0 +1,61 @@
+#lang racket
+(require math/array)
+
+(define data (list*->array
+              (for/list ([line (file->lines "day08")])
+                (for/list ([digit (string->list line)])
+                  (- (char->integer digit) (char->integer #\0))))
+              number?))
+
+;(pretty-print data)
+
+(define visible (array->mutable-array (array-map (lambda _ 0) data)))
+
+(define height (- (vector-ref (array-shape data) 0) 1))
+(define width (- (vector-ref (array-shape data) 1) 1))
+
+(define (visit x0 dx xmax y0 dy ymax)
+  (let ((highest -1))
+    (for [(x (in-inclusive-range x0 xmax dx))
+          (y (in-inclusive-range y0 ymax dy))]
+      (let ((v (array-ref data (vector x y))))
+        (when (< highest v)
+          (set! highest v)
+          (array-set! visible (vector x y) 1))))))
+                                
+(for* [(y (in-inclusive-range 0 height))]
+  (visit 0 1 width y 0 (add1 y))
+  (visit width -1 0 y 0 (add1 y)))
+(for* [(x (in-inclusive-range 0 width))]
+  (visit x 0 (add1 x) 0 1 height)
+  (visit x 0 (add1 x) height -1 0))
+
+(array-all-sum visible)
+; 1849
+
+(define (score index)
+  (let ([h (array-ref data index)]
+        [x (vector-ref index 1)]
+        [y (vector-ref index 0)]
+        [right 0]
+        [down 0]
+        [left 0]
+        [up 0])
+    (for ([wx (in-inclusive-range (+ x 1) width 1)]
+          #:final (>= (array-ref data (vector y wx)) h))
+      (set! right (+ 1 right)))
+    (for ([wx (in-inclusive-range (- x 1) 0 -1)]
+          #:final (>= (array-ref data (vector y wx)) h))
+      (set! left (+ 1 left)))
+    (for ([wy (in-inclusive-range (+ y 1) height 1)]
+          #:final (>= (array-ref data (vector wy x)) h))
+      (set! down (+ 1 down)))
+    (for ([wy (in-inclusive-range (- y 1) 0 -1)]
+          #:final (>= (array-ref data (vector wy x)) h))
+      (set! up (+ 1 up)))
+    (* up right down left)))
+     
+(define views (array-map score (indexes-array (array-shape data))))
+
+(array-all-max views)
+; 201600