advent-of-code/2023/day5/src/main.rs

82 lines
1.7 KiB
Rust

use std::ops::Range;
use std::collections::HashMap;
const FILE_STR: &'static str = include_str!("input.txt");
#[derive(Debug)]
enum DataType {
Seeds,
Soil,
Fertilizer,
Water,
Light,
Temperature,
Humidity,
Location,
}
#[derive(Debug, Default)]
struct DataMap {
from_range: Range<u64>,
to_range: Range<u64>,
}
impl DataMap {
fn new(from_start: u64, to_start: u64, map_length: u64) -> Self {
let to_range = to_start..to_start + map_length;
let from_range = from_start..from_start + map_length;
DataMap {
from_range,
to_range
}
}
fn get_dest_idx(&self, src_value: u64) -> u64 {
let src_index = src_value.checked_sub(self.to_range.start);
let dest_index = if let Some(idx) = src_index {
self.from_range.start.checked_add(idx)
} else {
Some(src_value)
};
match dest_index {
Some(n) => n,
None => src_value
}
}
fn get_src_idx(&self, dest_value: u64) -> u64 {
let dest_index = dest_value.checked_sub(self.from_range.start);
let src_index = if let Some(idx) = dest_index {
self.to_range.start.checked_add(idx)
} else {
Some(dest_value)
};
match src_index {
Some(n) => n,
None => dest_value
}
}
}
#[derive(Debug, Default)]
struct Almanac {
seeds: Vec<u64>,
maps: HashMap<(DataType, DataType), Vec<DataMap>>,
}
impl Almanac {
fn parse(input: &str) -> Self {
todo!();
}
}
fn main() {
println!("Hello, world!");
}
#[cfg(test)]
mod tests {
const EXAMPLE_FILE_STR: &'static str = include_str!("example-input.txt");
}