Convert seconds to compound duration: Difference between revisions
Content added Content deleted
(Added C++ solution) |
|||
Line 368: | Line 368: | ||
9 wk, 6 d, 10 hr, 40 min |
9 wk, 6 d, 10 hr, 40 min |
||
</pre> |
</pre> |
||
=={{header|C++}}== |
|||
{{works with|C++11}} |
|||
<lang cpp> |
|||
#include <iostream> |
|||
#include <vector> |
|||
using entry = std::pair<int, const char*>; |
|||
void print(const std::vector<entry>& entries, std::ostream& out = std::cout) |
|||
{ |
|||
bool first = true; |
|||
for(const auto& e: entries) { |
|||
if(!first) out << ", "; |
|||
first = false; |
|||
out << e.first << " " << e.second; |
|||
} |
|||
out << '\n'; |
|||
} |
|||
std::vector<entry> convert(int seconds) |
|||
{ |
|||
static const entry time_table[] = { |
|||
{7*24*60*60, "wk"}, {24*60*60, "d"}, {60*60, "hr"}, {60, "min"}, {1, "sec"} |
|||
}; |
|||
std::vector<entry> result; |
|||
for(const auto& e: time_table) { |
|||
int time = seconds / e.first; |
|||
if(time != 0) result.emplace_back(time, e.second); |
|||
seconds %= e.first; |
|||
} |
|||
return result; |
|||
} |
|||
int main() |
|||
{ |
|||
std::cout << " 7259 sec is "; print(convert( 7259)); |
|||
std::cout << " 86400 sec is "; print(convert( 86400)); |
|||
std::cout << "6000000 sec is "; print(convert(6000000)); |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
7259 sec is 2 hr, 59 sec |
|||
86400 sec is 1 d |
|||
6000000 sec is 9 wk, 6 d, 10 hr, 40 min |
|||
</pre> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |