https://www.codewars.com/kata/5a667236145c462103000091/
Wie könnte man diese Aufgabe performant lösen?
Das hier ist meine bisherige Lösung, leider ist sie deutlich zu langsam:
const squares = new Set([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401, 2500]);
function square_sums_row(n) {
const nums = [...Array(n)].map((_,i) => n - i);
for (const num of nums) {
const res = resolve(num, new Set([num]));
if (res) return res;
}
return false;
function resolve(x, used) {
if (used.size === n) {
return [...used];
}
for (const partner of nums) {
if (!used.has(partner) && squares.has(partner + x)) {
used.add(partner);
const res = resolve(partner, used);
if (res) return res;
used.delete(partner);
}
}
return false;
}
}