puzzles/advent_of_code_2015/day2/main1.cc
2022-12-01 13:46:47 +01:00

63 lines
No EOL
1.2 KiB
C++

#include <iostream>
#include <string>
using namespace std;
struct Present
{
size_t length;
size_t width;
size_t height;
size_t extra_wrap()
{
return min(length * width, min(length * height, width * height));
}
size_t wrap_required()
{
return 2 * length * width
+ 2 * width * height
+ 2 * height * length
+ extra_wrap();
}
size_t bow_size()
{
return length * width * height;
}
size_t ribbon_required()
{
size_t ribbon = min(length + width, min(length + height, width + height)) * 2;
return ribbon + bow_size();
}
};
istream &operator>>(istream& in, Present &present)
{
in >> present.length;
in.ignore(1); // ignore 'x'.
in >> present.width;
in.ignore(1); // ignore 'x'.
in >> present.height;
return in;
}
int main()
{
size_t total_wrap = 0;
size_t total_ribbon = 0;
Present present;
while(!cin.eof())
{
cin >> present;
total_wrap += present.wrap_required();
total_ribbon += present.ribbon_required();
}
cout << "Total wrap required: " << total_wrap << "\n";
cout << "Total ribbon required: " << total_ribbon << "\n";
}