From 8b7fbb4f0b855ae4e1cc415484e3b05d0df0b436 Mon Sep 17 00:00:00 2001 From: Maks3105 Date: Wed, 1 May 2024 21:56:20 +0700 Subject: [PATCH] Labs tasks 1 - 4 --- Exercises/1-random.js | 6 +++--- Exercises/2-key.js | 11 ++++++++--- Exercises/3-ip.js | 9 +++------ Exercises/4-methods.js | 29 +++++++++++++---------------- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/Exercises/1-random.js b/Exercises/1-random.js index ef5ccaf..e2f94d5 100644 --- a/Exercises/1-random.js +++ b/Exercises/1-random.js @@ -1,9 +1,9 @@ 'use strict'; const random = (min, max) => { - // Generate random Number between from min to max - // Use Math.random() and Math.floor() - // See documentation at MDN + const maxNum = max; + const minNum = min; + return Math.floor(Math.random() * (maxNum - minNum) + minNum); }; module.exports = { random }; diff --git a/Exercises/2-key.js b/Exercises/2-key.js index ba7e53a..ea8f0af 100644 --- a/Exercises/2-key.js +++ b/Exercises/2-key.js @@ -1,9 +1,14 @@ 'use strict'; const generateKey = (length, possible) => { - // Generate string of random characters - // Use Math.random() and Math.floor() - // See documentation at MDN + let key = ''; + const lenStr = possible.length; + + for (let i = 1; i <= length; ++i) { + key += possible[Math.floor(Math.random() * (lenStr - 1) + 1)]; + } + + return key; }; module.exports = { generateKey }; diff --git a/Exercises/3-ip.js b/Exercises/3-ip.js index 1e2c406..502073c 100644 --- a/Exercises/3-ip.js +++ b/Exercises/3-ip.js @@ -1,11 +1,8 @@ 'use strict'; -const ipToInt = (ip = '127.0.0.1') => { - // Parse ip address as string, for example '10.0.0.1' - // to ['10', '0', '0', '1'] to [10, 0, 0, 1] - // and convert to Number value 167772161 with bitwise shift - // (10 << 8 << 8 << 8) + (0 << 8 << 8) + (0 << 8) + 1 === 167772161 - // Use Array.prototype.reduce of for loop +const ipToInt = (ip = '10.0.0.1') => { + const fn = (acc, el) => (acc << 8) + parseInt(el); + return ip.split('.').reduce(fn, 0); }; module.exports = { ipToInt }; diff --git a/Exercises/4-methods.js b/Exercises/4-methods.js index c1038e8..4b1fca1 100644 --- a/Exercises/4-methods.js +++ b/Exercises/4-methods.js @@ -1,21 +1,18 @@ 'use strict'; -const methods = iface => { - // Introspect all properties of iface object and - // extract function names and number of arguments - // For example: { - // m1: x => [x], - // m2: function (x, y) { - // return [x, y]; - // }, - // m3(x, y, z) { - // return [x, y, z]; - // } - // will return: [ - // ['m1', 1], - // ['m2', 2], - // ['m3', 3] - // ] +const methods = (iface) => { + const arrOfName = []; + + for (const fn in iface) { + const typeOfFn = typeof iface[fn]; + + if (typeOfFn === 'function') { + arrOfName.push([fn, iface[fn].length]); + } + } + + return arrOfName; + }; module.exports = { methods };