Start implementing day 4
This commit is contained in:
@@ -1,3 +1,72 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
//https://adventofcode.com/2024/day/4
|
||||
//
|
||||
// Run command: cargo run ./input.txt
|
||||
|
||||
use std::env;
|
||||
use std::error::Error;
|
||||
use std::fmt::Display;
|
||||
use std::fs::File;
|
||||
use std::io::{BufReader, prelude::*};
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Crossword {
|
||||
data: Vec<Vec<char>>,
|
||||
width: usize,
|
||||
height: usize,
|
||||
}
|
||||
|
||||
impl Crossword {
|
||||
fn new(file: File) -> Result<Crossword, Box<dyn Error>> {
|
||||
let mut input_buffer = BufReader::new(file);
|
||||
|
||||
let mut data: Vec<Vec<char>> = Vec::new();
|
||||
|
||||
let mut first_line = String::new();
|
||||
input_buffer.read_line(&mut first_line)?;
|
||||
let first_line = first_line.trim_end().to_owned();
|
||||
let width = first_line.len();
|
||||
for line in input_buffer.lines() {
|
||||
let line = line?;
|
||||
if line.len() != width {
|
||||
println!("{}", line);
|
||||
Err("Line length of input are not consistent")?;
|
||||
}
|
||||
data.push(line.chars().collect());
|
||||
}
|
||||
let height = data.len();
|
||||
|
||||
Ok(Crossword {
|
||||
data,
|
||||
width,
|
||||
height,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Crossword {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
for row in &self.data {
|
||||
let row = String::from_iter(row.iter());
|
||||
writeln!(f, "{}", row)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
// Handle command input
|
||||
let args: Vec<String> = env::args().collect();
|
||||
if args.len() != 2 {
|
||||
panic!(
|
||||
"{} must be run with a single argument of files name!",
|
||||
&args[0]
|
||||
)
|
||||
}
|
||||
let input_file_string = &args[1];
|
||||
|
||||
let crossword = Crossword::new(File::open(input_file_string)?)?;
|
||||
|
||||
println!("{}", crossword);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user