मुझे प्रोजेक्ट यूलर चैलेंज 5 में समस्या है। चुनौती सबसे छोटी सकारात्मक संख्या खोजने पर आधारित है जो 1 से 20 तक सभी संख्याओं से विभाज्य है। यह मेरा कोड है:

let i = 1;
function myFunction (num) {
  return i % num == 0
}
while (true) {
  let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  if (arr.every(myFunction)) {
    console.log(i)
    break;
  } else {
    i++
    continue;
  }
}

16 नंबर तक का कोड ठीक (720720) काम करता है, लेकिन एक बार जब मैं सरणी में एक और नंबर जोड़ता हूं, तो क्रम में (16, 17, 18, ...) यह अब और काम नहीं करता है। मुझे नहीं पता क्यों, मैं प्रोग्रामिंग के लिए बहुत नया हूँ। अगर आप मुझे निर्देश दे सकते हैं।

-1
Alexander Guillen Hernandez 24 जुलाई 2020, 23:15

2 जवाब

सबसे बढ़िया उत्तर

ऊपर दिए गए उत्तर में काफी समय लगता है, जैसा कि उन्होंने कहा, काफी कुछ सेकंड।

यह कोड लंबा है लेकिन परिणाम के साथ आने में एक सेकंड से भी कम समय लगता है।

const divisibleByAllToN = (n) => {
  const twoToN = Array(n - 1)
    .fill(2)
    .map((item, index) => item + index);

  let numbersToBeMultiplied = twoToN.filter((item) => {
    for (var i = 2; i < item; i++) if (item % i === 0) return false;
    return item > 1;
  });

  numbersToBeMultiplied = numbersToBeMultiplied.map((item) => {
    let value = item;
    while (value * item <= n) {
      value = value * item;
    }
    return value;
  });
  return numbersToBeMultiplied.reduce((acc, val) => acc * val);
};

divisibleByAllToN(20);
0
Talmacel Marian Silviu 25 जुलाई 2020, 02:38

हल किया :

Array.every के ठीक से काम करने के लिए आपको myFunction में एक शर्त वापस करने की आवश्यकता है:

let i = 1;
function myFunction (num) {
  var result = i / num
  return parseInt(result) === result // condition HERE to check if result is an int
}
while (true) {
  let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  if (arr.every(myFunction)) {
    console.log(i)
    break;
  } else {
    i++
    continue;
  }
}

ऐसा करने से हमें (लगभग 20 सेकंड के बाद) सही परिणाम मिलता है: 232792560

0
gui3 24 जुलाई 2020, 23:41