# 2666. Allow One Function Call ### 📝 āϏāĻŽāĻ¸ā§āϝāĻž āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ `fn` āĻĻ⧇āĻ“ā§ŸāĻž āφāϛ⧇āĨ¤ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇āϟāĻŋ `fn`-āĻāϰ āĻŽāϤ⧋āχ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ **āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āĻāĻ•āĻŦāĻžāϰ** āϚāĻžāϞāĻžāύ⧋ āϝāĻžāĻŦ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻ•āϞ āĻ•āϰāϞ⧇ `fn`-āĻāϰ āĻĢāϞāĻžāĻĢāϞ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϏāĻŦ āĻ•āϞ `undefined` āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇ (āĻ…āĻ°ā§āĻĨāĻžā§Ž `fn` āφāϰ āϚāĻžāϞāĻžāύ⧋ āĻšāĻŦ⧇ āύāĻž)āĨ¤ --- ### ✅ āωāĻĻāĻžāĻšāϰāĻŖ #### āωāĻĻāĻžāĻšāϰāĻŖ ā§§: ```javascript Input: fn = (a,b,c) => (a + b + c), calls = [[1,2,3],[2,3,6]] const onceFn = once(fn); onceFn(1, 2, 3); // 6 onceFn(2, 3, 6); // undefined ``` #### āĻŦā§āϝāĻžāĻ–ā§āϝāĻž: āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ (1,2,3) āĻĻāĻŋāϞ⧇ āϝ⧋āĻ—āĻĢāϞ 6 āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§ŸāĻŦāĻžāϰ (2,3,6) āĻĻāĻŋāϞ⧇ āφāϰ āϚāĻžāϞāĻžā§Ÿ āύāĻž, āϤāĻžāχ undefined āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ ## āωāĻĻāĻžāĻšāϰāĻŖ ⧍: ```js Input: fn = (a,b,c) => (a * b * c), calls = [[5,7,4],[2,3,6],[4,6,8]] const onceFn = once(fn); onceFn(5, 7, 4); // 140 onceFn(2, 3, 6); // undefined onceFn(4, 6, 8); // undefined ``` #### āĻŦā§āϝāĻžāĻ–ā§āϝāĻž: āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ (5,7,4) āĻĻāĻŋāϞ⧇ āϗ⧁āĻŖāĻĢāϞ 140 āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻĒāϰ⧇āϰ āĻĻ⧁āχāĻŦāĻžāϰ āφāϰ āϚāĻžāϞāĻžā§Ÿ āύāĻžāĨ¤ ## đŸ’ģ āϏāĻŽāĻžāϧāĻžāύ (JavaScript) ```js /** * @param {Function} fn * @return {Function} */ var once = function(fn) { let called = false; let result; return function(...args) { if (!called) { called = true; result = fn(...args); return result; } return undefined; }; }; ``` ## 📚 āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ - once(fn) āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ fn-āϕ⧇ āĻāĻ•āĻŦāĻžāϰ⧇āϰ āĻŦ⧇āĻļāĻŋ āϚāĻžāϞāĻžāϤ⧇ āĻĻ⧇āĻŦ⧇ āύāĻžāĨ¤ - āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ⧇āϰ āĻĢāϞāĻžāĻĢāϞ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇, āĻŦāĻžāĻ•āĻŋ āϏāĻŦāĻŦāĻžāϰ undefinedāĨ¤ - āĻ•ā§āϞ⧋āϜāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻŸā§‡āϟ (called āĻĢā§āĻ˛ā§āϝāĻžāĻ—) āϧāϰ⧇ āϰāĻžāĻ–āĻŋāĨ¤