- commit
- e49df461ecca8aeb51f36498bd6ea6a90c7ce92f
- parent
- 6d82bb5b76f5e11f770d9751b9b7d15a98411ae9
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-12-03 10:21
2023-12-03
Diffstat
A | 2023/03/input.txt | 140 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2023/03/solution.rs | 103 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2023/03/test.txt | 10 | ++++++++++ |
3 files changed, 253 insertions, 0 deletions
diff --git a/2023/03/input.txt b/2023/03/input.txt
@@ -0,0 +1,140 @@ -1 1 ...........................775.651...............887....79...946...921...493.....942..942.....151....155.................................... -1 2 ......240...................*.....-......................$..*...................*.......%.....+....................956.549.*290.......834... -1 3 .485...+............437......906......%..608.805.725..72.....242....745..61......440................................*..*.........515...*.... -1 4 ..........917.......&....146........790.....*......*....*..........*.....*...............207*......................796..116......../...924.. -1 5 722...323.-................./...410.............72..748.442............384.708...............849..%............................470.......... -1 6 .....*..........................*.....271..691....-...............4*...........388.................448......&........*....848&......751..... -1 7 ....370..$....639.748.......*...467....*.....*........921*909.....................*...32.....................165..452.30.................... -1 8 ........984....*.....*...782........711.....50.172...............61&..........415.803.*.........524.......................203.......106*643. -1 9 ...............57..433.........390....................&../.............*122...........674.........*......................................... -1 10 379..................../.........*........908..477...305.876..*..............297.415*......+.......94........../.....@378.......226..56*.... -1 11 ...*..-......82.......167...936.17..958...=....*...............196......+......*.......-...380.992.............989.........29......*....301. -1 12 ..124..317.....*....................*..........839.......................191.882......231.........+......976.................+......469..... -1 13 ............643................*........778............541........655..............*............*........./............*.................515 -1 14 .....&............498#...&....726.774..............111....*378..................723.221.......473............752....523.638.......789...*... -1 15 .....353................518..........-.........../....*...............*88.........................*..@280..=..-....................-..297... -1 16 ...........279...........................*816.....286.975.&319.....614......694.......799.......503.......861...569.............+........... -1 17 ..474........*.228..............308......................................................*............207........................838..408... -1 18 ...........226./....*................82.........................268/......814.........640.............../..489........719..=..........*..... -1 19 ....83............88.544....250.......=...87..............199.........115*....................................*...377.@.....643........658.. -1 20 ........-...651.............*................&..............................*379.....411...686.397............202.*....../........217....... -1 21 .....781.......*897......630................330.....117.961..........61..543.....#...*.....*.......323.............996.603.......*.......... -1 22 .......................................................*........473....*.....739.184.511..........+......43.833.................953...@..... -1 23 ....110......@471...........*464....@.347......779................/.....205.*.......................681.....@.........................694... -1 24 .........................203......158.-....310./...449...726*982.............437.....+....259...................185......940*702............ -1 25 .....465....*.......747....................*..........*...............................238..&......./..963...755....*........................ -1 26 .....*....687..104..%.........645........959..497..732........988........733.....12...........417.176....$..........176.323....657.......... -1 27 ...566........*...........938*......418......*............925....*28..............-.156........*................................*..#........ -1 28 .............933.......................*....988........../............................*........813.................868*674...375...839...... -1 29 .....................804.......464..452...................................47......324.789..........692*288.................................. -1 30 ...959...........792....*10.....=......................*455.77...827.99....*.........................................166.......8...586...... -1 31 .....*...607......*..............................12.764......*.......*..905....590.236...#.677...823......972..204............*......*...... -1 32 ..661....*........776....938..901.............@.*.........$...216...995...........*....382..*....#....546*.....#...........564........707... -1 33 ......755................*.......*698......315..291.......964................-.......=.....865........................521........150........ -1 34 ........................323............./............973.........*35..........318.....204...........546..+667....214%..*..............973... -1 35 ........143......&725...........619....149..............*235..650.........604..........................*..............195..............*.... -1 36 ................................*.................................926...................@240......+...433..302..672.........977....149..335. -1 37 .......880.......&...............301.512.$.....876......331.897...#..............#...............464......+...........938.........*......... -1 38 ......@....942...603....&....879..........117..........*.....*.............562..905....377*862..............*56.........%........352..*165.. -1 39 .726......*..........239....*.....915..............@...661...905..............*...................466....223.................730............ -1 40 ....*......97..839.......308.........*....115....512..........................497.392.....563........=...............448...........462*884.. -1 41 ....122.........*...471*...........52...&..=...................=..................@.........*...............................531............. -1 42 .........*..522...&.....274...........116......*572...........907..........................161..670@..@....................=........57*..... -1 43 .........28.*.....606.......................925...............................908...86...............78..............712.....813*......16... -1 44 ....549.....512....................................825.....797.......224..660*........@.425*656.........=536..256.......*........599........ -1 45 ...*.............963..................842..704.............+....425..*..............................102.......$....565.179..774/........576. -1 46 ...................*..........................*..............=...*....922........50...262....%............603......*........................ -1 47 .......636.......349...&...224...$............899.........983..319.............#........&...663....*575..%.......95.....383*................ -1 48 ......=...............928........218................84.............964.........953..+...........212.........................857............. -1 49 ............................179.......68......................&....*.................787.............92&.72....455..969...........846..40... -1 50 .993=..../..........110.407*...........%.............164..#....306.215...................552..............*....=...#.....69.602...#...*..... -1 51 ......322..........#...........561..............968..*....913............%..........@586...=.330...........166.............*........863..... -1 52 ............810...........157.*....557.....30.*.....774...................968.601*...........*....491..........557.....83*.................. -1 53 .......*368.*.......842...*...435.-...........65.-................................680.....913....#.......793....*.........87.262....34.-.... -1 54 ....896......875.....*...........................581.957..758............$................................@..981..............#......*.844.. -1 55 ..................957...150.......503................@....*......89....59......261..........653....................................372...... -1 56 ...731...-129..+........*........-......................718.713....*.......197..*......30......+...476............872....................... -1 57 ....*...........671....917.......................800.&......=....197..763....*...96......#.........*......%......*..........739......290.... -1 58 .....234..............................814*251....../.755.............../...375.....................309.914..816...877..=.......$......$..... -1 59 .........543.378.....74.%608.25...755..........237..............834..................431..................../..........585.................. -1 60 ....408...&...*..............*................*.............214*.....................*.........89.475*.......................@..939..824.... -1 61 ...*..........526..........713..&.....132...899..108.75..#..................521....428....97../.......603.....248.........878...&...*....... -1 62 ....383...............873......1....................*....850....862....%......#.=................533.........*.......................863.... -1 63 .............852.........*................578%....................*..492.........905.145.927........*........437.107.....@....29............ -1 64 ......604.......#./531.179..&........56.........921..233.......943......................*..........174...........*.......271.*...32......... -1 65 ........*..619.............588......*............*...*..............918*837.....120.128......508...........536...............558...*638..... -1 66 523....794...-....................451..544....648..365.778.....@.............@.....*............$..%414...*............453#................. -1 67 ..................&......124*...........*...............*...259........696...424...........*...............322..534................*519..... -1 68 ........201*.30...474........567.526..363............%.963......287+......*.........939.964.....994.............*.....-........287.......657 -1 69 ........................709*......=.........854...527................50..591...859....%..........*....196.......188..395..157...*........... -1 70 .281*....878................354.......*221...*............308....309...*.........$..@...72#......577.........................*...734.....481 -1 71 .....9....*.............658........235......767..12..548...=...#.......585..830....609........................603.130.....884...........*... -1 72 ........324........@...*........................*....*........628.............................................*...$...........=......658.... -1 73 ..................139.206....$.....768*........986....311..........967...15...174....100-.....7$..............962....=.........561.......... -1 74 ......521.....154.............318......622...................-.............%...@.................856.......60.........24..481.......520.772. -1 75 .825..#.......*.............................180.............228.11.....173.......128......428.........405.+...68...........=..882......*.... -1 76 ....*.......657...........27....798*460...................@............-..............31.*.....840...........*................@............. -1 77 .965...931............974...*...........................798.................455*.........856......*...809...97..934.740$..570............... -1 78 ........*..511.$427....../..652..-297............296........$........552..........884..................*........%........*........128....... -1 79 ..........-..........207............................=....641.........+..........-..*....43..........329................990...........*...... -1 80 .10...................=..11....&............................./.143........875..732....&.......&............................349.....265...858 -1 81 ...*......222....495%...*...618..322.......%.........116...833....*........*.........776....288....760.........-............-............... -1 82 ....291......*..........453.........*...811...398..............515........365..445....................*.....961.........433......743...$.... -1 83 .............33..................543.........@..........................=...../.....793*...........266..............668...........#.....804. -1 84 ................701....................17*.................449*741.....961......814..........................*245......*...809*............. -1 85 .......206......*....668..728$............529..........*93........................-...833.713..............69.......292........157...224*... -1 86 ..........*585...969............810..522............866..............254.....570........*....*.....588..................+113.......-.....752 -1 87 ................................/......../......257.............119...-..844...*..979..442....169.....=.259......+.............752..401..... -1 88 ...726...967........&.234.................326.....*....590*636...*............130.../.........................933.....652*439...*........... -1 89 .....*......*12..332...-...........500#..........944..............747.......$.....................203....513.......................%864..... -1 90 ....389.&....................*...............938.......893....970.........864........538.755&.258..*........#...............717.96......+... -1 91 .65.....180...&.............864.....169.........*................*...390............*.........*....904.........................*...354...478 -1 92 ....620......472.726.931...............*.......150../.......@....960....................*928.812...........................428......*....... -1 93 ...*................*.................463..........323.....478..........964..........175.........324%........=827......66.......193..303.... -1 94 313.......................@...705.214.....174&........................-.....271........................818...............*.........+........ -1 95 ........171+..830...328..158...*..%..................17....721.....568......../...........949.............*.............608.....90......570. -1 96 ....327..........*....*.......44......................*..................193-.......67.................970......966.503................#.... -1 97 669*..........386..306....+............105............443...........................*........490..130...........*....$..........$62......... -1 98 ......454...............&..954...38....*..........229....................643......388.671....@.......*...8......506....66*148.........$..... -1 99 ......*................259.........*.................*756.......596.........*........................638..+....................%....854..... -1 100 ...700......895..............................757................*.........847..............630*612..................854..606....38.......... -1 101 ...............*.....93.....573......274........*...952..336...................562..................+...637............*.*.................. -1 102 945........../.814..=..........*....*...........38..=............-....&........*..................118......*.........745..855.........367... -1 103 ......676..688..................604..153...............671......513...690....891.%.....101.728..........767......28...................../... -1 104 .........=.......700..222.443............114.....................................458...../....#...................*.........=............... -1 105 ...........660.%...&.....*.....98.232.......*............308.......650..267/..........$............................417.....806.....502...... -1 106 .......276*....500............@.............63.......621*.....520...-........913.....225.........620.597...709*632.............663*......... -1 107 ...................232...149............65.......................&........................228.....%.....-................467............800. -1 108 ..........118........+....*....@.........-.458...737.....-247.........425................/..................574......424*.........421..*.... -1 109 ......158.-....*........564.599......128......*...#..........................419.............764*156.............................*......996. -1 110 ............577.563.....................*...777.......................508..............*827............................*465.....306......... -1 111 .........................*..............848......996*......688....154...*.......%...780......51...410......357.148..856..................... -1 112 ...648.............835.713....*...609.......................&........*..885....494..........*..........661....*............................. -1 113 ...-.....477./693..*........938.....*./...........642..149......465.502......$............=.523.........#.......892................=824..... -1 114 ....................296...........44...707..........+.....*...................462......476........@...............*..........388............ -1 115 .....58...321..............127................................446...............................965....446........114.........*............. -1 116 .........*........951...3....*.................623.263.............=.-....122..........................=....519*...........692.......%313... -1 117 ........943.......*......$....990.......795..../......*..135.....815.483....*..937*.............................634..............771........ -1 118 ............460....757.....@......511/..*............564..-..............340.......109.206.......%785..148...21....................*....&... -1 119 .47.........&...............102........265......555..................182......12*.........................*...%.................788..200.... -1 120 .../............=..................#82..........$.......207.............*863.....751.........251.....641.702.......141..640................. -1 121 ..........23..902.......174...............*.............=.....314...........................*..........*.....*667...........*............... -1 122 .........*...............*.......*766..842.35.......243..........*......@..................57..435....501.285.............964.....*......... -1 123 ..165...100.@512.........292.......................%......79..@...726....341.511*.............*...................573..........602.74....... -1 124 ...*..................................596#...&...............769........................314.397..&31................%..855.................. -1 125 ...6.....673....................898..........836.......827.......+.....-..............................133*766..........*..............290... -1 126 ..........*.........799........*.........629.......634........%.188.103.......594......464.799*295.............895...930.........-....$..... -1 127 .....908..504.......*......603..800..936...*......*.........768..........973...*.......*...............904*16.*................358.......... -1 128 .....@............825..%......&.........*...963.294.74...........%........*....102...967...-343.................#..................94.698... -1 129 .810...................968..............429...........*....950..313..482..397...................33.........@..297..198...114.......*...*.... -1 130 .....-............................554..................................-.......245.$...............991..282.........-...*....161..894..78... -1 131 ..705.....177.....*..872@.285........*.../813.........235....729..........*287..*...472.788.645........................144.................. -1 132 .............*..984.......*........722............496*..........*990....79......715........*............456...................812..470...... -1 133 ............518......@.....950.........712..............981...........................238....579.533........373.466...615/......$.....*907.. -1 134 ..716..907.......761..471..............*......../...........823..+............978*......=.....*.....#......&....*........................... -1 135 ....*...............*........990.331...46....871...........*.....447.723...@...............594...............801......................#757.. -1 136 ...312...*.........211..........*.................90.860...970.........*...375...........*.....-....*779.........&.......................... -1 137 .......692..............602.............................*.............595.............841...166..327......-444....154....................... -1 138 ..............$....316..=.............+978.843........42....135/.+332.........454.........................................707.../......295.. -1 139 .........$....743..../.......-................+........................*990..................343......#.....*...............*....684........ -1 140 ......651.....................644....................887.812........187.................783........749...928.291...........131...........293
diff --git a/2023/03/solution.rs b/2023/03/solution.rs
@@ -0,0 +1,103 @@ -1 1 #[path = "../lib.rs"] -1 2 mod lib; -1 3 -1 4 fn parse(line: &str) -> (Vec<(u32, usize, usize)>, Vec<usize>, Vec<usize>) { -1 5 let mut numbers = vec![]; -1 6 let mut symbols = vec![]; -1 7 let mut gears = vec![]; -1 8 let mut number = 0; -1 9 let mut number_len = 0; -1 10 -1 11 for (x, c) in line.chars().enumerate() { -1 12 if let Some(i) = c.to_digit(10) { -1 13 number = number * 10 + i; -1 14 number_len += 1; -1 15 } else { -1 16 if number > 0 { -1 17 numbers.push((number, x - number_len, x)); -1 18 number = 0; -1 19 number_len = 0; -1 20 } -1 21 if c != '.' { -1 22 symbols.push(x); -1 23 } -1 24 if c == '*' { -1 25 gears.push(x); -1 26 } -1 27 } -1 28 } -1 29 -1 30 if number > 0 { -1 31 let x = line.len(); -1 32 numbers.push((number, x - number_len, x)); -1 33 } -1 34 -1 35 return (numbers, symbols, gears); -1 36 } -1 37 -1 38 fn part1(numbers: &Vec<(u32, usize, usize)>, symbols: Vec<&Vec<usize>>) -> u32 { -1 39 let mut sum = 0; -1 40 -1 41 for (number, start, end) in numbers.iter() { -1 42 let s = if *start > 1 { *start - 1 } else { *start }; -1 43 for x in (s)..(*end + 1) { -1 44 if symbols.iter().any(|s| s.contains(&x)) { -1 45 sum += number; -1 46 break; -1 47 } -1 48 } -1 49 } -1 50 -1 51 return sum; -1 52 } -1 53 -1 54 fn part2(gears: &Vec<usize>, numbers: Vec<&Vec<(u32, usize, usize)>>) -> u32 { -1 55 let mut sum = 0; -1 56 -1 57 for gear in gears.iter() { -1 58 let mut neighbors = vec![]; -1 59 for n in numbers.iter() { -1 60 for (number, start, end) in n.iter() { -1 61 if *gear + 1 >= *start && *gear < *end + 1 { -1 62 neighbors.push(*number); -1 63 } -1 64 } -1 65 } -1 66 if neighbors.len() == 2 { -1 67 sum += neighbors.iter().product::<u32>(); -1 68 } -1 69 } -1 70 -1 71 return sum; -1 72 } -1 73 -1 74 fn main() { -1 75 let mut sum1 = 0; -1 76 let mut sum2 = 0; -1 77 -1 78 let mut prev_symbols; -1 79 let mut curr_symbols = vec![]; -1 80 let mut next_symbols = vec![]; -1 81 -1 82 let mut prev_numbers; -1 83 let mut curr_numbers = vec![]; -1 84 let mut next_numbers = vec![]; -1 85 -1 86 let mut curr_gears; -1 87 let mut next_gears = vec![]; -1 88 -1 89 for line in lib::iter_input() { -1 90 (prev_symbols, prev_numbers) = (curr_symbols, curr_numbers); -1 91 (curr_symbols, curr_numbers, curr_gears) = (next_symbols, next_numbers, next_gears); -1 92 (next_numbers, next_symbols, next_gears) = parse(&line); -1 93 -1 94 sum1 += part1(&curr_numbers, vec![&prev_symbols, &curr_symbols, &next_symbols]); -1 95 sum2 += part2(&curr_gears, vec![&prev_numbers, &curr_numbers, &next_numbers]); -1 96 } -1 97 -1 98 sum1 += part1(&next_numbers, vec![&curr_symbols, &next_symbols]); -1 99 sum2 += part2(&next_gears, vec![&curr_numbers, &next_numbers]); -1 100 -1 101 println!("part1: {}", sum1); -1 102 println!("part2: {}", sum2); -1 103 }
diff --git a/2023/03/test.txt b/2023/03/test.txt
@@ -0,0 +1,10 @@ -1 1 467..114.. -1 2 ...*...... -1 3 ..35..633. -1 4 ......#... -1 5 617*...... -1 6 .....+.58. -1 7 ..592..... -1 8 ......755. -1 9 ...$.*.... -1 10 .664.598..