add day 8, part 1
This commit is contained in:
parent
ed3e4ffaa7
commit
02a1b2b68b
|
@ -0,0 +1,55 @@
|
|||
// Copyright 2022 Christian Ulrich
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use std::io;
|
||||
|
||||
pub struct Forest {
|
||||
trees: Vec<Vec<u8>>,
|
||||
}
|
||||
|
||||
impl Forest {
|
||||
pub fn from_stdin() -> Result<Forest, &'static str> {
|
||||
let mut trees = vec![];
|
||||
for line in io::stdin().lines() {
|
||||
let line = line.unwrap();
|
||||
if line.len() > 0 {
|
||||
trees.push(line.bytes().map(|b| b - '0' as u8).collect());
|
||||
}
|
||||
}
|
||||
Ok(Self { trees: trees })
|
||||
}
|
||||
|
||||
pub fn dimensions(&self) -> (usize, usize) {
|
||||
(self.trees[0].len(), self.trees.len())
|
||||
}
|
||||
|
||||
pub fn tree(&self, x: usize, y: usize) -> Option<u8> {
|
||||
match y < self.trees.len() && x < self.trees[0].len() {
|
||||
false => None,
|
||||
true => Some(self.trees[y][x]),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn line(&self, index: usize) -> Option<impl Iterator<Item = &u8>> {
|
||||
Some(self.trees.get(index)?.iter())
|
||||
}
|
||||
|
||||
pub fn column(&self, index: usize) -> Option<impl Iterator<Item = &u8>> {
|
||||
match self.trees[0].len() > index {
|
||||
false => None,
|
||||
true => Some(self.trees.iter().map(move |line| &line[index])),
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
233314113252402225351463633453424226362041164065666135612411011040522031304523540110205035014411044
|
||||
332122310405013102405106464353665644607664150663467462700534002161131361415444052114131045140243410
|
||||
440000154211143151036643465424430437150326344660672414322263612306613505030214413503140154240143331
|
||||
323343255421523302132452525040120535030306056101323626031642774451731442413053643256135313042003043
|
||||
442005315501104446243554125512523705520741532675611167103501123704102401231225310004344454441311331
|
||||
332130414130356034341366056652625210567702243041400445367704317060210626605415512605335350520122311
|
||||
324030243443122504054434240071266742352112321376000244606511532513331523563532353420154204241013554
|
||||
405514351330112521566052015217062045756373753646835340126272647475527567717322610632203041311303430
|
||||
335344112324634006053114070623702457531233080182014252513623435405053472452142020411651513420241150
|
||||
242041131336116162436425631055271632161034811060125876160151764545471725530572712055225156042443422
|
||||
510115143602101614215644471437202165862138121575207306363288027622104656656232657106303540123445433
|
||||
323023452213641660103641556437400327347513153233743771336775454828804123702623477265225140631521412
|
||||
202414114362551307121033522362685234048874113835556780630765201243481547353207660367310163062450444
|
||||
251210540002101157605104272102100805434031582776285412180762321556517203802774651440303062465423305
|
||||
415154424136606622417173367536300675207863456056626612502574128212038664377073051707565151352430241
|
||||
422343416235314110055766487664127721622002932278537772434781110282275624223646255613020563013414324
|
||||
402501442363526063250415576530161587636599439927185751837499351077528874028027725403237453225064102
|
||||
504234134044257264655215060321538257751387982248126653446534117721070521632241341327330746014516212
|
||||
046421106227215776577005025532583722724216237543578962475762466531136887322178170357170305360651141
|
||||
055031536466374206237511402485882788415741555457619525942245935594343888851226034246745555525105303
|
||||
313316632007533014153074787161584766685843475942726193487858652825242238106152063072370317116502432
|
||||
345426660702445442335226831889943991158617188464619968385935798291964336101667488024624136722351004
|
||||
553433023431367776013442510449498261312593877587925648886725526355324173132272087282444404673023212
|
||||
156321141760325157812461514459436947142926654837377323496455524659313115197526460314171035362510231
|
||||
255120642613302053266486441787818289142646555466227786469549465753577142215522110616726724621755043
|
||||
334560516360223658024601577515767963496326366868843234647892475283342192849565184146074327226212463
|
||||
351153721766750360870230632513718533288747664849867792728752858296473818827894546842165222662660316
|
||||
230546472451664022018817486253724286896847769324654739253839985376855756726394310051213741574334634
|
||||
240604111313412778575138553583993533754688392955365776855668274427545426777852711683051850766130035
|
||||
612053444440242110747524697575138856763564432993786937663252964632522297343191877616788702776256531
|
||||
213210746050611853364362496895533938487867659678984548544999789999252968144975244772045683045163143
|
||||
234313560047266766104657929337338747939999549989343339775674649843878538256756297465206356607215721
|
||||
541330056702266326645419617828852697233569954595594373743435783473477458272526351331155042164020032
|
||||
140412541255011411271525629485342852659763893333568788878686877387434739657433158924624635520312150
|
||||
556450111785818650834747363432795446558935634334688647986889543767825728745991426532778554774250041
|
||||
046374536364502613174368347367376484886386459583593967639436864647827484753857757357047128547756242
|
||||
655764564731052057576529129964629339964949833467658766644456934553679432454423318918284774722205121
|
||||
301454635173026337889714886368752544354576898644765747749593399993443244885693658957270520386432731
|
||||
613651341801476361933539945247365669358764655966668996656667973574449468955773393241131553833236721
|
||||
042712127874888396848539559356923856975699558476695477574879649457344544586753161376200083775010372
|
||||
633571133050088089565169284347688865568347469855686456948898869676734992839954519559214335640327013
|
||||
172043723757200297443165429577876637868564587665756749555668684974876324328894776283612126381240111
|
||||
635125136468188597197264372853466657935845654969889595996546968735445775435645812218328362205464515
|
||||
656713007810654782857485344549587333657698446778779649598947986469666454469269555718555500650676011
|
||||
630073065257712132592797837839439883385447879768997677977956469988597434494722784121685628415221204
|
||||
444604034821608779684622777623558743884886456886957579576977858998653784523662941495476424336113773
|
||||
514217671037186833491983278925346394784797648797698665967689974439553895999834522263288078771344552
|
||||
021015255420302927289942773454777353967589988997567586785896579989679678247998851883197521625052130
|
||||
421020702178063299133439633496746947998454998766655968999899446783547887482855713278711117821233107
|
||||
114364606446783776565749269624677945778789678679777777886755497459955637294537453616518784767252223
|
||||
142046260522656474665234998643755538575585667687579557758887565777974637389892415231713727714020545
|
||||
413262342277803134611736838553467587864496795555768658557598695666533579454964336395296454485042443
|
||||
204517185630034591417397997875956734665779995669788556788867949657786895495638811945649547400371307
|
||||
174033605718865969171853766365888998784497996577888589689477575486489599887526816741551681644861060
|
||||
063224685827512324137576693964389734944878776689697878975777568576888374227623832471753857414056670
|
||||
745313234117087656527378237327965487387495769997565976887546785886477554653439376446681216706565573
|
||||
714221627364867314579127862985967974769475946858556695875745779584938862235922341138325687134671324
|
||||
235137535058112125486715389748736438398876596577887698784464594585565475969977691455623226423203660
|
||||
331457736838274583155152898236648886649484885689575478878859449534476546585873369917917603680222744
|
||||
370056553104404574421729223659546734366977645685779476846478896477486329567528693841705350032460301
|
||||
012046147400171288423168662683944356977758997457588769489878697875636833272395415686405718542670511
|
||||
262552341358752126152124869842937539864957956664896875844667973579966523479295826721313375133257021
|
||||
341335311104544323385654534727568873565755546974875679488749436576963238488492321632936002023135437
|
||||
615306301262148803186235472539894694565945596584665544954959389566469239372486931536222011310441436
|
||||
324234323647385703932647765832954885887394937486885966935453639473679586767584874836377576245127406
|
||||
607164142714103623815198749329787575443985479863553945758558959498828382965456286964707151450421625
|
||||
314465066533633057228986634877635684496949577394987736868947454473842782594226393615334352826715141
|
||||
536475143305424208759752363667664867845838863986454395453978597925332488579511898801816403500125341
|
||||
600436437024871886647399158842535329649445587579746788759559564329954295266229924951756877470326446
|
||||
635061431072367818521728582256787599349759447773957754769437873366692627645595542612842717645730302
|
||||
251607161407032570875153116448595364788888378855675796658956867972396653145239427853001770112657603
|
||||
520241640710420727048842416277438383273627564337797943589249474727857339824479251678702445344250203
|
||||
506023425206020443136017159716969548233444659552973699328436724666925167146818911207262175137364612
|
||||
442525337116108025845215346249313587956988464638548455829596548637338122164362510653537202133162600
|
||||
623261232770026480642481695826472689876524548894353286453262528934387623416282466608203617473042451
|
||||
626053201167043156740764734514534985388485442264596935478566658482829581156117030012081322032200121
|
||||
515113523713157076317332585859135277147225933537378925962628268962323487376155347083215167110255554
|
||||
643536511610472445252441712381625244353195223785935227686229495474181892477324203217374633002550026
|
||||
153316344605375470614626642719443813563119365997536454752526938116346697801468177321355021471120515
|
||||
010334311035603565003056106843521955633914195866275698547136967639217264457708135633577350770316135
|
||||
351656015235033300075252446207592216329119342698142528782475484976514664823836254046377242355203231
|
||||
522341020414273625444887743684716565489521553184979199653378924268741480405417451447044277355321421
|
||||
320440214437322574221247068377611333151334766751972378176217877564457826632646430162364212550024162
|
||||
140006436600523345517508215782380433418514688293966641916347884224234845031257747444644402460030420
|
||||
104146605633362747562251487583451148253612867252927843577181415070521748116343064574155031564324255
|
||||
103130334346503557465533100482078578137542764112232739942722778250542504456660050343333220202316205
|
||||
224104423522010530242024415522604324510310083645671747433145834566115676313351317733033620325342051
|
||||
434330306111002653115073507708580057557878202203186883544117540038650412834072007217050442340043025
|
||||
230451225551565213004055211423448362510382160274334687381264153611307161161541343174055136520415131
|
||||
345102326410332306132112553766214623524786867854606163254728785833674760574565046554641232320425233
|
||||
324453112442152321362461117074604608838002887441621782406511511711643754374647452022531051110420525
|
||||
543002053003201421256545767762532417627081703274583184256503570111365335442301734221343521443001212
|
||||
235415514510600046234062765244344640577612404816608483334516626661775011137245042203526504552113144
|
||||
232104354241603004312140061650307762345454636588020108162255100572653572030455333104521444441001334
|
||||
032504101332516043103535067326435732054073207541115761605146733506251652016161600036450050551314041
|
||||
101112052131531010033161261171241410642510371771443174324170123145060261426566620551630411143502140
|
||||
022233151424524336433611141606565135707143053177553172244617521250201055320411606530411451334123003
|
||||
234144345551514036433010066345436637404726175521270115026425067373731004102313350660213212022501014
|
||||
103403251030225452432315040644602502722124614674434524653306555370426625422245263065135410325331421
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
// Copyright 2022 Christian Ulrich
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
// usage: ./part1 < input
|
||||
|
||||
pub mod common;
|
||||
|
||||
use common::Forest;
|
||||
|
||||
fn main() -> Result<(), &'static str> {
|
||||
let forest = Forest::from_stdin()?;
|
||||
let (x_len, y_len) = forest.dimensions();
|
||||
let mut result = 0;
|
||||
for y in 0..y_len {
|
||||
for x in 0..x_len {
|
||||
let tree = forest.tree(x, y).unwrap();
|
||||
let is_visible = forest.line(y).unwrap().take(x).all(|t| t < &tree)
|
||||
|| forest.line(y).unwrap().skip(x + 1).all(|t| t < &tree)
|
||||
|| forest.column(x).unwrap().take(y).all(|t| t < &tree)
|
||||
|| forest.column(x).unwrap().skip(y + 1).all(|t| t < &tree);
|
||||
if is_visible {
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
println!("{result}");
|
||||
Ok(())
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
30373
|
||||
25512
|
||||
65332
|
||||
33549
|
||||
35390
|
Loading…
Reference in New Issue