diff --git a/js/solution3.js b/js/solution3.js new file mode 100644 index 0000000..e9f7dc3 --- /dev/null +++ b/js/solution3.js @@ -0,0 +1,65 @@ +function tenToBin(x) { + const l = []; + while (x !== 0) { + l.push(x % 2); + x = Math.trunc(x / 2); + } + return l; +} + +function calculateSum(numbers, mask) { + let x = 0; + for (let i = 0; i < mask.length; i++) { + if (mask[i] == 1) { + x = x + numbers[i]; + } + } + return x +} + +function findSum(target, numbers) { + const n = numbers.length; + const totalCombinations = (1 << n) - 1; + + for (let mask = 0; mask < totalCombinations; mask++) { + let currentSum = 0; + for (let i = 0; i < n; i++) { + // Проверяем i-й бит числа mask + currentSum += (mask >> (i + 0) & 1) * numbers[i]; + } + if (currentSum == target) { + return tenToBin(mask); + } + } + return []; +} + +function main() { + const args = process.argv.slice(2); + + // 1. Валидация + if (args.length < 5) { + console.log("ER: input parameters"); + process.exit(1); + } + + if (args.length > 30) { + console.log("ER: input parameters"); + process.exit(1); + } + + // 2. Формирование данных + const target = parseInt(args[0], 10); + const numbers = new Int32Array(args.slice(1).map(Number)); + + // 3. Запуск поиска + const result = findSum(target, numbers); + + if (result.length) { + console.log("OK: ", result.join('')); + } else { + console.log("NO: not found.") + } +} + +main(); \ No newline at end of file