day 8
This commit is contained in:
parent
ffd5771fc9
commit
2c1323095f
@ -8,4 +8,5 @@ members = [
|
||||
"day5",
|
||||
"day6",
|
||||
"day7",
|
||||
"day8",
|
||||
]
|
8
day8/Cargo.toml
Normal file
8
day8/Cargo.toml
Normal 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
99
day8/input.txt
Normal file
@ -0,0 +1,99 @@
|
||||
112121202020313300020340412130241443213110212555412551412441344012102310202342110301131001201210222
|
||||
002220000133232333300400324440200340331442222154322435351134115104433131022400301210231103320120102
|
||||
002111110023312202140422121302301411425412143121451113531553512221212012141140202223332010130102121
|
||||
200121112032232121304410232442313124341433152252314544515325125233341244332012020324021110233002001
|
||||
201022212100303122230042110420411144235142233535353242115241433555244414021310121244221013322222121
|
||||
011133013013221340022444040034222334222333233513241314324332525223122512421234021412140011030323220
|
||||
210300120303001122232014221422523555232331235422254211412225214325215241553042040303041423101011002
|
||||
003120002332341304133020544511125535535541345465624233512532523153125344553310344313112440310203011
|
||||
131130201012400142322154551413323211211264453362355545322422255141341455331312144311201120100013210
|
||||
231231113320032112042452344144421222532325455233246353364224262633314514222114310222010411123020310
|
||||
130132323324003111222144335255232253526222366424453236522644225645542113443452221300403213402211010
|
||||
113120324042321002433123114511424246663652545323562652666642343346224141215312351154031420431123313
|
||||
322103103420203222134243312435226546235454342354423362646633563243445363453321134444313221424211210
|
||||
222002200102244012425542311135622554533554536552565362325262535422342364211432245513321404214403103
|
||||
020312030211000311145233135522425335364263235236633766423525523653365556233412434131421431421413032
|
||||
210200210122104332244324435223345455654634767746775377345346266325246256554325112245151433442112120
|
||||
122021103003325452113155263653362555455536744343555667465337737332644556355541512314415321432122010
|
||||
302130331324344154351152233526435626553676357536566754666777544543643553226655255322235341014410100
|
||||
314012231321215344153565545233452474545654556345434346477343637634766266254223421545221444103004003
|
||||
203142142342444551513532553564436657337357765377547636675373434576744336526346456543411441023143110
|
||||
012342201025331211122452444533576366457663645436375557334447647673566472636623645223251551503132201
|
||||
242040141354332534632526224223663666376753663766575676333754654644753446365223356333455541211334020
|
||||
304212105422512243642223324443434437444774475647656876467367634464365546355325563651434541552020333
|
||||
411420043555145455366465334765477455434665856478775445748748844536643753776566362432434143454420144
|
||||
401414045521554536566434665734634475568447478784884574576588667675763475753664255466323144315114340
|
||||
403203444553445263226363636763747365744764846865845556768875448846334555367546232343531522434303222
|
||||
320101251535223652234326457665537657586786457478765885578775686476536463546335334642346321452233131
|
||||
101012145413152534234557444577344864876885844857544755664447444658566665757343254462522531514251101
|
||||
340341152532244444232667437647346678855466568676685668454547775878787354745333434364264512332351234
|
||||
034022314552563333466574354365446884777648857896869775765876486687448874547744636623356245124411300
|
||||
434115222252325233267546336767445666887887795778879879888964665878876674757366746353365644321332143
|
||||
312035533543623363556753755356877487485687695957956976755556874674844755665746737526623244522514143
|
||||
420252322135326524253347754684544485747997555758865876756898776645768885645667637664454254124241132
|
||||
042551521433445422576644675485868857686859585876589677967989879564666758475665333623554365252143351
|
||||
404455122524562436436545777675857467559889565668857859685895859976758774886545433533522546412531113
|
||||
402414213444443632667535548848565847669657785977756989557799965677887465558473374753636263414433431
|
||||
022221152324544456367356377556875457665895668676988667859858876695687554757534736365524353324555445
|
||||
344111222625453364363635787885744595658769866898866968696568596595864444764473337656423523432142535
|
||||
225434342232366345537763675578769565995877778767697786787965759585779855884865343633323444422312351
|
||||
035315413543653543334365848874759855766697967679779767999679566665785768858653734543735645643221454
|
||||
023235144645352563656735676476699588575688669887679986967789786578779847658656675663653453233341153
|
||||
142225254342433566337738656784888579869898976766696886867989878587588888556744335476656546565134514
|
||||
332531546644465434575456856855557977598878768976688677796996689765566874765455375433552656652141222
|
||||
245115244422246534474538846486987698857687868676878977996687768986655856867454644744464462545223145
|
||||
534255233266234565357356454786989999898896977688879977977896669857699764786566736463343326443154122
|
||||
454354332542262477736688458567665797769979688789788788987866776769877696655848467435475444463335241
|
||||
512543144352562655357675475585978965976868699798788899789679876985786899685774865763673624244331431
|
||||
324412256535565334657448674688895886877986668889799998798889878866685759475645457456546355544251525
|
||||
115513233345333374765468446775577596767887988887878879877777968697669577748775734356333445243551434
|
||||
415151565352224735474558556859799577886898999998979889789968896887667799778755865475767222365331232
|
||||
341542233524534557363486747546566765697666978897898998779776898687767558456588645347447452326635211
|
||||
141352533235633637755547684876556558796988688897999988799797887989695558885678545676777233242514541
|
||||
521224242633256545773565667556868787766779689977797878779776688978856968445584875373474655564453414
|
||||
212223344626635634464468564667887899889688667779987877977666888978896755878447456437466626246242154
|
||||
234115532222663767644584477756969899977977999989879987999976887779867996588585775466444223626514313
|
||||
135352514355535475547475454586885687868789797787897877999696989878678658675857877374766244666335415
|
||||
245312112534242364465384488548568678767769779778898997999876767795755964548464847565732454524524223
|
||||
021525515246626734753566444568597959566979986967678896977989678777787774766445653374342254643512525
|
||||
154333554224543664547576668488558779569899998698676696676768688689695868756558334756732443435414211
|
||||
241121123663636476553777547778679898575887899887676677898688967655685877474554463766356464665314411
|
||||
042314546263224256647665654464888598856776787699868899986977858568579785688458575346453652462152344
|
||||
123331145253442347344577548844655756795759896669869969898669978977675445684486336563564633463521424
|
||||
441245214645233266655474685847446687769676869796966869876898656576557445456865677774743333555121233
|
||||
125144145355562535553453348876854556596588579796889867979959976599967847546665344765436664421452124
|
||||
005214145522463625374665767445668477766757899558986688996855569799556464475877546663265544522533142
|
||||
424213534345444245575767446587747766879868999866679969656557796695754688786576454364542222333552433
|
||||
340123443165235626753533465668444668759977876797965776795859756987877778467766435676633663325451242
|
||||
003233434214334366657377335845776467875798576979767697579687977648857565845364473624435244552521232
|
||||
424135233343456444347333753548856886767998675667957686789866998677467875563746577654546663332345512
|
||||
142144412143652453363555366356464857764776776669865675576766767657655474454367647255355333454132411
|
||||
114044434535536365647343757563768767554848877759975798758895468485667587677463336535634542315521124
|
||||
243044411234356654655645476665375787765667655868887868786658648788875454747665334553525245122313313
|
||||
223005135155362266463337346655467578858875455446758445778678456564555447754654655642444335244151100
|
||||
441031313535133543536645563565447868478877557885475885785484588664864367437333352334646552545540434
|
||||
230403434533122325663365655775564467566764578557546875654785658764434354637753535553443132323132432
|
||||
231103055415354435244636576576467643575457665666647886566848556463753663346723326243525141135130424
|
||||
234240311433354434253255264577573744567747565865655865884455858675735663776644624454624322251114322
|
||||
001140425351442116425436424534333635755754445857766654848476464365374745573246334553145131221240002
|
||||
423442125121142242554242262463344446436337646568454446465366647477574476743566434562422322213241112
|
||||
041120244223522424262622532426564364336575645645643473455773734743736536462532635531424223442140002
|
||||
333213342044141312256465444645743463747737775353476574446663366477433766453534634424144243324342330
|
||||
123301211302132311214446544655333545346646756574364363763577337443636433244534466131243245142313041
|
||||
333302233005545533332445234232634365637756745756665533337455656536362324645335641322232425441330441
|
||||
210101031320143231223346443232362353735643457655456457447337655745423533326242244322432513011341141
|
||||
103110441134453455534214566635432365634456656643365735556363677266633236436433421143354400234124322
|
||||
210103104441245232113425543552436226532532734735737666776674646353226636524623254312414101401413013
|
||||
020024442231000453252454154546643563663622535463445755356246553442265263346551444421542422240011133
|
||||
031020232402201014325415255432463233224332466352332362464633465245446636555422514435430143120003112
|
||||
310302320413232125411435155524536333442626366353663655223253243262552253454113353253031242202102210
|
||||
221201232400342023452154554354353535536252463345626432342652363255555242425543353242440134432103103
|
||||
210032311140434341431423452253535242446256556466223466635264232223251545121524142114121403343313003
|
||||
120033031102121020314222514435233222253442525525522546426665636231521441532113451340400133032210231
|
||||
210023013101112320231215311434153455555125335452263535435665554254354533423243412221004001101231111
|
||||
221223223131114201030343552243332413432225514566333324653532145252122232542252133334211422030222312
|
||||
222331111212014202022011214444443411412221134525134425141412252142514152354243232311422120203312310
|
||||
110131122101302404410231242111542122454123223331222324435451342542314134420104111021220102332003000
|
||||
201221202213022021032201013424223253221544343453433115235543553513232252242121443333323311020103222
|
||||
001200323302010132410244321011414224212135145444322543324442532241244022442341044312322333033210110
|
||||
012221120210002201233041204141124034134123443133233422423453224352410321301023102020300131022311221
|
5
day8/sample_input.txt
Normal file
5
day8/sample_input.txt
Normal file
@ -0,0 +1,5 @@
|
||||
30373
|
||||
25512
|
||||
65332
|
||||
33549
|
||||
35390
|
82
day8/src/main.rs
Normal file
82
day8/src/main.rs
Normal file
@ -0,0 +1,82 @@
|
||||
use std::borrow::BorrowMut;
|
||||
|
||||
fn directional_scenic_score(seen: &Vec<i16>, height: i16) -> u32 {
|
||||
(match seen.iter().rev().position(|x| { *x >= height }) {
|
||||
None => seen.len(),
|
||||
Some(x) => x + 1,
|
||||
}) as u32
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const INPUT: &str = include_str!("../input.txt");
|
||||
|
||||
let mut grid: Vec<Vec<(i16, bool, u32)>> = Vec::new();
|
||||
|
||||
for row in INPUT.lines() {
|
||||
grid.push(Vec::new());
|
||||
let r = grid.last_mut().unwrap();
|
||||
for col in row.chars() {
|
||||
r.push((col.to_digit(10).unwrap().try_into().unwrap(), false, 1));
|
||||
}
|
||||
}
|
||||
|
||||
for row in grid.iter_mut() {
|
||||
let mut max_seen: i16 = -1;
|
||||
let mut seen: Vec<i16> = Vec::new();
|
||||
for tree in row.iter_mut() {
|
||||
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||
seen.push(tree.0);
|
||||
if tree.0 > max_seen {
|
||||
max_seen = tree.0;
|
||||
tree.1 = true;
|
||||
}
|
||||
}
|
||||
|
||||
max_seen = -1;
|
||||
seen.clear();
|
||||
for tree in row.iter_mut().rev() {
|
||||
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||
seen.push(tree.0);
|
||||
if tree.0 > max_seen {
|
||||
max_seen = tree.0;
|
||||
tree.1 = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for i in 0..grid[0].len() {
|
||||
let mut max_seen: i16 = -1;
|
||||
let mut seen: Vec<i16> = Vec::new();
|
||||
for j in 0..grid.len() {
|
||||
let tree = grid[j][i].borrow_mut();
|
||||
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||
seen.push(tree.0);
|
||||
if tree.0 > max_seen {
|
||||
max_seen = tree.0;
|
||||
tree.1 = true;
|
||||
}
|
||||
}
|
||||
|
||||
max_seen = -1;
|
||||
seen.clear();
|
||||
for j in (0..grid.len()).rev() {
|
||||
let tree = grid[j][i].borrow_mut();
|
||||
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||
seen.push(tree.0);
|
||||
if tree.0 > max_seen {
|
||||
max_seen = tree.0;
|
||||
tree.1 = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let n_trees_visible = grid.iter().map(|v| -> usize {
|
||||
v.iter().filter(|(_, vis, _)| { *vis }).count()
|
||||
}).sum::<usize>();
|
||||
println!("{n_trees_visible}");
|
||||
|
||||
let max_scenic_score = grid.iter().map(|v| {
|
||||
v.iter().map(|(_, _, score)| { score }).max().unwrap()
|
||||
}).max().unwrap();
|
||||
println!("{max_scenic_score}");
|
||||
}
|
Loading…
Reference in New Issue
Block a user