Four is the number of letters in the ...: Difference between revisions
Content added Content deleted
(Added C solution) |
m (Performance improvement) |
||
Line 364: | Line 364: | ||
} |
} |
||
const named_number& get_named_number(uint64_t n) { |
|||
void append(std::vector<std::string>& v1, const std::vector<std::string>& v2) { |
|||
constexpr size_t names_len = std::size(named_numbers); |
|||
v1.insert(v1.end(), v2.begin(), v2.end()); |
|||
for (size_t i = 0; i + 1 < names_len; ++i) { |
|||
⚫ | |||
return named_numbers[i]; |
|||
} |
|||
return named_numbers[names_len - 1]; |
|||
} |
} |
||
std::vector<std::string> |
size_t append_number_name(std::vector<std::string>& result, uint64_t n, bool ordinal) { |
||
size_t count = 0; |
|||
std::vector<std::string> result; |
|||
if (n < 20) |
if (n < 20) { |
||
result.push_back(get_name(small[n], ordinal)); |
result.push_back(get_name(small[n], ordinal)); |
||
⚫ | |||
} |
|||
else if (n < 100) { |
else if (n < 100) { |
||
if (n % 10 == 0) { |
if (n % 10 == 0) { |
||
Line 381: | Line 388: | ||
result.push_back(name); |
result.push_back(name); |
||
} |
} |
||
⚫ | |||
} else { |
} else { |
||
const named_number& num = get_named_number(n); |
|||
uint64_t p = num.number; |
|||
count += append_number_name(result, n/p, false); |
|||
⚫ | |||
if (n % p == 0) { |
|||
result.push_back(get_name(num, ordinal)); |
|||
++count; |
|||
⚫ | |||
result.push_back(get_name(named_numbers[i-1], ordinal)); |
|||
result.push_back(get_name(num, false)); |
|||
⚫ | |||
result.push_back(get_name(named_numbers[i-1], false)); |
|||
count += append_number_name(result, n % p, ordinal); |
|||
⚫ | |||
⚫ | |||
⚫ | |||
} |
} |
||
} |
} |
||
return |
return count; |
||
} |
} |
||
Line 421: | Line 426: | ||
} |
} |
||
for (size_t i = 1; count > n; ++i) { |
for (size_t i = 1; count > n; ++i) { |
||
⚫ | |||
std::vector<std::string> v; |
|||
result.push_back("in"); |
|||
⚫ | |||
result.push_back("the"); |
|||
n += 2; |
|||
n += append_number_name(result, i + 1, true); |
|||
result.back() += ','; |
|||
⚫ | |||
append(result, v); |
|||
} |
} |
||
return result; |
return result; |