This commit is contained in:
Max 2022-12-08 12:00:26 +01:00
parent 21c07db495
commit 7fc068d87b
3 changed files with 188 additions and 1 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"

99
day8/input.txt Normal file
View File

@ -0,0 +1,99 @@
200120010031113332213034140102430141241124321111512323442304040044220141342121012210022220211111200
111021120230012003124233312003010303204555454332453445353125225214221214442214301113012111020220220
010000112330232223210123331341111021455213441355415452453433542411022110033014112420103200010200112
210220131023203033023421012411405531115123145115445215311422135252541100222231431331003220231121021
020112210133112114444340100410411231114131452544155151415233415312511222041221113442132231003203100
121210122332301142321211440441113455552434332511455325315545354524142541534411112013143013120333022
002022223332143323320030004111431434153352153321414154453442552321332341355132444030442110103203212
212130023213100232130230411132244242133251435525323326611211534441513532233340420321144212221332012
112201210213131241203033341411115513233426453426433653356253533133113511115222441140433214102332200
212012000101044144022321521321444445566546646625625665232323663631331412343532242340023204432003233
101233132121222100241254211542133266356326564552445466322626353633223221135151311240430411433022011
200132020222314334333551152431232424524623645555522366665322366466545513112135535223102441334310202
023113000020114221524122422222662645435544455234636242322656464245462233555511334411233402112203303
323212301014434412315252233452332225554646452654545433445553336343544664455435323243510303023142200
310022200424121333144123222262332322343322244646667564465544426245466232342143412141451122001041322
212301111322001335441132334525635254352425553354565445643472236236266635446421522132452121404230333
222212444300345211222512256444456624535343536756355746664436374344346652444335121144422222340114403
133103420101433344253425324366444265345745457464444766674564476573243345254266312555221132304022243
104024111323421413115464433455553477333456354575666765646757774776752425462423244113225443242031103
102001244212344453145353232652647556546465453563544776667356374453675332254663444121345213131024201
224444241243433331136646422564367344447534333336573546336576477746463642222264422255444411444213332
111102440221143134255523244546456346745346547453543465664363545634575433436342252431313443241200434
134231321331555233423635635366465473563535535586445888474374535544636375425246452265522242444124430
234112414314111344422243544643454775656784865866884848444877466476364476356322553554245224411411221
034400114351525345222546546744637535635657575787587675474664764764736443646462322222525151425423322
200214241324215322354446653764777674587466544685754678446567884767437556756324542252661541311422130
343144113253113264625454456777333344687566876677476786864558645875776364454562645333232242321313142
343024121143435322432236376444777668467756646886688564457885758774655565674476525265433235351133020
403402124545255442342535445764457654765745674556784877787445455686478773563733543423236235255444144
103322531152132266562676355566367676848756788886766967585484486646776553753344443262466623351341241
310355244513624552353465735465555764667556575665597778969594858667646774744555337236256442514154340
023311451112523462333545544537465688645559988688956997665697964748587858337347363225646321434554144
320135522136342345436443367666564847488558589757575579796688785767645678467555334323622425311134113
302355525243323546577736555686874886486985688686888898966978978668487864787645754566534465541511251
334125312126266532347576536548547584696886997768569758698995755875465674754333433642553345425533431
341111335132225635365534457665748575977867585959997886979957965558787465664637533766462255534332423
332515314534343636736373478687676678865555895657977886779567677978977887466835476754353523355412552
223554423243256435734467677444784886576856669787898778968956989875566754875777467667635224535114135
155522522343322534364735656868875656687568869667769697877887796866975856457447636733764232364431215
242345244424435673345476658556448689589759768689899966877768987857579874745884637474453634352133231
415255446645436567674735664645455855996887768879976678686967768687868985856885736776326622253351232
345511155426334655353457846578475998667966669787979667866969678557875668566464436456435236255355314
142554534636264637437346664558867877978687978689679869967766679569789677485678377367342526223134543
445152112563265336347774464854776998568899676687677797996796877777879786686845577654534235322155423
333311452256452445537757558677965658888896678979799998788899698785896978877575444547572432544335251
153342523322435374455644657476596955598987666997999878876686677879688676464687476363732553363413554
144335145664565566437454557675966795686769969779977988878679878778787789465465637576634655354532332
152415343652336664567566647557776598677998979889877998977867798897785759685544636646555455665423232
233452324356364643433768554555595977968766779897887998898666688775789556775758843355374525244243434
415514136342636535455644448567857957878867697988999887897878896698589669784466744746433345345355353
232342145445335734443368474877857768999979889789879797978786868766697957448687837436437246435352325
423142134652644455355368647749855698998886897798977997799867788779868756865564445675347463653623132
221215125542657466763755887857659858677696867997877899797779899996787779754784846775376254442211254
154531463524644747547747455647685566769977767978799879788898879798999996758665537564563322242224125
114543323332546776763457675777969696978788779877889799879998997975759878686666834757774555334611241
353441154256436766664748544445957885788777978878979877989798876799786999466647747557553324526153313
433233236244364537664567776764977668967888876787887977898978679686668778764647857553662664333221513
112335142543334473565677774456986769698869989679787999966877889796668798648474667745633463364123315
113555236654542657737447854474695576987788777767987976776779677896568655666568777374452626625515123
335535115334436455537766485588496998559679678997888767666867796988758985466776445675326242423551222
113534446446435634464566878474597579966586699697988866966997787776788976778774466655756463456235323
432234422656545375357656547448457656589888789768979867898878979959955468888683644466555336562315155
313344415452422533675445775845665999956589788887986877769867786689888565577764433373633363624515141
222432351346446453465663784584875977688789959977876966969658866777886544775874577535665532224311252
225114233145352533344653757488874695566977756698769768695668575699668757584555454357642544414312222
033415322244643242337557674678486867575857998965787859688788778777887745544746656765646262354135222
244444135424622245536477356767676647596876888859989597677576756885858547856577434533266366252341111
043422441154553466473376764757644888596669857975585975898957778585855575867574554436566563342243533
331142132342425642446677456357664865566895568659588999997598897847485545576757377726563624233332331
023252542543632422666654576368776445864568889675685656595757555564576478356355573264462564525315531
401013153355343645357335364463874854866687865999886679877556446867474565563474773455256232432344241
021145311524153334266573666344586785645787666877957988698886547444446737764473344255436645355133043
343022114235145422524664767447348848745548778464684486768568675765556575337775543626443412212441440
111402455441135334663624565477563468586767564584754776865658486876757446535673333342623334312243002
300312451335434322222245676775746358685854756547745674447587647487533473336654232544332431554454412
433111155454541556355524273356653577688858857767884847858548544877576457444762553325524214215402141
131233333423335563265232427676636343767667757678865557657665545337553674363435662333422331253432142
424110224332255444554444426563344537343587775787775766858448446366677553432226234426335534235001312
333412002215124441543424366273747763767633456777658554454464446357566564765333524264253113145112300
101110030515255434456252656567734365435643756543777575374763565634563366532624443621453215143234300
303322412424455315323623364345353365376676743654344676735433644466637676342646445331232331222232310
323112211415542144152522545435246756534467755554567676637543357465766366552324534423444455001240332
104010010231221552145233456226456635564775656444567465773637433733444632663325561451234351230241312
121411232340543435321316435636242655564355535365574763633547465475523553325562122152444444042300041
131012210332331125512334254246234345354543573744464635755354544666345534262435114123351541032131413
320204021134412321515435566234224352423426577577364457356445435455454244243342521425351312003010221
323114214132034241313542544555435465334424654666346364554655422236635456436354122354410044244241323
013302120424301452153353441245652435266525344656664634425626224355262362255351231351513443132401213
320030122021334215313244242334523262333453263233364243362363226452453421344311524253311414201210001
232000301112410134252124412414346224626463252363536262245565624425334453135542241232142142113023001
023101113421202000305251552134255163452646652324334242436543224522235515444445314014323100240020120
320223110031202012323335553432231212252653563665545464422324656333443431535442453303001103202231020
102033222010100142203435155413125314311166645446465322244546532441244154143433143443342400201012012
103310002120123402241302221241151441435355114335344522434421453552354154135223134443030043002000021
112323110033212002113322411233332355223342424233213123445224135331545115152043042400020200022133330
022111301200101044211214231433231311322554214331413543414521424255241531111410022413003020200231110
012022111212202121003233141343155411314255551134343533133453252153433344441013011221420230021203220
221101122202110034040022441212441254112211113355531534335143125434435312222200311411322330203331100
210122210200133032213341213111433213432513121525124133544144433541201142230241123430213303001122221

