diff options
Diffstat (limited to '2023/day3')
-rw-r--r-- | 2023/day3/Cargo.toml | 8 | ||||
-rw-r--r-- | 2023/day3/example.txt | 10 | ||||
-rw-r--r-- | 2023/day3/input.txt | 140 | ||||
-rw-r--r-- | 2023/day3/src/lib.rs | 184 |
4 files changed, 0 insertions, 342 deletions
diff --git a/2023/day3/Cargo.toml b/2023/day3/Cargo.toml deleted file mode 100644 index 898e70d..0000000 --- a/2023/day3/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "day3" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] diff --git a/2023/day3/example.txt b/2023/day3/example.txt deleted file mode 100644 index b20187f..0000000 --- a/2023/day3/example.txt +++ /dev/null @@ -1,10 +0,0 @@ -467..114.. -...*...... -..35..633. -......#... -617*...... -.....+.58. -..592..... -......755. -...$.*.... -.664.598.. diff --git a/2023/day3/input.txt b/2023/day3/input.txt deleted file mode 100644 index 898bc27..0000000 --- a/2023/day3/input.txt +++ /dev/null @@ -1,140 +0,0 @@ -............409..........784...578...802......64..............................486.248..............177....................369............... -.....-939..........524#...#....=.......*.........+......90.................................76..615..-..@.....961..........$.......*......... -............951*........................736...955..258....*.....253@.............210.10.....=...*.......776...*....&...............600..274. -152.78..........671.....936.......................*..........14...............................575.=.........214..519.....787.739........*... -...*....591......................514*155..........807...............516.............23...5#.......250.531...................*......-..71.... -.............................................254..........69&........*..............*....................*...............*........785....... -....5....../.42..908*166..242*825.....................19%............148..822......127..+...+...........971...........206.540.753........... -........111.........................%...............$..........635..........*..........222.286..823..........%................&...=630...... -..821&.......815.............424$...303.322.311..156...........*....786.....91..620............*....319......406......187..............&865. -........................&975...............*.........649.40..417.......+.........../............39....................*...........%......... -...300............546...........................640...=...................................319............246....883.253...690...526......435 -.................*......#..............571..121*.........542..938.13...532*....726....795.........%........*.............*...........683*... -......173.568.624....190................*..........*542....................464..*..................519.144..652.65......926................. -.......=....*..............................-...@................................592..658..78*537..........#...................303.200*...... -..780.....716.......858..527.775.....587.314...374.......375....777.166.............................................677*394.....*.....512... -....&..............*...........-......*......*.....900...*.../../............287..255.......431...........104..440..........803..844........ -...............%....875.............920...615.556......488.308....888........@.......$..522*..........511.*............/.....&.............. -........688....778.............410.................+...............*..#322......234...........692....*.....583.240+....800.............&.... -.......*........................*......844-.........683....941..341...............*..........#......637.....................=768..983.80.... -.......312...........113.........858........427.685........................*211..336..........................502........................... -......................*......151........293.+.....*...454................63.............39........831+.........%......./...$................ -..187........677......165....*......104..*.......145.@.........444..767...................*...975................659.352.844....*.160....... -......+.967.#..............116.........+..866...........=.......*......*404..............659.....*...............*............293...*....... -...801....*.....937............................/.........553..623....*........567....244......%...816....994.....510....173........547...... -...........609...............................783.....848..........511.718.....*.............116.........*......................&.......65.46 -102...................356..810......................*.....721..............244...$.....315...........&..605...22..........665.411..../...... -..................956*.....*......523.............622........*.................322........*........703............888.......*.......714..... -...896.....580.............146.....&..861..............327...766..93.......534...........482..327.........494.....*.......978............... -....*.........*..-.....&.........................701.....-.........*...429....................%...$.........*..895..................../..... -..561..517..994.248.596......&...$.....196.701.....*............217...*....160........240..+....265..471..76............509..15........245.. -.........*...............615.801.837......*......661.181...707......613...-.......495......959..........*....#...........*....$............. -.....-...107............@...................&................*.....................*....$............853.....808..249.160.......725......151 -....549......137..........288@...759.$......961....#..........................788.....846......920................../.......774............. -........865...%...993...........#.....850...........636.104..204.192...387...%............382.....+..&.......436........682*.......532...... -........................893*660...........................-.....*.........&......$........../.334....505.+....-..732*................*...... -........./....976....*..........35....178.18*970.752...+..........................567..258.......*.......829...........+..358*..*464..189... -.....676.319..........222......*.................*......559...604.......-.....687.....*..........16..........492......376................... -....*.............157.........909................266..........*.........971..+.....211..885...........$.......%.....@............#.......... -.284.....167.....*....83...........408....290...............538........................../....&.84*...885........575..........511..481...... -............*770..844.=..599..........*......*457.....$861................779..240...$......897..........................520%......*........ -...........................*..972.527.844.........................&........*..........26........957.................787.........759......... -...530#.396&.............670.*.....+.......*.....503*689....486#.558....522........................=..........629..%........................ -..................96*........320..........972...............................$..776.....................755...*...................265*53..265 -....48............................736...........*..........771..85..360..705......*501..793..................685........................*... -.....*...@705.233....648#..........+.........780.....13...=......*....*.........................*..................898%....282........478... -..186.....................369............327.........=.........14...472..........942...*.....817.......611....66-..........&......236....... -..................308*......#.......226.....&..............573..................*....85.9.........801..*..........217*........237*.......... -.........*............728......847...#................+.......*......267.....634.................=......979...........14...............364.. -....99.213.......=........468...............%446...647......%..822..../...........819................*.........469.........70.37.......*.... -.................143..762*....977.........................649..................../.....123....-...902.67..939..&.............*........793... -.......982...=......................................414...................477.........=......266..........=.............622*....672*........ -..........#.797...../608.......173...=.........................111...............219.....252....................438.726.....902.....25.=.... -......-..................863..*......805.9.......107..............*........151.....*........*234...422....995....*.....*................866. -....670...........544.....*....311.......*....$.$............................-..943.......*........*......=.......167...695................. -..................../......508..........278..78.........459+...........................922.201....513.518....985............476%............ -..556......905..341....683........732*..........437.753..........331*..342..374.475..@.................*....*.........591............+972... -.../.........*...*........*...........................*.....833.......*...............566....*..........460..621.836..*..................... -.............627..912......49.........289.....910...737.....*........645.....977..159.....707..104.644............-...872..........&....453. -.......................................*...../...............287.........375*........-.........*....*..723+...256...........361....184.*.... -...%..231.......187......8.....*569.138..................963.........184.........899........571...836..........*...*..........*.........349. -546...*............+....*....29...........885......20......./......................*.........................95.....660........470.......... -.....568..902........178.............313..*.........*...............706.....19....724....338..........880*......701........996......84.701.. -....................................*.....253..535.893........+.............=..............*..............520...............&......-........ -..............&..747............877..990................./.....45.........................604....&...................152......275.....%931.. -......515....26....=..128........*..........%.....753...374...........522*835.........838.....344...222..........602....+....*.............. -.....................*.....975....12......717.966*.............734.............486...*.................*.....634*..........431..%........645 -115.388......#......670...............................251..851....*.....666.....*..887.18..532......661..685.....................947....+... -...*..........977.........308...........279......63....*..........194..*.....886.........*.../.............*......543.419................... -....................355....*....489...............*.....496.............933......714....91.....558*669.....475.../....*..........501........ -...737..807.................545...*..............873............763....................................864..........152............*........ -......*..$...553......695..........623..319........................+..681./....@835..669...........530*.......................402.538....... -....334.....$.............................................186........*.....977.......*.....................82.....950.....985*...........751 -...................222......847.........347..............&.........213............+..168..........820&.......@...*....211............150*... -.....*520......................$.......*......630..............193.......597....266.........744..................950.....*...584............ -..947.......................@.....903.....889*.......693......-.........*......................*365..........846........655...*............. -......*609.........425.478..597.....*..................#..=........=...............469......*............721....*267..........872........... -...997.......975..........*.........419........630.691...646......939.................*..865.933.805*676....*............................... -.........102*....544..984.258.526.........*...=...........................@........473......................932......247...............955.. -.................*......=.......*........553....................517...600..344.....................742...............%....=...........+..... -....................351......970..........................280......*.....*........&.........782........................486..............&... -...........359...........604.......997...274....682.673....*..156.831.392.....@..228.814......*.........145.......835.............222.570... -..694...........+....157.%...848..*.....*.........$....*.246.+.............447.......*......259..@381......*54.....@............%.*......... -.....*.......433....#..........*..594.184...........743............196.........967.987.......................................649...941.@.... -......97......................386...............%........................839..............760.............151...&...344................871.. -.....................186..937.....*528.....263.179....#976....405...................+...............522........65...*...........*........... -......-893........+....*....*..........@.........................#.401.....72+....719.104.....731...*....31#......93..274+....41.348........ -...........854.....855...879.........950.....342....771...............................*.......*....546...................................... -........$......601...........526*943.........*....#..*..............124.&839..#......161....558...............140........................... -.......131.................................665.266...732.....949......*.......31................@754...*...........932*................&.... -...............169....889.....271*613........................*.....194...+............................107..............142....551*925.56.... -........267.....%....*...................................281.750.......563...........848.477..655..........674.............................. -............312....716.......................#.....802.....*.......281......../.........*......*...........*...708.......................... -.......594..*...............359....462*......405.....=...............&.........439.........759....*........987....*330...................... -736....*.....580.....26.......*.........................467.........................456...*.....13.102.460..................693.....960..... -........227..........&...861...523.554..877.............=.....429................./........383...........*......$.......623....*.........651 -....568........988......+..................%.....................*689.......@..691...39.........=.....123.......869...........1.........$... -....+.....892......581*.............876....................................603.........*......399......................927-................. -.........*....-........611............*....+......443.=.....856.%559................679..592....................853.........925...34........ -...26.303.....944...........726.....444.....961....*...433....*......*215...26...95.............82...........................*.....@./...... -..........710......130..........13..............443../.....391....260......&.......*.....751....*...........................508.......555... -.........*.....958*.....93..235*......................460........................491.......*.....324.........$409..972...2.................. -....352..534...........*........./.........#.................580.........834................973......102.632......*.......*............48... -.................&...820.206..890..66....683....................%...*493.....256...$....................*................434.....884..&..... -.585/.........664........*...............................%...............512..*..914..188....*................941*...........282....@...+... -..........521.........168..../....94.139..............793...............*....827.....*....215..........24.............................787... -..790........*...............148...&.*.........................172.205..728...........153.......176......*963..649.....628......19.......... -......883....806.....686..............226...763.......................#...........229.............*...........*....321..-....../.......60... -.495....*....................................=..........21..357...839........*968...*............469........339....................../.*.... -......457.495.........@.....-.....89.613..........214..*......*.....$.....958.......341...%.....................645...274..37......82..465.. -...70.................932..83.787..*..$..........$.....218..787............................7..287...............*.......*....+.............. -....*..104...559...92...........*.373....$.............................163...........304.........*...........667.....547..67................ -.851................*.....267.189.........312...434...$837.........344.#..............=......604.679.......................@................ -....................883....-......258.896....................*.....-.......687..488............*...................615$..................... -.746................................*...+.173*605.....609...812........721..=..*...........582..906......../...85.........940.409..928...... -.......................136......49.493............../....@..............*.....721....857...*.............62......-...465....*..=......*..... -.................736.............*.........*.....968..........685..949.755............*.....37..*.............=....................*..53.... -466..621....812=..*......203....151.....828.48............871*......*............/.....764.....384.........37..905.............&.314........ -.....*.............575....*...........8..........#244............708...........131.....................546..*........641....189............. -...801........554..........772.............989.......................................751...523...117......*..538........*..........*........ -.......82/........+..202........*749..........*../....402...140%......................+.....*.......#..202............93..604*..438.567..128 -.307............564..........353............442...153.*.......................516..5.......414................131.......................*... -...........765.........259.......148...632..................722..348&..115.........-.............195.$186.729.......19*................602.. -...69.249....$......+.*......452..*.........288.........975....&......../.....865.................*.........*...744....423........756*...... -...*...=..........882..801..../..455..........=............-.........16........*..957..841......912..581....887..-...........745......464... -....62.................................734......544..........898.....*.......548..=....*.............+.............516..632....*............ -...............$..............977%......&...512*..............*.......473...............985.678..128.............+...*.....+..330........... -..942........181......831$................................430..399...........637*356..........*...../...........656...500.........135*403... -...*.........................501.6@..307....174*722..........*........................*281.663..............101............................. -.997..53.......-.......................*....................67.324%.117........=...227......................./.............385.......198..26 -.......@..634.669...............743.....869..........233...............*......948..........................#....817.......&...........*..... -.........%.........280..+.........-.66.............%...+......393.999..745..$.......$........472..940.......70.....*........$......+..615... -....................@..718..%464....*...........797..........*...............134.....38..560*........*..............388......307...49....... -..113.......274.800..............992.......373#......791.....775.873.................................227..849=.357.......................... -....*..........*........75..........................*....775........*..179......................................*......77.........=293..987. -...501..............766*...............26*805......692......*.....917....#.........................+.....483.413..........810...........*... -.......358.160..............555...798......................684.....................676..........229......*........+..815.................657 -..........*....432.........-......*..............................550....795...816...$.................758........193....-.......222%.666.... -......139...$.....#.894..........226.....826..........*248..850$..........#..*....@...........895*..8.....340.+...........922.........=..... -..892*....162.........*..................@.........249...........*............845..902...+................#....800..974....*................ -....................86...337...............710....................143.....................179.....976.......................419.........468. diff --git a/2023/day3/src/lib.rs b/2023/day3/src/lib.rs deleted file mode 100644 index e70b994..0000000 --- a/2023/day3/src/lib.rs +++ /dev/null @@ -1,184 +0,0 @@ -#[derive(Debug)] -struct Digit { - value: u32, - s: usize, // start index - f: usize, // start end -} - -#[derive(Debug)] -struct Symbol { - elem: char, - i: usize, -} - -fn parse(s: &String, border: &i32) -> (Vec<Digit>, Vec<Symbol>) { - let n: i32 = s.len() as i32; - let chars = s.chars().rev(); - - let mut pos1: i32 = -1; - let mut pos2: i32 = -1; - let mut incr = 1; - let mut digit = 0; - let mut symbols: Vec<Symbol> = vec![]; - let mut digits: Vec<Digit> = vec![]; - let mut multiples: Vec<usize> = vec![]; - - for i in 0..150 { - multiples.push(*border as usize * i); - } - - for (idx, ch) in chars.enumerate() { - if ch.is_digit(10) { - if pos2 == -1 { - pos2 = n - idx as i32; - } else if multiples.contains(&idx) && pos2 != -1 { - pos1 = n - idx as i32; - digits.push(Digit { - value: digit, - s: pos1 as usize, - f: pos2 as usize, - }); - incr = 1; - digit = 0; - pos2 = n - idx as i32; - } - digit += ch.to_digit(10).unwrap() * incr; - incr *= 10; - } - - if !ch.is_digit(10) { - if digit != 0 { - pos1 = n - idx as i32; - if pos1 == -1 || pos2 == -1 { - panic!("wtf is that?!"); - } - digits.push(Digit { - value: digit, - s: pos1 as usize, - f: pos2 as usize, - }) - } - pos2 = -1; - incr = 1; - digit = 0; - - if ch != '.' { - symbols.push(Symbol { - elem: ch, - i: n as usize - idx, - }) - } - } - } - if digit != 0 { - pos1 = 0; - if pos2 == -1 { - panic!("wtf is that?!"); - } - digits.push(Digit { - value: digit, - s: pos1 as usize, - f: pos2 as usize, - }) - } - - digits.reverse(); - symbols.reverse(); - - (digits, symbols) -} - -pub fn part1(input: &str) -> u32 { - let mut res: u32 = 0; - - let arr: String = input.split('\n').map(|c| c.chars()).flatten().collect(); - let border = input.find('\n').unwrap() as i32; - - let (digits, symbols) = parse(&arr, &border); - - let mut valid_s: Vec<usize> = Vec::new(); - for symbol in &symbols { - valid_s.push(symbol.i - 1); - } - - for digit in digits { - // 13 with border=10 - // --> 12, 14, 2, 3, 4, 22, 23, 24 - let mut discover: Vec<usize> = vec![]; - for i in digit.s..digit.f { - let mut js = vec![ - i as i32 - 1, - i as i32 + 1, - i as i32 - border - 1, - i as i32 - border - 0, - i as i32 - border + 1, - // i as i32 + border - 1, - i as i32 + border - 0, - i as i32 + border + 1, - ]; - - if digit.f as i32 + 1 >= border { - js.push(i as i32 + border - 1); - } - - for j in js { - if j >= 0 - && !((digit.s..digit.f).contains(&(j as usize))) - && !(discover.contains(&(j as usize))) - { - discover.push(j as usize); - } - } - } - - for d in &discover { - if valid_s.contains(&d) { - res += digit.value; - break; - } - } - - discover.sort(); - } - - res -} - -// pub fn part2(input: &str) -> u32 { -// let mut res: u32 = 0; -// -// res -// } - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn example_part1() { - let input = include_str!("../example.txt"); - let result = part1(input); - assert_eq!(result, 4361); - } - - #[test] - fn input_part1() { - let input = include_str!("../input.txt"); - let result = part1(input); - assert_eq!(result, 556367); - } - // - // #[test] - // fn example_part2() { - // let input = include_str!("../example.txt"); - // let result = part2(input); - // assert_eq!(result, 2286); - // } - // - // #[test] - // fn input_part2() { - // let input = include_str!("../input.txt"); - // let result = part2(input); - // assert_eq!(result, 71585); - // } -} |