Ми - досвідчені розвʼязувачі задач, відомі своєю здатністю братися за найскладніші математичні головоломки. Одного вечора ми отримуємо термінового листа від винахідника на імʼя Triangle Tinkerer, який працює над проривним новим проєктом. У листі написано:
Шановний математику,
Мені потрібна допомога. Я розробляю пристрій, який покладається на унікальні властивості піфагорових трійок: наборів з трьох цілих чисел, які задовольняють рівняння a² + b² = c². Цей пристрій революціонізує навігацію, але щоб він працював, я маю запрограмувати його на кожну можливу трійку, у якій сума a, b і c дорівнює певному числу N. Обчислювати ці трійки вручну зайняло б у мене роки, але я чув, що це завдання нам цілком під силу.
Час не терпить зволікань. Майбутнє мого винаходу, а можливо, й майбутнє математичних інновацій, залежить від нашої здатності розвʼязати цю задачу.
Спонукувані важливістю цього завдання, ми вирушаємо на пошуки всіх піфагорових трійок, які задовольняють умову. Наша робота могла б мати далекосяжні наслідки, відкриваючи нові можливості в науці та інженерії. Чи зможемо ми прийняти цей виклик і ввійти в історію?
Піфагоровою трійкою називають три натуральні числа {a, b, c}, для яких
a² + b² = c²
і які задовольняють умову
a < b < c
Наприклад,
3² + 4² = 5².
Дано ціле число N. Знайдіть усі піфагорові трійки, для яких a + b + c = N.
Наприклад, якщо N = 1000, існує рівно одна піфагорова трійка, для якої a + b + c = 1000: {200, 375, 425}.
Типово функції triplets передають лише sum, але вона може додатково приймати minFactor та/або maxFactor. Якщо їх передано, подбайте, щоб кожне з чисел трійки було не меншим за minFactor і не більшим за maxFactor.
Якщо розвʼязувати цю вправу через CLI, є один тестовий випадок із великими числами, який наразі пропущено, щоб уникнути перевищення часу під час запуску тестів.
За бажанням його можна увімкнути, прибравши .skip, але врахуйте, що виконання може зайняти чимало часу.
Зареєструйтеся на Exercism, щоб вивчати й опановувати JavaScript, а також 37 концепцій159 вправ та справжнє наставництво від людей, і все це безкоштовно.