solved 18 and 67
add .idea to .gitignore
This commit is contained in:
		
							
								
								
									
										61
									
								
								src/bin/problem_18.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								src/bin/problem_18.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
use std::cmp::max;
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    println!("{}", find_max_total(get_triangle()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn get_triangle() -> Vec<Vec<usize>> {
 | 
			
		||||
    vec![
 | 
			
		||||
       vec![75],
 | 
			
		||||
       vec![95, 64],
 | 
			
		||||
       vec![17, 47, 82],
 | 
			
		||||
       vec![18, 35, 87, 10],
 | 
			
		||||
       vec![20, 04, 82, 47, 65],
 | 
			
		||||
       vec![19, 01, 23, 75, 03, 34],
 | 
			
		||||
       vec![88, 02, 77, 73, 07, 63, 67],
 | 
			
		||||
       vec![99, 65, 04, 28, 06, 16, 70, 92],
 | 
			
		||||
       vec![41, 41, 26, 56, 83, 40, 80, 70, 33],
 | 
			
		||||
       vec![41, 48, 72, 33, 47, 32, 37, 16, 94, 29],
 | 
			
		||||
       vec![53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14],
 | 
			
		||||
       vec![70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57],
 | 
			
		||||
       vec![91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48],
 | 
			
		||||
       vec![63, 66, 04, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31],
 | 
			
		||||
       vec![04, 62, 98, 27, 23, 09, 70, 98, 73, 93, 38, 53, 60, 04, 23],
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn find_max_total(grid: Vec<Vec<usize>>) -> usize {
 | 
			
		||||
    let triangle_height = grid.len();
 | 
			
		||||
    let mut idx = triangle_height - 1;
 | 
			
		||||
    let mut highest_sums = match grid.get(idx) {
 | 
			
		||||
        Some(sums) => sums.to_vec(),
 | 
			
		||||
        None => panic!("Impossible path: check grid")
 | 
			
		||||
    };
 | 
			
		||||
    while idx > 0 {
 | 
			
		||||
        idx -= 1;
 | 
			
		||||
        let line = grid.get(idx).unwrap();
 | 
			
		||||
        let mut new_highest_sums = Vec::new();
 | 
			
		||||
        for (pos, &num) in line.iter().enumerate() {
 | 
			
		||||
            new_highest_sums.push(max(num + highest_sums[pos], num + highest_sums[pos+1]))
 | 
			
		||||
        }
 | 
			
		||||
        highest_sums = new_highest_sums;
 | 
			
		||||
    }
 | 
			
		||||
    highest_sums[0]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod test_18 {
 | 
			
		||||
    use crate::find_max_total;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn test_find_max_total() {
 | 
			
		||||
        let grid = vec![
 | 
			
		||||
            vec![3],
 | 
			
		||||
            vec![7, 4],
 | 
			
		||||
            vec![2, 4, 6],
 | 
			
		||||
            vec![8, 5, 9, 3],
 | 
			
		||||
        ];
 | 
			
		||||
        assert_eq!(23, find_max_total(grid));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								src/bin/problem_67.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/bin/problem_67.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
use std::cmp::max;
 | 
			
		||||
use std::fs::File;
 | 
			
		||||
use std::io::{BufRead, BufReader};
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    println!("{}", find_max_total(get_triangle()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn get_triangle() -> Vec<Vec<usize>> {
 | 
			
		||||
    let file = File::open("triangle.txt").expect("Could not read file");
 | 
			
		||||
    let reader = BufReader::new(file);
 | 
			
		||||
    let mut grid = Vec::new();
 | 
			
		||||
    for line in reader.lines() {
 | 
			
		||||
        let line = line.expect("Could not get line");
 | 
			
		||||
        let nums = line.split_whitespace().map(|num| num.parse::<usize>().expect("Could not parse")).collect();
 | 
			
		||||
        grid.push(nums);
 | 
			
		||||
    }
 | 
			
		||||
    grid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn find_max_total(grid: Vec<Vec<usize>>) -> usize {
 | 
			
		||||
    let triangle_height = grid.len();
 | 
			
		||||
    let mut idx = triangle_height - 1;
 | 
			
		||||
    let mut highest_sums = match grid.get(idx) {
 | 
			
		||||
        Some(sums) => sums.to_vec(),
 | 
			
		||||
        None => panic!("Impossible path: check grid")
 | 
			
		||||
    };
 | 
			
		||||
    while idx > 0 {
 | 
			
		||||
        idx -= 1;
 | 
			
		||||
        let line = grid.get(idx).unwrap();
 | 
			
		||||
        let mut new_highest_sums = Vec::new();
 | 
			
		||||
        for (pos, &num) in line.iter().enumerate() {
 | 
			
		||||
            new_highest_sums.push(max(num + highest_sums[pos], num + highest_sums[pos+1]))
 | 
			
		||||
        }
 | 
			
		||||
        highest_sums = new_highest_sums;
 | 
			
		||||
    }
 | 
			
		||||
    highest_sums[0]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod test_18 {
 | 
			
		||||
    use crate::find_max_total;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn test_find_max_total() {
 | 
			
		||||
        let grid = vec![
 | 
			
		||||
            vec![3],
 | 
			
		||||
            vec![7, 4],
 | 
			
		||||
            vec![2, 4, 6],
 | 
			
		||||
            vec![8, 5, 9, 3],
 | 
			
		||||
        ];
 | 
			
		||||
        assert_eq!(23, find_max_total(grid));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user