3/4 of the way through day 1.
This commit is contained in:
		
							parent
							
								
									ea7220bb00
								
							
						
					
					
						commit
						50fbfd5438
					
				
					 10 changed files with 2397 additions and 4 deletions
				
			
		| 
						 | 
					@ -10,5 +10,9 @@ edition = "2021"
 | 
				
			||||||
name="template"
 | 
					name="template"
 | 
				
			||||||
path="src/template/solve.rs"
 | 
					path="src/template/solve.rs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[bin]]
 | 
				
			||||||
 | 
					name="day01"
 | 
				
			||||||
 | 
					path="src/day01/solve.rs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
regex="1"
 | 
					regex="1"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2255
									
								
								src/day01/input.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2255
									
								
								src/day01/input.txt
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										49
									
								
								src/day01/parse.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/day01/parse.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					#[derive(Debug, PartialEq, Eq)]
 | 
				
			||||||
 | 
					pub struct Elf(pub Vec<usize>);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn parse(input: &str) -> Vec<Elf> {
 | 
				
			||||||
 | 
					    input.trim()
 | 
				
			||||||
 | 
					        .split("\n\n")
 | 
				
			||||||
 | 
					        .map(|group| {
 | 
				
			||||||
 | 
					            Elf(group
 | 
				
			||||||
 | 
					                .split('\n')
 | 
				
			||||||
 | 
					                .map(|line| {
 | 
				
			||||||
 | 
					                    line.parse().unwrap()
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                .collect())
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .collect::<Vec<Elf>>()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_parse() {
 | 
				
			||||||
 | 
					        let input = "1000
 | 
				
			||||||
 | 
					2000
 | 
				
			||||||
 | 
					3000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					4000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					5000
 | 
				
			||||||
 | 
					6000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					7000
 | 
				
			||||||
 | 
					8000
 | 
				
			||||||
 | 
					9000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					10000";
 | 
				
			||||||
 | 
					        assert_eq!(
 | 
				
			||||||
 | 
					            parse(input),
 | 
				
			||||||
 | 
					            vec![
 | 
				
			||||||
 | 
					                Elf(vec![1000, 2000, 3000]),
 | 
				
			||||||
 | 
					                Elf(vec![4000]),
 | 
				
			||||||
 | 
					                Elf(vec![5000, 6000]),
 | 
				
			||||||
 | 
					                Elf(vec![7000, 8000, 9000]),
 | 
				
			||||||
 | 
					                Elf(vec![10000])
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								src/day01/part1.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/day01/part1.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					use crate::parse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn part1(input: &[parse::Elf]) -> usize {
 | 
				
			||||||
 | 
					    input
 | 
				
			||||||
 | 
					        .iter()
 | 
				
			||||||
 | 
					        .map(|elf| elf.0.iter().sum::<usize>())
 | 
				
			||||||
 | 
					        .max()
 | 
				
			||||||
 | 
					        .unwrap()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_part1() {
 | 
				
			||||||
 | 
					        let input = vec![
 | 
				
			||||||
 | 
					            parse::Elf(vec![1000, 2000, 3000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![4000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![5000, 6000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![7000, 8000, 9000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![10000]),
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assert_eq!(part1(&input), 24000);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								src/day01/part2.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/day01/part2.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					use crate::parse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn part2(input: &[parse::Elf]) -> usize {
 | 
				
			||||||
 | 
					    input
 | 
				
			||||||
 | 
					        .iter()
 | 
				
			||||||
 | 
					        .map(|elf| elf.0.iter().sum::<usize>())
 | 
				
			||||||
 | 
					        // not sure what to do next here, how do I get the 3 max values from here?
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_part2() {
 | 
				
			||||||
 | 
					        let input = vec![
 | 
				
			||||||
 | 
					            parse::Elf(vec![1000, 2000, 3000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![4000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![5000, 6000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![7000, 8000, 9000]),
 | 
				
			||||||
 | 
					            parse::Elf(vec![10000]),
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					        assert_eq!(part2(&input), 45000);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								src/day01/solve.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/day01/solve.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					mod part1;
 | 
				
			||||||
 | 
					mod part2;
 | 
				
			||||||
 | 
					mod parse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
					    let _input = include_str!("./input.txt");
 | 
				
			||||||
 | 
					    let _structured_input = parse::parse(_input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Part One");
 | 
				
			||||||
 | 
					    println!("Result: {}", part1::part1(&_structured_input));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Part Two");
 | 
				
			||||||
 | 
					    println!("Result: {}", part2::part2(&_structured_input));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										17
									
								
								src/template/parse.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/template/parse.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					pub fn parse(input: &str) -> usize {
 | 
				
			||||||
 | 
					    println!("{}", input);
 | 
				
			||||||
 | 
					    0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_parse() {
 | 
				
			||||||
 | 
					        let input =
 | 
				
			||||||
 | 
					"test"
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					        assert_eq!(parse(input), 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,9 @@
 | 
				
			||||||
pub fn part1() -> usize {
 | 
					pub fn part1() -> usize {
 | 
				
			||||||
    return 0;
 | 
					    0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod day01 {
 | 
					mod tests {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,9 @@
 | 
				
			||||||
pub fn part2() -> usize {
 | 
					pub fn part2() -> usize {
 | 
				
			||||||
    return 0;
 | 
					    0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod day01 {
 | 
					mod tests {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,10 @@
 | 
				
			||||||
mod part1;
 | 
					mod part1;
 | 
				
			||||||
mod part2;
 | 
					mod part2;
 | 
				
			||||||
 | 
					mod parse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() {
 | 
					fn main() {
 | 
				
			||||||
    let _input = include_str!("./input.txt");
 | 
					    let _input = include_str!("./input.txt");
 | 
				
			||||||
 | 
					    let _structured_input = parse::parse(_input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    println!("Part One");
 | 
					    println!("Part One");
 | 
				
			||||||
    println!("Result: {}", part1::part1());
 | 
					    println!("Result: {}", part1::part1());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue