koala написав:"Декартів" і "Картезіанський" - це одне й те саме слово (прикметник від Декарт), просто в першому випадку прикметник утворено в українській мові, а другому прикметник утворено у французькій мові, а далі запозичено.
Добуток і перемноження теж мають одне й те саме значення.
Порада замість картезіанського добутку застосувати декартове перемноження - це шило на мило.
Teg Miles, хочете реальну задачу? Напишіть власну реалізацію next_permutation і cartesian_product.
«Картезій» — це латина, звідти англійське cartesian. Тоді імена писали рідною мовою і латиною, як зараз рідною і англійською.
Довелося таки робити власну реалізацію:
std::vector<std::string> get_combo(std::vector<std::vector<std::string>>& all_numbers)
{
int all_size = all_numbers.size();
std::vector<std::vector<std::string>> temp(1, std::vector<std::string>());
for (int i = 0; i < all_size; i++) {
std::vector<std::vector<std::string>> new_temp;
for (const std::vector<std::string>& product : temp) {
for (const std::string& element : all_numbers.at(i)) {
std::vector<std::string> temp_copy = product;
temp_copy.push_back(element);
new_temp.push_back(temp_copy);
}
}
temp = new_temp;
}
int temp_size = temp.size();
std::vector<std::string> answer(temp_size, "");
for (int i = 0; i < temp_size; ++i) {
for (const std::string& element : temp.at(i)) {
answer.at(i) += element;
}
}
return answer;
}
std::vector<std::string> get_pins(std::string observed)
{
std::vector<int> obs_numbers;
for (auto& number : observed) {
obs_numbers.push_back(int(number - '0'));
}
std::vector<std::vector<std::string>> all_numbers;
std::map<int, std::vector<int>> code_panel;
code_panel.emplace(0, std::vector<int>({ 8 }));
code_panel.emplace(1, std::vector<int>({ 2, 4 }));
code_panel.emplace(2, std::vector<int>({ 1, 3, 5 }));
code_panel.emplace(3, std::vector<int>({ 2, 6 }));
code_panel.emplace(4, std::vector<int>({ 1, 5, 7 }));
code_panel.emplace(5, std::vector<int>({ 2, 4, 6, 8 }));
code_panel.emplace(6, std::vector<int>({ 3, 5, 9 }));
code_panel.emplace(7, std::vector<int>({ 4, 8 }));
code_panel.emplace(8, std::vector<int>({ 7, 5, 9, 0 }));
code_panel.emplace(9, std::vector<int>({ 6, 8 }));
for (auto& number : obs_numbers) {
std::vector<std::string> helper;
helper.push_back(std::to_string(number));
for (auto& item : code_panel.at(number)) {
helper.push_back(std::to_string(item));
}
all_numbers.push_back(helper);
}
std::vector<std::string> answer = get_combo(all_numbers);
return answer;
}
Тільки не розумію, чи можна менше чим О(n в кубі) зробити?