This commit is contained in:
Dory 2024-03-10 22:30:24 -07:00
parent 6fc5cf34a4
commit 343d09f460
5 changed files with 177 additions and 0 deletions

7
day8/Cargo.lock generated Normal file
View File

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day8"
version = "0.1.0"

8
day8/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "day8"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

99
day8/input.txt Normal file
View File

@ -0,0 +1,99 @@
323312120104041101003001553044055322145351354433645660555433454202452204412052502421011342410230100
331223314040220223001130433220004441042006330461143461335633613314213000015223153233240331142300012
023102231103100342321215533524330225130560305625124623310126454152020030305335002210044012323422232
033211114433402023241334421151326235424122515414424161565116453111213321055111200550233444040333323
031320412113341012010242000135046256344463444305066152423440545620430235453525520134521220144043130
010124340443212543345333321333301441655163125534010352005641320662142112543221425142532404413320002
032312034332435412243231103121245340611134410006433546515216241603224333504015201503140034044432021
320200344413202332231554246602660034061050643672316237416266543042042653101335352044243134331323303
021300102204043340554035441662023251216477627653211774256145300615432406261511620233045011441203023
214221412130421304035463335360514215534123522725272245137776312134526215216203521523534253001441422
420043232030231215456256414206036653347362132153333156552344113453564204615313111314105214221003223
241014245200324505163302204145552154121123441333614641654374366443635062610615660400505253511330311
231411122124035056146223662646715423323763562152711313214722174623631122416546336265504022423420321
042134415425335411142551632217112111473327114471514114442336163742155647750445640460531524541203340
343034551205503142350464162224754743123535251535665351452621461253234473323031250306005520215303040
410130220425226615062361272722422212213362652886842457443563446376627357725562240530656421332425231
330405053401450540006525751276462213552438775622853762648444675762737115273314256401440500101434302
304122334204441123350414175256673644342865574663385723585576354377456151273122601662220161301504112
422435205014554545365735723436373233832475876524575872268832223848512552555643351604546205341424215
443115513525431203264315523331217625862645482563537776356753567584283413472356644126410362312334123
052022430460332345152212254167524466648262435238422282347263726486242532216231573303203326333131543
404311335435645624675123354136583324744857778885726358668585255832473858653735421124234313332210004
520111321123045340623442334624735877337545859497694367639273762375345722536177411211020042150153021
411235141221544066661746224736774624232459373766373495575944484527562783724767432624400142054055522
024120413051264413175435475422366266524638499844474853789334849464538454233333357361304324422613501
352214454643240574661363763475756533743797783848433976887696359992333666675226733442545524354500443
251345503313114376116272866687526585434388584575674356595674465655476743763543124147356110122024044
133110654322616733231668722725373876835778466784566584387395434396884778345524117356166460636143351
112230445513242554663324764556586867753674864468343933678664667973977485428425757277634522562064320
412306136011573262177765432437358738546736839846997485567376574548587838746648241232635661362635551
311241644325164361477854453554348537943884446578656447795556786443464445568375622146223253430106005
414462311300441254474772486749467753538794788465984797676648668849664495546568855562445764261642010
445133603633532623526886852476968663955448979964894644847777557664794864337536578317645124263315442
021241645421162453132262365348765439348656776856595854754476769757566455663276324366766456305305120
510244461256441623866724589378887569656684895495456487696769566643875787347426424523647565754401653
151145124011265333234662229795656686884674575478956878676685556556946338775266677877143733665060552
131002165277346618257378696764537399445797598957895796889759879556485735764887363865111323236124503
220611453676274277858565456484455695655979579759955677959885995645474566676772536632553114354340041
323335253242622148532422868466345564965967686989886957689558546964794339796466254345247754360223316
112064463545413576425378697983496684567756967695578787779885776765545968768637752578574116433630421
262635257577314368832689586734395956986977797785985896558768958559955796869794344738811241365425065
036254031317172762245555787683749657559987756669998856989597798769664563473786885472827134423313506
112502266652465672888368949558445769459577569797855698786769989985987785676547473444272672141252544
045215646223371643352336896643689688876655959565996855669678688486694743366369623465327522575042356
205562422736764236882339845435688999868789977579698799868877976745688897678798344673376264654052604
640616321667131656568746868646446794765955968978766798777975879944949447436547952777356562624565361
503133645662433253222235564587874595496598558678699667976697595767948945736786373476844144136233155
152313252157252347426379766989467986779887556669696688689579876876596876558577966523563177643114061
015365066657673648536298976339575598578756896788969879767577686654749477584746873347542574227516230
302516211647152355274343639744655874775669596897686966699876695998787469759645835454545677723745465
266163561235542776842433383799598975897978899879789767676699785678664666798579564534878747126146153
634140631567256667662664934564476759588897588797699869877796899585469988739654868456635123523755234
526164653667775855733559449364494974596968858678799696797985695999575786597999333727844531513343544
115403464653622458323374663594975966866888697766687979997898875955786785736875844627521437353606304
640206337252276334632475883969765797699957959997976897898769896775474877959677374487863614742211222
106034313777637748437776995547694868569869859888896977797665956948986945796495667868436477373160314
006143515575426735835789383997647997666658866898869877859765667898455643998988843284334411112325061
060213154573543438565356383379984957565858775655687688855799695465677553374667278462773177353503021
534112106512613276556555984466559658455977888698665968969989598677796459965554455385335454425613431
423425206422713575644746337955366575454795967856856876586957554899648773967935667584344176377532425
315510242114177262757639877363694484999758689789879599886867745964475568777854454352517415741562052
254415451471443426858387939443978767549948877565555768796577696468685835375388876547331566530141542
303202343156475546746672434475949695576445897955568899665665785796494455593633835634447131551412543
530640543251355257253244866999758855497944665987986659888747567449665534577874222676576617430555625
035226003425623774544664764845838347558577759648579987787884744479479884357976856228167235705641542
012530303425724762454645575734538738897469478966696978758788679866348589899832555641531652553533310
431520564223363131574588328444453968694548987546469759466967869587993958848677622834372746605252324
131024531432663176288887647869436593765656667475894545486664448575468585944778464554223653360402652
551654340156114412778738226397776454595784788647965555996665676344574743382638772356734133042615443
024355434261535345548273336774384984477576879774784456784868644637765744738364526332565760044560540
155113230232747546753685543766476666768567676894864479768956459393759573342483687447324136430444500
440336611600246742643243587242836576774688377798976584555359856436455842274266466561462502505050311
015501455202457152271777448623885744575738975738543495886575536689489232583347854551274740450542500
112355455505514326761438726267648488556885859557845836789874856463364248667756746144136240330222401
430051415453434173737573386277526293849897978657467838347963744587834677342423717341756610043455255
444113312134554163124414283335326283887438687965973966654788943867635532444353372724432652622302125
033012131053460465125111273742768667769675675775436398594585954535426388764627242656605623003420535
532011006562506121567537614332848223752545648784336666978759658235586323586276363263554554402535155
225043145666651226342224774572478338454285536637433467599546254373462838314454715765242604264433432
143342003654424145134151113142525853753886774346442435733753462268623254516141462445566062114320251
444420540521256141013447675222256426635324487526632736745527642885674235536747737261652463202500555
222431405032506222504344543644653776575736336844778763733528588764848657567376356150063166013552501
034510422056636225624747266514456777633233775555386632488454864657717533631241666065420200205052500
103105455224503224304034177327635111647827276665752827282575886784253656562365122244424151025515301
101102203425121661104345642122736177478284778325375873527465777421741567742166564045604510141154121
332242401534421133554041122533563354755216642533436868343877635122146146667706230365422105012153402
432103353112023141120633555353651647171735573773567775173731563436215115735654456154234331555345240
311201403135204156305310465662641267265251523134647455137635637621766373241145212506405302221022004
221411412415305356354132634130374733663416232631657355257255546777623360525504041204002524135430312
112411441314100543355310054325527735473745551311261276366344472654631261140112663455454513102400244
013012011123153452314613460031161542746223115713547637621711265172533165260520404042554414322034013
201330012335124150152314410164151235026663366233372131265564532262110563062500635222224450514021440
342111222034352424040354160440340405301651622677574134133735403132430514114033551354315433040230114
112010023301100445223113160555302602635620463156162543530556141321431263425255250524151354433130344
332330330010343221124140132242255256316545654313060323031636355342510224333220335454325432312040232
231131200414441021404115411126030522302652306460121060224031660650605423613101532204404042041104211
110213044340333244505210244013344303254465010502545450101621054023246053340412123410522324133332123
001010311033004234122205300341243461144265623424563511436115050502162552302441545001031211431213203
110302001002203213045154432555553533654213115630566633251401333456110344545402251530041323224011221

