diff --git a/day3/.gitignore b/day3/.gitignore deleted file mode 100644 index eb5a316..0000000 --- a/day3/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target diff --git a/day3/Cargo.lock b/day3/Cargo.lock deleted file mode 100644 index 4104d70..0000000 --- a/day3/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "day3" -version = "0.1.0" diff --git a/day3/Cargo.toml b/day3/Cargo.toml deleted file mode 100644 index 898e70d..0000000 --- a/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/day3/input b/day3/input deleted file mode 100644 index 4eccb80..0000000 --- a/day3/input +++ /dev/null @@ -1,140 +0,0 @@ -...733.......289..262.....520..................161.462..........450.........................183............................................. -....*....................*.............707.352....*............/.....................801...@...............333..196........484.635......287. -....42.........131....913..............*......&..........634..................440..&...............83.....@...........404$..=....*..423.*... -618.......272....*.........&......547.344...............#............689.589.*....150......382=................................168......433. -..........=...............253.102*.........#......78.......804..........*........................858.........................-.............. -...69.......*37...510.797...........596.946........#..................................602.175...............203..100..........681.......546. -...*.....110.....*......*..........*..........396......858=.......381....................*.......246*637..........=..391+................... -...973........274..551.............576.21@.......$..................*.......................................176............181.883......*... -.......223............+............................649.701.936...17..482..........80...........210.......+...=.........563.......*...222.... -.373..*..................532....707.......956....@..+.....*......*...........+927.*......698......+....763.........275*.....27..498......... -....*......................+......*.........*..719....540.........24...=...........39...*...................514.........126..#.............. -.....974.......952*308..@..........965....450............*4.343......772../..............437............=....*............./.....309........ -............58..........840.....34................877........$............189..................*186......657.670................&.......854. -....22.406..*......883............*......880...........939...................................58.....387..................*.................. -......*....587.........564/......599.......*...........*......................831.891/...552..........$.534+.....%802.975.960.346*.......... -.792+..............828................-807.6...........326....324...722...334..*...........*................................................ -.....................*.......................895..764*.........=...*........*..611..........79.......461@..546*940...818.346..........247... -....%....473......................288.......*....................932.....590...........918......791..................................*...... -.....621...*........................*....129....425.10.....*.....................419....*.........*...166......#11...................831.... -119........302.832.............159.506................*.229.....493....39...............587....523.......*..........610...805.559........... -......971.......*..........229*..........961........139..................+....411..................554....26.90.....$........*....-......... -...........463.615...................315....#...................................-...422.......109.-............*247................231.56... -..279*159.*...........126...569...............906..20..........990..........27.........%.......*.............................960-......./... -...........364....812*.......*..$.........812*....*.....369....&......176......................15.346#...#.....908...828..........-650...... -.842*771....................189..9...............42...............897*...............479.................99.....+.......*................... -................842*356.849...............336.......201................412......./...@...........205....................956....*319.383*.... -...438....&................*......../.......*.../...*....&.......62...*........348..............*....................54.....302.........298. -......$..318................264.....28...259..824..306...249.......&.392...444............889#..418....945...496..../....................... -................610.160......................................................%.699...987......................*............................. -..........@125.....*..............292..#....514..........................165....*...*....&.....*672.....551.194.426......53...500.599...278. -.275.192.........................*....854..#..............190............$.....40..662.706..774.........$................../..*......*...... -....*.........*840....*638.....82...................520...*................................................../.190...719.......34....620.... -...........532.....521................................*...423..75..........+....-........#...29.......258.605.....*..-...................... -...........................37........../354.%453.....248.........*...561.481....727....437........969...*......243.......................... -..................................183.........................+..250...+...................312.....=....150............@...229.............. -...624...454*710..../..........=..*......../........%30....308..............................*................+...381..941........461.341.... -......=............19.........297.......213..........................%............*522......442............962...-............92..-.....*... -.................................................324.663............775...290=.301...............=...15........=....780..................562 -747........................438...35...806*.......*......................................%396..508......*700...16..-..$..230....443..617..... -.......$.........447......*...............336..424.........618........-..276......260............................452......#......*...*...... -....824..@916....%...488..145....%.....55..........821.....#.....620.773....*116..*.......384............156.972................974..872.... -...................=...........494.....*......609................*...............768..195..*......108/..........*......440.................. -...187...........135.=.....44.........860..........$.......+..923...........966..........#..136.................423.......#....185.......... -.....*....298........761.........................217....157..................*.....................292....268........#........./............ -..789........../.375.........919.......425.........................542.....691..69..........184......*.......*.....578............531....... -.......740..619..*..............=........%....788.....+..324..........*..........*......531..*..=82....962.409.690..........981............. -......*...........652..+.........................*....32.#...........53...........761...*...353.....43*.......................*....6....611. -....589......../........190.362@....961...........917......*...........................165...............&..718...............633...*....... -.............781...565...............*................&..324...............................339..........964..+..........%..........427..312. -.........927.......*........#260......919.......828..469........585..........803............/...&.......................365................. -....406..........190........................308.*.................*.............*2.803&.........417....=............................955..126 -.....#...61.75.......149....293.768....678#......675............449.....@...............%...............347......301.....-.490.....*........ -............*........*.........*.............751........................888..&..348..49.747.........................*.318..#....888......... -..........160......335.................455....*.......761...................564..*............*926...654...../....907................857.... -.....446.....................@....915.....&....639...=...........285..............567......862................731..............9........*... -..........513.............694..........$...............233..721.&................................806.....101.........729.......@.........292 -...........*.....565..................329................*..*........137......$849...=773...........=...*.............*..+..........32...... -...359.277..849.....*399..................274....535....348.950.....*...............................................553..607......../....... -.....%.*.................*...146.564.818....*.....*................438..............343..945......85............162......................... -...#...67.374..*593.....740......*......*..553...795..664...$................493#....*............-...............*...971................... -...510.....+........843.......791..277.................*....958....................489..#.................*657.213.....*...610.....193...... -........*......#....#.................#.......$..&12....531......167......659*...........521...157*....896...........503......+.......*241.. -257..171.245....959........................109................+...............454..................239...../................................ -...*...............................................#..........203...%...&..............359.330.846........751...382.985&.........646$..#.... -..624........453..................870......890#...662.............371..311...739..........*.......*.............*............=.........817.. -..................................*....................250.....54............*......../..........182...........237.....261@.250............. -................743.......946.....943.....414#...80....@.........*..751............159..448..............91.............................&529 -683....@....370..............*........569..........$........131...........@34..........*....736.........*...434*929.........127............. -...*.110.....*....48..........644....*....467.................*...............92.....673.......*718.....697.............979.&............... -.745.......503.......288..827.....911.......+.......79..290.191..........$....*....................................230..........517......... -.........%.....551..=.....#...........192.....917..&............597...479.....316.743...%.........#................*........122..*.......... -....529.461.../..............793.........*633..*.................%..................=.604.........320.......393..599.........*....717....... -768...*...............=567.....-.144..............545................6....591..............216*.......73..*....*........215+.842............ -.....783....855............196......*.........909..*......537.......*......=....435............874.../...902.657........................@449 -.............*........%510........28..........*...605.....@.......468............#.....630........................418@..............701..... -......397.....748........../...+........487..521......934...................&992.....-.....160.......477.....-.......................*...... -.916.................476.651..462..........%...........*...464......................425....*...........*..531...735....=..878.....853....... -....*...............*.............*..................965...*.........754..3..657.......................92..........@..838................... -.....116.....469...498........537..666....622&............237.......*..........*....204...........242.........&...............599=.......... -..............-................../.............283=...........283#.919.........638.*.........452.....*794......204.326...................168 -...........................541........................544.............../183........67..903+........................*....75.512..605........ -860..............*.........*.............455....730....*......................143................@....-.....=...366.......@......*...+59.... -...*..............447....916.....127........+.....*.....60................./....*...............572.658...891...+...300.....674.733......... -.768................................*.-..........522.28.......870.....-....89./......764*...........................*........%.............. -............606....*...................798..............298...*......342......430........668.........485.270.265/..893..............=....524 -......#.880*.......88..907.........239..........509....=......406.+..........................264........*................829........991.%... -....850.................%.....&913....*...........*...............302..&228.......%601....63*......414....*156.............&...310.......... -.............@....184.......=.......260..........748........................149................................895.....697.......*.66....... -..........483.......*....500..970.......88..941...........25.....623...436...*.....................278..........=......*......522..*........ -................................*.........*.-.......885....*.......#....$..848........260.........-.....579.........950...........948....... -...........270..........+....$..736.....245.........*....936.512........................*...@..........*.....$.&.........790................ -.....................634...764....................488.........#......454...............46.995........344...59..135..........#.@851...@949... -808.......214.............................................610...................................185*........................................ -...........*.............+...........812........606..........*.................383..................218...355/................804.@687...... -.....751.476......145.....991.314.........................123.....917......434....*.634..&....@.................805....15......*............ -......#......25......*884......*..@......526*.................*20....*....*.....328.$....672.245....*392.423$...-.....*......83....484.581.. -..............................440.759............124*397...779.......752.303.....................764.................376.806......*....*.... -.401..976...75....765.......................%.......................................430...................................*......796....82.. -........*...&......*......474...2.-351....287.....=........@.......%....%....*731......$.......=....976.........960#.381..192............... -........808........959.......#.....................322......243...534.134.828............*....95.........241...........*.......388...567.... -....$.........511......435.........825..................................................742...............&........%....888...#............. -....53...........-....................$.......-...........................191.....933........454...................649..........=........... -.....................993..430*....624........817.102.......660...............*.../.....157/...*...............................845........... -.....&.....466..692.....*....../.....*.................987.........381....746..................744...........722.........340................ -..526.........*...*......74..810....257.........-....../............*...........941..898..................../......769...=...480..$...@..... -........658...338.107..+.................563..550........388*....542.............+....&........112......572........&........*....553...588.. -631........#..........641..759......880.@....................740........247....................*...........*............$....310............ -..........................@.........*.............888....&........-.....*....3....154....790..24..847/......767......933..............#..... -.....790...684....669............626....324....@.......862......77..+....627..*......*....*.....................809*.............922..913... -......*.............*.....*243..................372..........+.......878.......155.36...656....%..........917.............#.....*........... -....935....184/....888.357.....917..797....293...............427............................665..766.........*.........986.......671........ -................................*..................................93.247................$..........*641....598..........................459 -........................922*295..664....&..........188%.481..............*.............35.............................806.......107*32..*... -..........261.$113.....................456...................916..480....942.848.....................781*3.146..168....*......=..........222 -137.......*.................243..............783*......940......*....*........*......155......*25...........*...$...902........217.......... -.../....460.....140..170.........................283..*......647...501...-.359...365.......491.........869..103............................. -...............*......$.........941..................75................282....../...............786*.....*......741.686......24............. -527........................*109.*...522..................*79.....#575...............................810...373..*......*..444*............... -...*..&37...............331.................714*..............................62$...43..%.......................983.446.............79...... -886.............................................40.................506.421..............726............171...............676*964.....*...... -................651#...301..500..497.......601*......%...263*675......*.......136*56..................*.............836...............264... -........229....................#...&...156.....495..769......................................597.......355.............#..365...379......... -....539.......%...933...................*..138..................402...730.......................*718.......12................$.*............ -....*........63...*....................368.....691....................*..............................#...../.....772............116......... -....501............777.......673..728......613.&...467....688.../..526...387...726.......@568.260..456..............*.......64.............. -403...........................*.....................*.....*...311.......&.....*....387.........*.......437..$901...744.929.................. -...*.......................825.........&...........867.........................994...@........346.......................*.............285... -....260........892*.................294..................................#............................................172.....730........... -........743........610.........954......44@.46....606$..................718......963.970.........863.....772..............*......*.......... -284.......*............950.....*..............@..................=.............*......%.............*425.../..=625.....479.305.331...-...... -...*...139................*...976........32........-.............655..........233.373.....870..431..................................17...... -399...........820........844.........%....../744.353.&...................370........*......*...........@...135..700............*............ -....*364.#....../....266...........295................486..........932..........98.311....319..........599....*.&.......98.#....202......... -.........768.........*.........982...........................413....*....185.....+................637.......48...........*.132.............. -.....................239........*.....................551.......*38.111....*.@.....778...856*25........605...../....355.........230......... -...105..........*.............879........264....177.....*.783............839.682......*..............*.....-....756....*...415.*.....589-... -.............438....................428....*.........465.....*194....................803....100...955.238..836.........767.%...555.......... -.....86....&........702........./..*.......363.........................=630.737#............%...........................................259. -......*....256.......*.......+..57..806.......................591*............................*348....829...................+460............ -.....................244....6.....................................789......................687.............................................. diff --git a/day3/src/main.rs b/day3/src/main.rs deleted file mode 100644 index 31ee0b7..0000000 --- a/day3/src/main.rs +++ /dev/null @@ -1,112 +0,0 @@ -use std::{ - fs::File, - io::{BufRead, BufReader}, - ops::Range, -}; - -fn main() { - let grid = read_grid(); - let grid_ref: Vec<_> = grid.iter().map(AsRef::as_ref).collect(); - let numbers = Number::discover(&grid_ref); - let part1_result = part1(&numbers, &grid_ref); - let part2_result = part2(&numbers, &grid_ref); - println!("part 1: {part1_result}\npart 2: {part2_result}"); -} - -fn part1(numbers: &[Number], grid: Grid) -> i32 { - let mut total = 0; - for number in numbers { - if number.is_part(grid) { - total += number.value; - } - } - total -} -fn part2(numbers: &[Number], grid: Grid) -> &'static str { - "unsolved" -} - -type Grid<'a> = &'a [&'a [char]]; - -fn read_grid() -> Vec> { - BufReader::new(File::open("input").expect("input")) - .lines() - .map(|line| line.expect("read").chars().collect::>()) - .collect() -} - -#[derive(Debug, Default, Clone, PartialEq, Eq)] -struct Number { - value: i32, - line_number: usize, - location: Range, -} - -impl Number { - fn discover(grid: Grid) -> Vec { - let mut numbers = vec![]; - for (line_number, line) in grid.iter().enumerate() { - let mut i = 0; - while i < line.len() { - let mut chr = &line[i]; - if chr.is_ascii_digit() { - let start = i; - let mut text_of_number = String::new(); - while i < line.len() && line[i].is_ascii_digit() { - text_of_number.push(*chr); - i += 1; - if i == line.len() { - break; - } - chr = &line[i]; - } - numbers.push(Number { - value: text_of_number.parse().expect("parse number"), - line_number, - location: start..i, - }); - } - i += 1; - } - } - numbers - } - fn proximity_check(&self, grid: Grid, check: impl Fn(char, (usize, usize)) -> bool) -> bool { - for digit_index in self.location.clone() { - for xoff in [-1_i32, 0, 1] { - for yoff in [-1_i32, 0, 1] { - if xoff == 0 && yoff == 0 { - // skip the actual number - continue; - } - let line_number: i32 = self - .line_number - .try_into() - .unwrap_or_else(|_| panic!("invalid line number {}", self.line_number)); - let line_number: usize = - (line_number + yoff).max(0).try_into().unwrap_or_else(|_| { - panic!("bad yoff {yoff} at line_number {line_number})") - }); - let y = line_number.min(grid.len() - 1); - let line = grid[y]; - let digit_index: i32 = digit_index - .try_into() - .unwrap_or_else(|_| panic!("invalid digit {}", self.line_number)); - let digit_index: usize = (digit_index + xoff) - .max(0) - .try_into() - .unwrap_or_else(|_| panic!("bad xoff {xoff} at digit index {digit_index}")); - let x = digit_index.min(line.len() - 1); - let chr = line[x]; - if check(chr, (x, y)) { - return true; - } - } - } - } - false - } - fn is_part(&self, grid: Grid) -> bool { - self.proximity_check(grid, |chr, _| chr != '.' && !chr.is_ascii_digit()) - } -}