feat: start with day 7
This commit is contained in:
		
							parent
							
								
									9ee13cc480
								
							
						
					
					
						commit
						f27b6274ce
					
				@ -52,7 +52,6 @@ pub fn convert_char_to_prio(c: char) -> u8 {
 | 
				
			|||||||
mod test {
 | 
					mod test {
 | 
				
			||||||
    const EXAMPLE01: &'static str = include_str!("input/day03/example01");
 | 
					    const EXAMPLE01: &'static str = include_str!("input/day03/example01");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn test_first() {
 | 
					    fn test_first() {
 | 
				
			||||||
        assert_eq!(super::solve_task01(EXAMPLE01), 157);
 | 
					        assert_eq!(super::solve_task01(EXAMPLE01), 157);
 | 
				
			||||||
 | 
				
			|||||||
@ -99,7 +99,9 @@ fn move_in_port_currently(port: &mut Vec<LinkedList<String>>, from: &str, to: &s
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn move_in_port_once(port: &mut Vec<LinkedList<String>>, from: &str, to: &str) {
 | 
					fn move_in_port_once(port: &mut Vec<LinkedList<String>>, from: &str, to: &str) {
 | 
				
			||||||
    let tmp: String = port.get_mut((from.parse::<usize>().unwrap()) -1).unwrap().pop_back().unwrap();
 | 
					    let tmp: String = port.get_mut(
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        (from.parse::<usize>().unwrap()) -1).unwrap().pop_back().unwrap();
 | 
				
			||||||
    port.get_mut((to.parse::<usize>().unwrap()) -1).unwrap().push_back(tmp);
 | 
					    port.get_mut((to.parse::<usize>().unwrap()) -1).unwrap().push_back(tmp);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										144
									
								
								src/day07.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								src/day07.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,144 @@
 | 
				
			|||||||
 | 
					use crate::utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug,Clone)]
 | 
				
			||||||
 | 
					struct File {
 | 
				
			||||||
 | 
					    name: String,
 | 
				
			||||||
 | 
					    size: i32,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug,Clone)]
 | 
				
			||||||
 | 
					struct Folder{
 | 
				
			||||||
 | 
					    root: Option<Box<Folder>>,
 | 
				
			||||||
 | 
					    name: String,
 | 
				
			||||||
 | 
					    folder: Vec<Folder>,
 | 
				
			||||||
 | 
					    files: Vec<File>,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Folder {
 | 
				
			||||||
 | 
					    fn add_folder(&mut self, folder: Folder) {
 | 
				
			||||||
 | 
					        self.folder.push(folder);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn add_file(&mut self, file: File) {
 | 
				
			||||||
 | 
					        self.files.push(file);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn get_size(self) -> i32 {
 | 
				
			||||||
 | 
					        let file_sum: i32 = self.files.into_iter().map(|file| file.size).sum();
 | 
				
			||||||
 | 
					        let folder_sum: i32 = self.folder.into_iter().map(|folder| folder.get_size()).sum();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return file_sum + folder_sum;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn flat_folder(self) -> Vec<Folder> {
 | 
				
			||||||
 | 
					        let mut sub_folder = vec![];
 | 
				
			||||||
 | 
					        for folder in self.folder {
 | 
				
			||||||
 | 
					            sub_folder.push(folder);
 | 
				
			||||||
 | 
					            sub_folder.extend(folder.flat_folder());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return sub_folder;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn execute_task01(content: &str) {
 | 
				
			||||||
 | 
					    let line = solve_task01(content);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Day07 - Task01 - Sum of total Size: {}", line);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn execute_task02(content: &str) {
 | 
				
			||||||
 | 
					    let line = solve_task02(content);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Day07 - Task02 - Last Item Str Line: {}", line);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn solve_task01(content: &str) -> i32 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let root: &Folder = parse_tree(content);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let full_size: i32 = root.flat_folder()
 | 
				
			||||||
 | 
					        .into_iter()
 | 
				
			||||||
 | 
					        .map(|folder| folder.get_size())
 | 
				
			||||||
 | 
					        .filter(|size| size.clone() <= 100000)
 | 
				
			||||||
 | 
					        .sum();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return full_size;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn solve_task02(content: &str) -> i32 {
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn parse_tree(content: &str) -> &Folder {
 | 
				
			||||||
 | 
					    let vector = utils::convert_to_string_slice(&content);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let root: &Folder = &Folder{
 | 
				
			||||||
 | 
					        root: None,
 | 
				
			||||||
 | 
					        name: "".parse().unwrap(),
 | 
				
			||||||
 | 
					        folder: vec![],
 | 
				
			||||||
 | 
					        files: vec![],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    let mut current: &Folder = &root;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for line in vector.into_iter() {
 | 
				
			||||||
 | 
					        if line.starts_with("$") {
 | 
				
			||||||
 | 
					            if line.starts_with("$ cd") {
 | 
				
			||||||
 | 
					                let select = line.split(" ").collect::<Vec<&str>>()[3..].join("");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if select == "/" {
 | 
				
			||||||
 | 
					                    current = &root;
 | 
				
			||||||
 | 
					                } else if select == ".." {
 | 
				
			||||||
 | 
					                    current = ¤t.root.unwrap();
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    for child_folder in current.folder {
 | 
				
			||||||
 | 
					                        if child_folder.name == select {
 | 
				
			||||||
 | 
					                            current = &child_folder;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else if line.starts_with("$ ls") {
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                let parts: Vec<&str> = line.split(" ").collect();
 | 
				
			||||||
 | 
					                let part1 = *parts.get(0).unwrap();
 | 
				
			||||||
 | 
					                let part2 = *parts.get(1).unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if part1 == "dir" {
 | 
				
			||||||
 | 
					                    current.add_folder(Folder {
 | 
				
			||||||
 | 
					                        root: Some(Box::new(*current)),
 | 
				
			||||||
 | 
					                        name: part2.parse().unwrap(),
 | 
				
			||||||
 | 
					                        folder: vec![],
 | 
				
			||||||
 | 
					                        files: vec![],
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    current.add_file(File{
 | 
				
			||||||
 | 
					                        name: part2.parse().unwrap(),
 | 
				
			||||||
 | 
					                        size: part1.parse::<i32>().unwrap(),
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return root;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod test {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const EXAMPLE01: &'static str = include_str!("input/day07/example01");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_first() {
 | 
				
			||||||
 | 
					        assert_eq!(super::solve_task01(EXAMPLE01), 95437);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_second() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								src/input/day07/example01
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/input/day07/example01
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					$ cd /
 | 
				
			||||||
 | 
					$ ls
 | 
				
			||||||
 | 
					dir a
 | 
				
			||||||
 | 
					14848514 b.txt
 | 
				
			||||||
 | 
					8504156 c.dat
 | 
				
			||||||
 | 
					dir d
 | 
				
			||||||
 | 
					$ cd a
 | 
				
			||||||
 | 
					$ ls
 | 
				
			||||||
 | 
					dir e
 | 
				
			||||||
 | 
					29116 f
 | 
				
			||||||
 | 
					2557 g
 | 
				
			||||||
 | 
					62596 h.lst
 | 
				
			||||||
 | 
					$ cd e
 | 
				
			||||||
 | 
					$ ls
 | 
				
			||||||
 | 
					584 i
 | 
				
			||||||
 | 
					$ cd ..
 | 
				
			||||||
 | 
					$ cd ..
 | 
				
			||||||
 | 
					$ cd d
 | 
				
			||||||
 | 
					$ ls
 | 
				
			||||||
 | 
					4060174 j
 | 
				
			||||||
 | 
					8033020 d.log
 | 
				
			||||||
 | 
					5626152 d.ext
 | 
				
			||||||
 | 
					7214296 k
 | 
				
			||||||
							
								
								
									
										1030
									
								
								src/input/day07/input01
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1030
									
								
								src/input/day07/input01
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -5,6 +5,7 @@ mod day03;
 | 
				
			|||||||
mod day04;
 | 
					mod day04;
 | 
				
			||||||
mod day05;
 | 
					mod day05;
 | 
				
			||||||
mod day06;
 | 
					mod day06;
 | 
				
			||||||
 | 
					mod day07;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const CONTENT01: &'static str = include_str!("input/day01/input01");
 | 
					const CONTENT01: &'static str = include_str!("input/day01/input01");
 | 
				
			||||||
const CONTENT02: &'static str = include_str!("input/day02/input01");
 | 
					const CONTENT02: &'static str = include_str!("input/day02/input01");
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user