diff --git a/task-1/count-above-threshold.js b/task-1/count-above-threshold.js index 7cf0418..69f3791 100644 --- a/task-1/count-above-threshold.js +++ b/task-1/count-above-threshold.js @@ -1 +1,9 @@ -//Your code here +function countAboveThreshold(numbers, threshold) { + let count = 0; + for (let i = 0; i < numbers.length; i++) { + if (numbers[i] > threshold) count++; + } + return count; +} + +console.log(countAboveThreshold([1, 2, 3, 20, 100], 9)); diff --git a/task-2/calculateAverage-test.js b/task-2/calculateAverage-test.js new file mode 100644 index 0000000..9483c00 --- /dev/null +++ b/task-2/calculateAverage-test.js @@ -0,0 +1,58 @@ +import { test, expect } from "vitest"; +import { calculateAverage } from "./calculateAverage.js"; + +test("returns the average of numbers in an array", () => { + const numbers = [2, 4, 6]; + + const result = calculateAverage(numbers); + + expect(result).toBe(4); +}); + +test("returns the single element when array has one number", () => { + const numbers = [5]; + + const result = calculateAverage(numbers); + + expect(result).toBe(5); +}); + +test("returns null for empty array", () => { + const numbers = []; + + const result = calculateAverage(numbers); + + expect(result).toBe(null); +}); + +test("returns null for non-array input", () => { + const numbers = "123"; + + const result = calculateAverage(numbers); + + expect(result).toBe(null); +}); + +test("returns null when the array contains a non-number value", () => { + const numbers = [1, 2, "3"]; + + const result = calculateAverage(numbers); + + expect(result).toBe(null); +}); + +test("returns the average for array with negative numbers", () => { + const numbers = [-2, -4, -6]; + + const result = calculateAverage(numbers); + + expect(result).toBe(-4); +}); + +test("returns the average for array with floating point numbers", () => { + const numbers = [3.2, 1.2, 5.3]; + + const result = calculateAverage(numbers); + + expect(result).toBe(3.233333333333333); +}); diff --git a/task-2/calculateAverage.js b/task-2/calculateAverage.js index 097ee0a..69f2811 100644 --- a/task-2/calculateAverage.js +++ b/task-2/calculateAverage.js @@ -1,20 +1,20 @@ -export function calculateAverage(numbers) { - if (!Array.isArray(numbers)) { - return null; - } - - if (numbers.length === 0) { - return null; - } - - let sum = 0; - - for (const num of numbers) { - if (typeof num !== "number") { - return null; - } - sum += num; - } - - return sum / numbers.length; -} +export function calculateAverage(numbers) { + if (!Array.isArray(numbers)) { + return null; + } + + if (numbers.length === 0) { + return null; + } + + let sum = 0; + + for (const num of numbers) { + if (typeof num !== "number") { + return null; + } + sum += num; + } + + return sum / numbers.length; +} diff --git a/task-3/count-vowels-debug.js b/task-3/count-vowels-debug.js index 1ce292b..01a85f8 100644 --- a/task-3/count-vowels-debug.js +++ b/task-3/count-vowels-debug.js @@ -1,17 +1,16 @@ function countVowels(text) { let count = 0; - - for (let i = 0; i <= text.length; i++) { + const lowerCase = text.toLowerCase(); + for (let i = 0; i < lowerCase.length; i++) { if ( - text[i] === "a" || - text[i] === "e" || - text[i] === "i" || - text[i] === "o" || - text[i] === "u" + lowerCase[i] === "a" || + lowerCase[i] === "e" || + lowerCase[i] === "i" || + lowerCase[i] === "o" || + lowerCase[i] === "u" ) { count++; } } - return count; } diff --git a/task-4/bigArray.js b/task-4/bigArray.js index 070947a..982673b 100644 --- a/task-4/bigArray.js +++ b/task-4/bigArray.js @@ -1,12 +1,9 @@ -// you can use this function to generate a big array of the specified size -// It contains numbers from 0 to size - 1 -// Example: generateBigArray(5) will return [0, 1, 2, 3, 4] function generateBigArray(size) { const array = new Array(size); for (let i = 0; i < size; i++) { array[i] = i; } return array; -}; +} -export default generateBigArray; \ No newline at end of file +export default generateBigArray; diff --git a/task-4/search-experiment.js b/task-4/search-experiment.js index 63c189a..0787138 100644 --- a/task-4/search-experiment.js +++ b/task-4/search-experiment.js @@ -1,3 +1,60 @@ -// Write your code here -// Use generateBigArray to create a big array numbers. -// Example: generateBigArray(1000000) will create an array of 1 million numbers. \ No newline at end of file +import generateBigArray from "./bigArray.js"; + +function getTargetByBinarySearch(array, target) { + let left = 0, + right = array.length - 1; + while (left <= right) { + const middle = left + Math.floor((right - left) / 2); + if (array[middle] < target) { + left = middle + 1; + } else if (array[middle] > target) { + right = middle - 1; + } else { + return middle; + } + } + return false; +} + +function getTargetByLinearSearch(array, target) { + for (let i = 0; i < array.length; i++) { + if (array[i] === target) { + return i; + } + } + return false; +} + +console.time("Linear Search 1k"); +getTargetByLinearSearch(generateBigArray(1000), 10540640); +console.timeEnd("Linear Search 1k"); + +console.time("Linear Search 100k"); +getTargetByLinearSearch(generateBigArray(100000), 10540640); +console.timeEnd("Linear Search 100k"); + +console.time("Linear Search 1M"); +getTargetByLinearSearch(generateBigArray(10000000), 10540640); +console.timeEnd("Linear Search 1M"); + +console.time("Linear Search 10M"); +getTargetByLinearSearch(generateBigArray(10000000), 10540640); +console.timeEnd("Linear Search 10M"); + +console.log("---"); + +console.time("Binary Search 1k"); +getTargetByBinarySearch(getTargetByBinarySearch(1000), 10540640); +console.timeEnd("Binary Search 1k"); + +console.time("Binary Search 100k"); +getTargetByBinarySearch(generateBigArray(100000), 10540640); +console.timeEnd("Binary Search 100k"); + +console.time("Binary Search 1M"); +getTargetByBinarySearch(generateBigArray(10000000), 10540640); +console.timeEnd("Binary Search 1M"); + +console.time("Binary Search 10M"); +getTargetByBinarySearch(generateBigArray(10000000), 10540640); +console.timeEnd("Binary Search 10M");