View File

@ -1,3 +1,84 @@
use std::{collections::HashSet, fs::read_to_string};
fn main() {
println!("Hello, world!");
let input = read_to_string("input.txt").unwrap();
let input = input
.lines()
.map(|line| {
line.chars()
.map(|c| String::from(c).parse::<i8>().unwrap())
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
let mut visible_trees = HashSet::new();
println!("size: {}x{}", input.len(), input[0].len());
if input.len() != input[0].len() {
panic!("field not square");
}
let length = input.len();
for i in 0..length {
let rev_i = length - i - 1;
let mut max_values = [-1; 4];
for j in 0..length {
let rev_j = length - j - 1;
if input[i][j] > max_values[0] {
max_values[0] = input[i][j];
visible_trees.insert((i, j));
}
if input[j][i] > max_values[1] {
max_values[1] = input[j][i];
visible_trees.insert((j, i));
}
if input[rev_i][rev_j] > max_values[2] {
max_values[2] = input[rev_i][rev_j];
visible_trees.insert((rev_i, rev_j));
}
if input[rev_j][rev_i] > max_values[3] {
max_values[3] = input[rev_j][rev_i];
visible_trees.insert((rev_j, rev_i));
}
}
}
let greatest_view = input
.iter()
.enumerate()
.map(|(x, line)| {
let input = &input;
line.iter().enumerate().map(move |(y, tree)| {
let mut view = [0; 4];
for radius in 1..length {
let left = x as isize - radius as isize;
let right = x as isize + radius as isize;
let up = y as isize - radius as isize;
let down = y as isize + radius as isize;
if view.iter().all(|v| *v != 0) {
break;
}
if x != 0 && view[0] == 0 && (left == 0 || input[left as usize][y] >= *tree) {
view[0] = radius;
}
if y != 0 && view[1] == 0 && (up == 0 || input[x][up as usize] >= *tree) {
view[1] = radius;
}
if x != length - 1
&& view[2] == 0
&& (right == length as isize - 1 || input[right as usize][y] >= *tree)
{
view[2] = radius;
}
if y != length - 1
&& view[3] == 0
&& (down == length as isize - 1 || input[x][down as usize] >= *tree)
{
view[3] = radius;
}
}
view.iter().fold(1, |p, v| p * v)
})
})
.flatten()
.max()
.unwrap();
println!("Greatest view is {}", greatest_view);
}