58
day8/src/main.rs Normal file
View File

@ -0,0 +1,58 @@
use std::env;
use std::fs;
fn main() {
let input = fs::read_to_string(&env::args().nth(1).unwrap()).unwrap();
let forest: Vec<Vec<i8>> = input.lines()
.map(|line| line.chars().map(|c| c.to_digit(10).unwrap() as i8).collect())
.collect();
let nrows = forest.len();
let ncols = forest[0].len();
let min_from_left: Vec<Vec<i8>> = forest.iter()
.map(|row| row.iter()
.scan(-1, |h, &tree| {
let old = *h; *h = i8::max(*h as i8, tree); Some(old)
})
.collect())
.collect();
let min_from_right: Vec<Vec<i8>> = forest.iter()
.map(|row: &Vec<i8>| row.iter()
.rev()
.scan(-1, |h, &tree| {
let old = *h; *h = i8::max(*h as i8, tree); Some(old)
})
.collect::<Vec<i8>>().iter()
.rev().map(|x| *x)
.collect())
.collect();
let mut min_from_top: Vec<Vec<i8>> = vec![vec![-1; ncols]; nrows];
for c in 0..ncols {
for r in 1..nrows {
min_from_top[r][c] = i8::max(min_from_top[r-1][c], forest[r-1][c]);
}
}
let mut min_from_bot: Vec<Vec<i8>> = vec![vec![-1; ncols]; nrows];
for c in 0..ncols {
for r in (0..nrows-1).rev() {
min_from_bot[r][c] = i8::max(min_from_bot[r+1][c], forest[r+1][c]);
}
}
let mut sum = 0;
for r in 0..nrows {
for c in 0..ncols {
if forest[r][c] > min_from_left[r][c]
|| forest[r][c] > min_from_right[r][c]
|| forest[r][c] > min_from_top[r][c]
|| forest[r][c] > min_from_bot[r][c] {
sum += 1;
}
}
}
println!("{:?}", sum);
}

5
day8/test.txt Normal file
View File

@ -0,0 +1,5 @@
30373
25512
65332
33549
35390