diff --git a/2023/day3/Cargo.lock b/2023/day3/Cargo.lock index 4104d70..8a43e04 100644 --- a/2023/day3/Cargo.lock +++ b/2023/day3/Cargo.lock @@ -2,6 +2,60 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "cute" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e700c2d1c3feea9b695e79b2dfeeb93040556a58c556fae23f71b1e6b449fd" + [[package]] name = "day3" version = "0.1.0" +dependencies = [ + "cute", + "regex", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" diff --git a/2023/day3/Cargo.toml b/2023/day3/Cargo.toml index 6b20f5c..93c7318 100644 --- a/2023/day3/Cargo.toml +++ b/2023/day3/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" edition = "2021" [dependencies] +cute = "0.3.0" +regex = "1.10.6" diff --git a/2023/day3/src/main.rs b/2023/day3/src/main.rs index d2839fd..6f0bbcb 100644 --- a/2023/day3/src/main.rs +++ b/2023/day3/src/main.rs @@ -1,44 +1,39 @@ -use std::{fs::File, io::{self, BufRead}, path::Path, process::exit}; -#[derive(Debug)] -struct Coord{ - line_index: usize, - char_index: usize, -} - +use core::num; +use regex::Regex; +use std::{ + collections::HashMap, + fs::File, + io::{self, BufRead}, + path::Path, + process::exit, +}; +#[macro_use(c)] +extern crate cute; fn main() { - let symbol_ignore_list = ".123456789"; - let mut result = 0; - // symbol_array is a list of a list of coords. - // each list this array represents a line - // inside the line is the list of the coords of each symbol - let mut symbol_array: Vec> = Vec::new(); + let ignore_list = "01234566789."; // File hosts.txt must exist in the current path if let Ok(lines) = read_lines("./input") { // Consumes the iterator, returns an (Optional) String - let lines_array = lines.flatten().collect::>(); - // collect a list of all symbols - for line_index in 0..lines_array.len(){ - let mut line_symbol_array: Vec = Vec::new(); - for char_index in 0..lines_array[line_index].len(){ - let cur_char = lines_array[line_index].chars().collect::>()[char_index]; - if !symbol_ignore_list.contains(cur_char){ - let c = Coord{line_index:line_index,char_index:char_index}; - line_symbol_array.push(c); - } - } - symbol_array.push(line_symbol_array); - } + let lines_array: Vec = lines.flatten().collect::>(); - for line_index in 0..lines_array.len(){ - for char_index in 0..lines_array[line_index].len(){ + let mut symbols: HashMap<(i32, i32), Vec> = c! {key => Vec::new(), for key in c![(line_index as i32, char_index as i32), for char_index in 0..lines_array[line_index].len(), for line_index in 0..lines_array.len()]}; + println!("{symbols:?}"); + exit(0); + for (line_index, line) in lines_array.iter().enumerate() { + let digit_regex = Regex::new(r"\d+").unwrap(); + for finding in digit_regex.find_iter(line) { + println!("{}", finding.start()); + } } } } // The output is wrapped in a Result to allow matching on errors. -// Returns an Iterator to the Reader of the lines of the file. +// Returns an Iterator to the Reader of the lines of the file.result fn read_lines

(filename: P) -> io::Result>> -where P: AsRef, { +where + P: AsRef, +{ let file = File::open(filename)?; Ok(io::BufReader::new(file).lines()) -} \ No newline at end of file +}