diff --git a/src/main.rs b/src/main.rs
index 03ed285..5d26c58 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,4 +1,5 @@
pub mod year_2023;
+pub mod utils;
fn main() {
println!("Hello, world!");
diff --git a/src/utils/input_reader.rs b/src/utils/input_reader.rs
new file mode 100644
index 0000000..e7b2fb4
--- /dev/null
+++ b/src/utils/input_reader.rs
@@ -0,0 +1,13 @@
+// https://doc.rust-lang.org/stable/rust-by-example/std_misc/file/read_lines.html
+use std::fs::File;
+use std::io::{self, BufRead};
+use std::path::Path;
+
+
+pub fn read_lines
(filename: P) -> io::Result>>
+where
+ P: AsRef,
+{
+ let file = File::open(filename)?;
+ Ok(io::BufReader::new(file).lines())
+}
\ No newline at end of file
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
new file mode 100644
index 0000000..44b92ab
--- /dev/null
+++ b/src/utils/mod.rs
@@ -0,0 +1 @@
+pub mod input_reader;
\ No newline at end of file
diff --git a/src/year_2023/day_01_trebuchet/part_one.rs b/src/year_2023/day_01_trebuchet/part_one.rs
index 98fa680..59e923a 100644
--- a/src/year_2023/day_01_trebuchet/part_one.rs
+++ b/src/year_2023/day_01_trebuchet/part_one.rs
@@ -1,10 +1,7 @@
-// https://doc.rust-lang.org/stable/rust-by-example/std_misc/file/read_lines.html
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+use crate::utils::input_reader;
pub fn part_one() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut result = 0;
for line in lines {
@@ -15,14 +12,6 @@ pub fn part_one() {
}
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
-
fn parse_line(s: &str) -> u32 {
const RADIX: u32 = 10;
diff --git a/src/year_2023/day_01_trebuchet/part_two.rs b/src/year_2023/day_01_trebuchet/part_two.rs
index 37c7ce0..0f3ae59 100644
--- a/src/year_2023/day_01_trebuchet/part_two.rs
+++ b/src/year_2023/day_01_trebuchet/part_two.rs
@@ -1,10 +1,9 @@
use std::collections::HashMap;
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+
+use crate::utils::input_reader;
pub fn part_two() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut result = 0;
for line in lines {
@@ -15,13 +14,6 @@ pub fn part_two() {
}
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
fn parse_line(s: &str) -> u32 {
const RADIX: u32 = 10;
diff --git a/src/year_2023/day_02_cube_conundrum/part_one.rs b/src/year_2023/day_02_cube_conundrum/part_one.rs
index f14bcbf..45c725a 100644
--- a/src/year_2023/day_02_cube_conundrum/part_one.rs
+++ b/src/year_2023/day_02_cube_conundrum/part_one.rs
@@ -1,9 +1,7 @@
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+use crate::utils::input_reader;
pub fn part_one() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut result = 0;
for line in lines {
@@ -14,14 +12,6 @@ pub fn part_one() {
}
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
-
fn process_line(s: &str) -> u32 {
let v: Vec<&str> = s.split(':').collect();
diff --git a/src/year_2023/day_02_cube_conundrum/part_two.rs b/src/year_2023/day_02_cube_conundrum/part_two.rs
index 671eb80..7b42d58 100644
--- a/src/year_2023/day_02_cube_conundrum/part_two.rs
+++ b/src/year_2023/day_02_cube_conundrum/part_two.rs
@@ -1,7 +1,6 @@
use std::cmp::max;
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+
+use crate::utils::input_reader;
struct Game {
red: u32,
@@ -10,7 +9,7 @@ struct Game {
}
pub fn part_two() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut result = 0;
for line in lines {
@@ -21,13 +20,7 @@ pub fn part_two() {
}
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
+
fn process_line(s: &str) -> u32 {
let v: Vec<&str> = s.split(':').collect();
diff --git a/src/year_2023/day_03_gear_ratios/part_one.rs b/src/year_2023/day_03_gear_ratios/part_one.rs
index e7c5ad1..8d6e24c 100644
--- a/src/year_2023/day_03_gear_ratios/part_one.rs
+++ b/src/year_2023/day_03_gear_ratios/part_one.rs
@@ -1,6 +1,6 @@
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+use std::{fs::File, io};
+
+use crate::utils::input_reader;
enum Engine {
Symbol(char),
@@ -9,7 +9,7 @@ enum Engine {
}
pub fn part_one() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let matrix = create_matrix(lines);
let result = process_matrix(&matrix);
@@ -17,13 +17,6 @@ pub fn part_one() {
}
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
fn create_matrix(lines: io::Lines>) -> Vec> {
let mut matrix: Vec> = Vec::new();
diff --git a/src/year_2023/day_04_scratchcards/part_one.rs b/src/year_2023/day_04_scratchcards/part_one.rs
index 6c5bcdc..35ee2cf 100644
--- a/src/year_2023/day_04_scratchcards/part_one.rs
+++ b/src/year_2023/day_04_scratchcards/part_one.rs
@@ -1,10 +1,9 @@
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
use std::collections::HashSet;
+use crate::utils::input_reader;
+
pub fn part_one() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut result = 0;
for line in lines {
@@ -46,10 +45,3 @@ fn process_line(s: &str) -> u32 {
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
\ No newline at end of file
diff --git a/src/year_2023/day_06_wait_for_it/part_one.rs b/src/year_2023/day_06_wait_for_it/part_one.rs
index 93d1e1e..12c567a 100644
--- a/src/year_2023/day_06_wait_for_it/part_one.rs
+++ b/src/year_2023/day_06_wait_for_it/part_one.rs
@@ -1,9 +1,7 @@
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+use crate::utils::input_reader;
pub fn part_one() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut margin = 1;
let mut race_results: Vec> = Vec::new();
@@ -41,10 +39,4 @@ fn process_race_result(time: u32, distance: u32) -> u32 {
return win_count;
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
+
diff --git a/src/year_2023/day_06_wait_for_it/part_two.rs b/src/year_2023/day_06_wait_for_it/part_two.rs
index dfa2ab6..7f19ccd 100644
--- a/src/year_2023/day_06_wait_for_it/part_two.rs
+++ b/src/year_2023/day_06_wait_for_it/part_two.rs
@@ -1,9 +1,7 @@
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::path::Path;
+use crate::utils::input_reader;
pub fn part_two() {
- if let Ok(lines) = read_lines("./input.txt") {
+ if let Ok(lines) = input_reader::read_lines("./input.txt") {
let mut race_result: Vec = Vec::new();
for line in lines {
@@ -38,10 +36,4 @@ fn process_race_result(time: u64, distance: u64) -> u64 {
return win_count;
}
-fn read_lines(filename: P) -> io::Result>>
-where
- P: AsRef,
-{
- let file = File::open(filename)?;
- Ok(io::BufReader::new(file).lines())
-}
+