From 921e669155410dd473109a7eaea6bf377eec68f5 Mon Sep 17 00:00:00 2001 From: javalsai Date: Sat, 7 Dec 2024 00:28:11 +0100 Subject: [PATCH] =?UTF-8?q?performans=20=F0=9F=A4=93=20(absolutely=20crazy?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2024/04/p1/main.rs | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/2024/04/p1/main.rs b/2024/04/p1/main.rs index a596547..b1482d0 100644 --- a/2024/04/p1/main.rs +++ b/2024/04/p1/main.rs @@ -4,29 +4,23 @@ fn main() -> std::io::Result<()> { let args: Vec<_> = std::env::args().collect(); let filename = &args[1]; - let mut contents = String::new(); + let mut contents = vec![]; let mut file = File::open(filename)?; - file.read_to_string(&mut contents)?; + file.read_to_end(&mut contents)?; let a = Instant::now(); - let lines: Vec<_> = contents.lines().collect(); + let lines: Vec<_> = contents.split(|&b| b == b'\n').collect(); let mut t = 0; for (i, ln) in lines.iter().enumerate() { - for (j, ch) in ln.chars().enumerate() { - if ch == 'X' { + for (j, &ch) in ln.iter().enumerate() { + if ch == b'X' { let map = [-1, 0, 1].map(|i| [-1, 0, 1].map(|j| (i, j))); for dir in map.as_flattened() { - if dir.0 == 0 && dir.1 == 0 { continue; } - let r = eq_in_dir( - &lines - .iter() - .map(|ln| ln.chars().collect::>()) - .collect::>(), - (j, i), - *dir, - "MAS".chars(), - ); + if dir.0 == 0 && dir.1 == 0 { + continue; + } + let r = eq_in_dir(&lines, (j, i), *dir, "MAS".bytes()); if r { t += 1; } @@ -42,19 +36,19 @@ fn main() -> std::io::Result<()> { } fn eq_in_dir( - buf: &[Vec], + buf: &[&[u8]], pos: (usize, usize), dir: (isize, isize), - matches: impl Iterator, + matches: impl Iterator, ) -> bool { opt_eq_in_dir(buf, pos, dir, matches).is_some() } fn opt_eq_in_dir( - buf: &[Vec], + buf: &[&[u8]], pos: (usize, usize), dir: (isize, isize), - mut matches: impl Iterator, + mut matches: impl Iterator, ) -> Option<()> { let Some(must_match) = matches.next() else { return Some(());