From 68c34279aa1b7d9fea586170ce87f9013a56d7c1 Mon Sep 17 00:00:00 2001 From: Wynd Date: Thu, 8 Dec 2022 12:15:19 +0200 Subject: [PATCH] Day 8 puzzle --- Cargo.lock | 23 +++++++++++ Cargo.toml | 3 +- day8/Cargo.toml | 9 +++++ day8/src/input.txt | 99 ++++++++++++++++++++++++++++++++++++++++++++++ day8/src/lib.rs | 80 +++++++++++++++++++++++++++++++++++++ src/main.rs | 2 +- 6 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 day8/Cargo.toml create mode 100644 day8/src/input.txt create mode 100644 day8/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 2fd9352..7a84195 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,6 +13,7 @@ dependencies = [ "day5", "day6", "day7", + "day8", ] [[package]] @@ -42,3 +43,25 @@ version = "0.1.0" [[package]] name = "day7" version = "0.1.0" + +[[package]] +name = "day8" +version = "0.1.0" +dependencies = [ + "grid", +] + +[[package]] +name = "grid" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0634107a3a005070dd73e27e74ecb691a94e9e5ba7829f434db7fbf73a6b5c47" +dependencies = [ + "no-std-compat", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" diff --git a/Cargo.toml b/Cargo.toml index 32aa8fc..1f1c02a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,4 +17,5 @@ day3 = { path = "./day3" } day4 = { path = "./day4" } day5 = { path = "./day5" } day6 = { path = "./day6" } -day7 = { path = "./day7" } \ No newline at end of file +day7 = { path = "./day7" } +day8 = { path = "./day8" } \ No newline at end of file diff --git a/day8/Cargo.toml b/day8/Cargo.toml new file mode 100644 index 0000000..54d88e0 --- /dev/null +++ b/day8/Cargo.toml @@ -0,0 +1,9 @@ +[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] +grid = "0.9.0" \ No newline at end of file diff --git a/day8/src/input.txt b/day8/src/input.txt new file mode 100644 index 0000000..d46e623 --- /dev/null +++ b/day8/src/input.txt @@ -0,0 +1,99 @@ +313213123212200312011243203120214010202554420335045116203101005212525131015305511140012431022113113 +222021333112322244231542054023354511304431216312534453560105660253445311020244233130144313440030322 +200012220300132310233100025524032003355144536126232161330106115213441450552235514000243120210031130 +102111124044033113241415155401056014506203413216651520206613342353052505445000321043121021430440021 +221134021010031320101542213340113552161113350123516154134654046250223033000413443321231233142213010 +112241233114245202523201433013460320664034202602144006022621253536213222400131120345151014014131133 +132211130114141401325141212460540656525106651152012063404633651340223361443201520054113541144043031 +323140320024314005210155316202152552621415660063112177564603241212312025036551350313225504314404112 +014013242041230510442265205625331115540222744516266167254216354043533020346502032534231121044441220 +233414030101315255335126055263144512111777464611565216157441673706100506241423030403420343112342030 +133144314412553330012446404244433465434666762135116677765213463444460612511131340332552424201204120 +010320402332512110363213044530335655613562223756572424746437567672262256431540210005310544243444101 +324403411232230200215144254550257275144535323452276762234354361552536153612012260502425410505314212 +044143021304533036524115200363122146144443357746134567133417572143572217253466665420004544002052304 +031301205442313664253200353721523337451137554555385833341715227554331566151244334446363035232422032 +412021132254126340642250212415471513377143653545744364662761514364426436251422450305502445230351142 +423013525424334650512351242132544127615655738268233852527877887577454317715373566210510633013145020 +314013042244622602006117664713652263528475833433263846468763678447134716635345050225504112315124312 +210530032555051320514661111414734263472852682724485772623266565822423365264512541061226540103142223 +202523210140346233027372362557125436368725536228624865344774378537888747171665564143331101501212340 +312102150200503360534132445517484678583587678756766763747725475724228724317675166660536246102044404 +014501150514404506226424155762432386227846258625478334768375862827476433553651311460116133631440213 +145345025402132601222234271268834838244287765994936689397836424284644676342577451356463132062234232 +030520533600060465674743543832435622275594666933473957864637427284284528866426734257033413611153542 +111125222126126664625217555874224623337857863456948836785373353757744683247375632677514312554402024 +454344234313551645731724622525365832657894545768964536939387863978465673442253722125752553236132004 +141351656653224237252122854224855258938593946648537669944575478986734723225856761571634036114323202 +301354130411223555466416844555847677853855433636774857897563386873392265447728545634555234214003555 +324351500351156142554654722557458488698547355994463766454687489898485753473777574124613414652504004 +000202526603566624271288867428799685358698759656849978553895836996388433252545546266753551322305123 +142140450656776227714466585833798874975635767795445874946645465477849772464684527525213236023524220 +324262353505673315724236445748536388973668654588599896854469535494838643744387872721615221063235321 +552206463167666154577658258569744567339446596474586868848866645743399869362886626547344767533546153 +352323434663437355725427826449799477395999565764668865854945787936654594832633678767541225131001503 +440166362233562667478335763956389857755767497475848959778498799895595785387844464757513162265652640 +104122124642766642664452283555537376598457767558647554969995685645795999475473687336165523560052001 +255352243015641217534667849769975859955778464876555786747474774794864778373768452562637255330444232 +456220432747476336866782246873698697677699688678997975678548856759743777979632262638565415133210633 +354641641663166247236463863687744889449497969668886767686756898498698544578857834482516366746042103 +125201564115437683566423743488648645944969969766988857659599646944656843556585768447477145122536100 +565166453317161563746425435958546648857589858689866779576599554476785965354884443284615264253254316 +121246126671552573824643637663796768749697876859599686798755755668478994537789677336675255111501306 +360355134677155672632437676667797548778989878956585555755888869798448799556895227877387243567410342 +201045427623176635776469999883749944896899977995889968875595559556975886998744463243563112165201326 +352250115546124536536769454447786744475757988989886986985776968688899563536676844455461472345336201 +444012305276547277522595375654994558855859877987996678887769879954854599865599846623773465534004160 +003621673437674224248486547979885878957565757686996887766986595599447858644667462254244517674205046 +045265132276456334554365893935749649965989576778789869677576755756899986563778785582684657425224532 +256151375615717542563666894835779554876779596976976699887778577957456866545674477228666746346403631 +161152464371764263643334333389748956969597666797767878866755966565484647664843525828682412373755454 +502011544714165463843278447485479797867666888668797796768977767569575788836334565474627531473704246 +151460364232447443233565968759985868786557997798976867676959589967898874545836432537554441566122314 +325354014323767722264889584534897666569996596668678778968696799996649764974489874252576563221244356 +300165663442414468382638967476995984959988868887699967676597986577798947648889527728225341345144126 +523044146537227284236854867884546566896896589678689877799567996884747789569869374746443236356121631 +623520016256236672238393557665746588457977578897867867689877778857948885353767526367472655634211324 +513112323743777428355697564974758755988785986568979868979685685997847967586943842248473255451053311 +450020506764535784366644976997588757498856779786876686775868855996746554394579645638756632417635430 +333302106653766675873339799535474646879996789788987875587977755587884588498366525263657241244563411 +021603345313213632267754575346995947848565695878969885767869775868759846376874235783854235221066060 +451051105676415353834239879477689664878678578559658579558858859685656646333643282578751361221450043 +323133151167312457234657559765757999468467698869969666865897797857485499569838464565771443341433624 +351226435216677645378442636393858569688464696659679658777559879978765539986842833528347477142364355 +312522015134552576843564246393479975856585945659576986575979678487794748787843877358147735663364153 +436221405132742616333723774335457748498747869445768557777496645469557694497322763335217424704452516 +531453464276746646458848784658447874499485559877948986585644748765566863496685884585514544145343261 +124004035175455643547236885494794479865464946999998568586788689967343377758845738571672264321061003 +200155306351543777457257657968974568856495865454798449784799858884637386375422526864243565062364102 +445601414321444235648773664866559437996644487476459565964785659539635568456223755627145663416360463 +450034302502443262354377457789598776596746648495968457946465588399656898646426472411777146341644150 +023146264504256441756645634487555664987468946766784647877558359936934483654774826324735714633603030 +333342045300642417421427522458538378785933374679488696549488964673985948667688553344343522163201010 +455545402043235615564685485576228935958544883643955984493945756635487843653852747147246556553523510 +521503005555124536565566284723484688885348465998948435535997783785742684873228712152117622054235215 +312504066020457274731625463858577544637764966338466339435677364997568623562286441516367015430243140 +205031053461063473777474186844553532897797357638539497889554739476455778658267742121765420506102155 +234254241452503617412556672484735427269749864873783849964559983463526474536714377341620430652445005 +005122256601541121767617243673775345873688335643477574686454362545566824655271216641353663405312143 +433412443503526366274346321587248483458325774873734889987843368227357425636513234740304061623033442 +150425005143315445343366357776572258884478742563678357783845862235758564513525337622046146253440425 +225155323264631456635462325511885764326675428846268646575225734474437376612544667111053406332354205 +035014011000365630427277363261244836668367562448734772533252234588746775752633154601553624254020455 +012332415442566650666617225747354638747746384682743326746678826728355131225614470132623462424342514 +013524113311511615516563562155256314453777643324383464236254565752742637247411046651633511302344051 +212122212430404140032134131564756752725322885466434352224875446515552517267614410524244004301240143 +311400235445132520254065617566464245641623888587556667385287735312776421161334445544251524420400232 +440215452341344043062300567544524332733611636552822742567416277354477557756312354353622415135520342 +212430430313114143406656305336551452762327233736172563224242725162751616161102623013055041203553040 +321010353433305435042151016603142762425754273737777221111751751754217734105034366116400050235001301 +141012030043441152515110066520525231112547624256173331346341451761472053411546323404310404443302411 +133133034522454043232213312145664546126452755453724144154261454733124054403605004150535010413000334 +331412441152240551104612131344064131112564126362561532523311462604061151623121543003234021543312303 +010301442302500534021525552205536466144454523741535255444641345430402356234514221410435324321440211 +222301014410242404221240250563134040056104626021173454550103400400616550340400310015454450242211021 +233412422204111420244300456264320032401430366334634641441411125102262216452333414201235210001133200 +132244430320123233143125240232350142156620032556633233042303530460352401020133104323414224314240333 +003213243020203044035550441012322051645661162162123160565554312321050133555533333123214002014231123 +000032030402033315113220225514041611664662663525144303562161423513133325130431534323303033322212313 +101211324120322333355055001035515221630532526633042003421442155144120444232152535003241233413001002 diff --git a/day8/src/lib.rs b/day8/src/lib.rs new file mode 100644 index 0000000..090f8dc --- /dev/null +++ b/day8/src/lib.rs @@ -0,0 +1,80 @@ +use std::cmp::Ordering; + +use grid::Grid; + +pub fn start() { + let grid = generate_grid(); + + let mut visible_trees: usize = (grid.rows() + grid.cols()) * 2 - 4; + + for row in 1..grid.rows() - 1 { + for column in 1..grid.cols() - 1 { + if check_direction(&grid, row, column) + .iter() + .map(|f| f.iter().any(|f| f >= &grid[row][column])) + .any(|t| t == false) + { + visible_trees += 1 + } + } + } + + let mut products: Vec = vec![]; + + for row in 0..grid.rows() { + for column in 0..grid.cols() { + let target = &grid[row][column]; + + let mut i = 0; + let test: Vec = check_direction(&grid, row, column) + .iter() + .map(|val| { + let mut counter = 0; + let mut numbers = val.clone(); + + if i == 0 || i == 2 { + numbers = val.iter().rev().copied().collect(); + } + + for nr in &numbers { + match nr.cmp(target) { + Ordering::Less => counter += 1, + Ordering::Equal | Ordering::Greater => { + counter += 1; + break; + } + } + } + i += 1; + counter + }) + .collect(); + + products.push(test.iter().product()); + } + } + let res = *products.iter().max().unwrap(); + + println!("Part 1: {}", visible_trees); + println!("Part 2: {}", res); +} + +fn generate_grid() -> Grid { + let input = include_str!("input.txt").replace("\r", ""); + let mut grid: Grid = Grid::new(0, 0); + input + .lines() + .map(|f| f.chars().map(|c| c.to_digit(10).unwrap()).collect()) + .for_each(|row| grid.push_row(row)); + + grid +} + +fn check_direction(grid: &Grid, row: usize, column: usize) -> Vec> { + let left = grid[row][..column].to_vec(); + let right = grid[row][column + 1..].to_vec(); + let up = grid.iter_col(column).take(row).cloned().collect(); + let down = grid.iter_col(column).skip(row + 1).cloned().collect(); + + vec![left, right, up, down] +} diff --git a/src/main.rs b/src/main.rs index 8391aa4..5fd56d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ fn main() { - day7::start(); + day8::start(); }