#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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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()
 | 
			
		||||
{
 | 
			
		||||
	std::ifstream ifs("data.txt");
 | 
			
		||||
@@ -226,7 +245,20 @@ int main()
 | 
			
		||||
	unsigned long grand_total = 0;
 | 
			
		||||
	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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user