#7 part 2 on my first try, too. Daaaang.
This commit is contained in:
		@@ -150,6 +150,25 @@ unsigned long PartOne(File *file, unsigned long &grand_total)
 | 
				
			|||||||
	return rtn;
 | 
						return rtn;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void PartTwo(File *file, unsigned long at_least, File *&smallest)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Folder *folder = dynamic_cast<Folder*>(file);
 | 
				
			||||||
 | 
						if(folder)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if(folder->Size() >= at_least && folder->Size() < smallest->Size())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								std::cout << "New smallest size of " << folder->Size() << " by folder \""
 | 
				
			||||||
 | 
								          << folder->Filename() << "\"." << std::endl;
 | 
				
			||||||
 | 
								smallest = file;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for(File *file : folder->Files())
 | 
				
			||||||
 | 
								PartTwo(file, at_least, smallest);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main()
 | 
					int main()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	std::ifstream ifs("data.txt");
 | 
						std::ifstream ifs("data.txt");
 | 
				
			||||||
@@ -226,7 +245,20 @@ int main()
 | 
				
			|||||||
	unsigned long grand_total = 0;
 | 
						unsigned long grand_total = 0;
 | 
				
			||||||
	PartOne(&root, grand_total);
 | 
						PartOne(&root, grand_total);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std::cout << "Grand Total: " << grand_total << std::endl;
 | 
						std::cout << "Grand Total (part 1): " << grand_total << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const unsigned long max_space = 70000000;
 | 
				
			||||||
 | 
						const unsigned long space_needed = 30000000;
 | 
				
			||||||
 | 
						const unsigned long currently_used = root.Size();
 | 
				
			||||||
 | 
						const unsigned long currently_unused = max_space - currently_used;
 | 
				
			||||||
 | 
						const unsigned long amt_to_remove = space_needed - currently_unused;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						File *file_to_remove = &root;
 | 
				
			||||||
 | 
						PartTwo(&root, amt_to_remove, file_to_remove);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						std::cout << "Remove \"" << file_to_remove->Filename() << "\" to free up "
 | 
				
			||||||
 | 
						          << file_to_remove->Size() << " which is the smallest amount >= "
 | 
				
			||||||
 | 
						          << amt_to_remove << " (part 2)." << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user