├── 1-ReverseNumber.js ├── 10-DuplicateArray.js ├── 11-MergeArray.js ├── 12-FlatteningArray.js ├── 13-MissingNumber.js ├── 14-FrequencyCount.js ├── 15-SlidingWindow.js ├── 16-TwoPointer.js ├── 17-ReverseLL.js ├── 18-GenerateSubsets.js ├── 2-StringPalindrome.js ├── 3-ArrayChunks.js ├── 4-FizzBuzz.js ├── 5-LongestCommonPre.js ├── 6-MaxSubArray.js ├── 7-AnagramCheck.js ├── 8-BinarySearch.js ├── 9-RotatingArray.js └── README.md /1-ReverseNumber.js: -------------------------------------------------------------------------------- 1 | function reverseNumber(num) { 2 | let reversed = 0; 3 | 4 | while (num > 0) { 5 | const lastDigit = num % 10; 6 | reversed = reversed * 10 + lastDigit; 7 | num = Math.floor(num / 10); 8 | } 9 | 10 | return reversed; 11 | } 12 | 13 | console.log(reverseNumber(123)); 14 | -------------------------------------------------------------------------------- /10-DuplicateArray.js: -------------------------------------------------------------------------------- 1 | function findDuplicates(arr) { 2 | const seen = {}; 3 | const duplicates = []; 4 | 5 | for (let i = 0; i < arr.length; i++) { 6 | if (seen[arr[i]]) { 7 | if (seen[arr[i]] === 1) { 8 | duplicates.push(arr[i]); 9 | } 10 | seen[arr[i]]++; 11 | } else { 12 | seen[arr[i]] = 1; 13 | } 14 | } 15 | 16 | return duplicates; 17 | } 18 | 19 | const array = [1, 2, 3, 4, 2, 5, 6, 3]; 20 | console.log(findDuplicates(array)); 21 | -------------------------------------------------------------------------------- /11-MergeArray.js: -------------------------------------------------------------------------------- 1 | function mergeSortedArrays(arr1, arr2) { 2 | let i = 0; 3 | let j = 0; 4 | let result = []; 5 | while (i < arr1.length && j < arr2.length) { 6 | if (arr1[i] < arr2[j]) { 7 | result.push(arr1[i]); 8 | i++; 9 | } else { 10 | result.push(arr2[j]); 11 | j++; 12 | } 13 | } 14 | while (i < arr1.length) { 15 | result.push(arr1[i]); 16 | i++; 17 | } 18 | while (j < arr2.length) { 19 | result.push(arr2[j]); 20 | j++; 21 | } 22 | return result; 23 | } 24 | const arr1 = [1, 3, 5, 7]; 25 | const arr2 = [2, 4, 6, 8]; 26 | const mergedArray = mergeSortedArrays(arr1, arr2); 27 | console.log(mergedArray); 28 | -------------------------------------------------------------------------------- /12-FlatteningArray.js: -------------------------------------------------------------------------------- 1 | function flattenArray(arr) { 2 | return arr.reduce((acc, val) => 3 | Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val), []); 4 | } 5 | const nestedArray = [1, [2, [3, [4, 5]]]]; 6 | const flatArray = flattenArray(nestedArray); 7 | console.log(flatArray); 8 | -------------------------------------------------------------------------------- /13-MissingNumber.js: -------------------------------------------------------------------------------- 1 | function findMissingNumbers(arr, N) { 2 | let missingNumbers = []; 3 | let numberSet = new Set(arr); 4 | for (let i = 1; i <= N; i++) { 5 | if (!numberSet.has(i)) { 6 | missingNumbers.push(i); 7 | } 8 | } 9 | return missingNumbers; 10 | } 11 | console.log(findMissingNumbers([1, 2, 4, 6, 7, 9], 9)); 12 | console.log(findMissingNumbers([2, 3, 7, 4, 9], 10)); 13 | -------------------------------------------------------------------------------- /14-FrequencyCount.js: -------------------------------------------------------------------------------- 1 | function isAnagram(str1, str2) { 2 | if (str1.length !== str2.length) { 3 | return false; 4 | } 5 | let frequencyCounter1 = {}; 6 | let frequencyCounter2 = {}; 7 | for (let char of str1) { 8 | frequencyCounter1[char] = (frequencyCounter1[char] || 0) + 1; 9 | } 10 | for (let char of str2) { 11 | frequencyCounter2[char] = (frequencyCounter2[char] || 0) + 1; 12 | } 13 | for (let key in frequencyCounter1) { 14 | if (frequencyCounter1[key] !== frequencyCounter2[key]) { 15 | return false; 16 | } 17 | } 18 | return true; 19 | } 20 | console.log(isAnagram("listen", "silent")) 21 | console.log(isAnagram("hello", "llheo")); 22 | console.log(isAnagram("rat", "car")); 23 | -------------------------------------------------------------------------------- /15-SlidingWindow.js: -------------------------------------------------------------------------------- 1 | function maxSum(arr, k) { 2 | let maxSum = 0; 3 | let windowSum = 0; 4 | for (let i = 0; i < k; i++) { 5 | windowSum += arr[i]; 6 | } 7 | maxSum = windowSum; 8 | for (let i = k; i < arr.length; i++) { 9 | windowSum = windowSum - arr[i - k] + arr[i]; 10 | maxSum = Math.max(maxSum, windowSum); 11 | } 12 | return maxSum; 13 | } 14 | const arr = [1, 8, 30, -5, 20, 7]; 15 | const k = 3; 16 | console.log("Maximum sum of", k, "consecutive elements is:", maxSum(arr, k)); 17 | -------------------------------------------------------------------------------- /16-TwoPointer.js: -------------------------------------------------------------------------------- 1 | function isPalindrome(str) { 2 | const normalizedStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); 3 | let left = 0; 4 | let right = normalizedStr.length - 1; 5 | while (left < right) { 6 | if (normalizedStr[left] !== normalizedStr[right]) { 7 | return false; 8 | } 9 | left++; 10 | right--; 11 | } 12 | return true; 13 | } 14 | const testString = "A man, a plan, a canal, Panama"; 15 | console.log(isPalindrome(testString)); 16 | -------------------------------------------------------------------------------- /17-ReverseLL.js: -------------------------------------------------------------------------------- 1 | function ListNode(val, next = null) { 2 | this.val = val; 3 | this.next = next; 4 | } 5 | function reverseLinkedList(head) { 6 | let prev = null; 7 | let current = head; 8 | let next = null; 9 | while (current !== null) { 10 | next = current.next; 11 | current.next = prev; 12 | prev = current; 13 | current = next; 14 | } 15 | return prev; 16 | } 17 | function printList(head) { 18 | let result = []; 19 | while (head !== null) { 20 | result.push(head.val); 21 | head = head.next; 22 | } 23 | console.log(result.join(" -> ")); 24 | } 25 | let head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4)))); 26 | console.log("Original Linked List:"); 27 | printList(head); 28 | let reversedHead = reverseLinkedList(head); 29 | console.log("Reversed Linked List:"); 30 | printList(reversedHead); 31 | -------------------------------------------------------------------------------- /18-GenerateSubsets.js: -------------------------------------------------------------------------------- 1 | function generateSubsets(nums) { 2 | const result = []; 3 | function backtrack(start, currentSubset) { 4 | result.push([...currentSubset]); 5 | for (let i = start; i < nums.length;i++) { 6 | currentSubset.push(nums[i]); 7 | backtrack(i + 1, currentSubset); 8 | currentSubset.pop(); 9 | } 10 | } 11 | backtrack(0, []); 12 | return result; 13 | } 14 | const nums = [1, 2, 3]; 15 | console.log(generateSubsets(nums)); 16 | -------------------------------------------------------------------------------- /2-StringPalindrome.js: -------------------------------------------------------------------------------- 1 | function isPalindrome(str) { 2 | let normalizedStr = ''; 3 | for (let i = 0; i < str.length; i++) { 4 | let char = str[i].toLowerCase(); 5 | if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9')) { 6 | normalizedStr += char; 7 | } 8 | } 9 | let reversedStr = ''; 10 | for (let j = normalizedStr.length - 1; j >= 0; j--) { 11 | reversedStr += normalizedStr[j]; 12 | } 13 | return normalizedStr === reversedStr; 14 | } 15 | console.log(isPalindrome("A man, a plan, a canal, Panama")); 16 | console.log(isPalindrome("racecar")); 17 | console.log(isPalindrome("hello")); 18 | -------------------------------------------------------------------------------- /3-ArrayChunks.js: -------------------------------------------------------------------------------- 1 | function chunkArray(arr, size) { 2 | const result = []; 3 | let chunk = []; 4 | for (let i = 0; i < arr.length; i++) { 5 | chunk.push(arr[i]); 6 | if (chunk.length === size) { 7 | result.push(chunk); 8 | chunk = []; 9 | } 10 | } 11 | if (chunk.length > 0) { 12 | result.push(chunk); 13 | } 14 | return result; 15 | } 16 | console.log(chunkArray([1, 2, 3, 4, 5, 6, 7], 3)); 17 | -------------------------------------------------------------------------------- /4-FizzBuzz.js: -------------------------------------------------------------------------------- 1 | function fizzBuzzVariations(limit) { 2 | for (let i = 1; i <= limit; i++) { 3 | let output = ""; 4 | if (i % 3 === 0) output += "Fizz"; 5 | if (i % 5 === 0) output += "Buzz"; 6 | if (i % 7 === 0) output += "Bazz"; 7 | console.log(output || i); 8 | } 9 | } 10 | fizzBuzzVariations(21); 11 | -------------------------------------------------------------------------------- /5-LongestCommonPre.js: -------------------------------------------------------------------------------- 1 | function longestCommonPrefix(strs) { 2 | if (strs.length === 0) return ""; 3 | strs.sort(); 4 | let first = strs[0]; 5 | let last = strs[strs.length - 1]; 6 | let i = 0; 7 | while (i < first.length && first[i] === last[i]) { 8 | i++; 9 | } 10 | return first.substring(0, i); 11 | } 12 | console.log(longestCommonPrefix(["flower", "flow", "flight"])); 13 | console.log(longestCommonPrefix(["dog", "racecar", "car"])); 14 | -------------------------------------------------------------------------------- /6-MaxSubArray.js: -------------------------------------------------------------------------------- 1 | function maxSubArray(nums) { 2 | let maxSum = -Infinity; 3 | let currentSum = 0; 4 | for (let num of nums) { 5 | currentSum += num; 6 | if (currentSum > maxSum) { 7 | maxSum = currentSum; 8 | } 9 | if (currentSum < 0) { 10 | currentSum = 0; 11 | } 12 | } 13 | return maxSum; 14 | } 15 | const nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]; 16 | console.log(maxSubArray(nums)); 17 | -------------------------------------------------------------------------------- /7-AnagramCheck.js: -------------------------------------------------------------------------------- 1 | function areAnagrams(str1, str2) { 2 | const normalize = (str) => { 3 | return str.replace(/[^a-z0-9]/gi, '').toLowerCase(); 4 | }; 5 | const normalizedStr1 = normalize(str1); 6 | const normalizedStr2 = normalize(str2); 7 | if (normalizedStr1.length !== normalizedStr2.length) { 8 | return false; 9 | } 10 | const charCount = {}; 11 | for (let char of normalizedStr1) { 12 | charCount[char] = (charCount[char] || 0) + 1; 13 | } 14 | for (let char of normalizedStr2) { 15 | if (!charCount[char]) { 16 | return false; 17 | } 18 | charCount[char]--; 19 | } 20 | return true; 21 | } 22 | console.log(areAnagrams("listen", "silent")); 23 | console.log(areAnagrams("rail safety", "fairy tales")); 24 | console.log(areAnagrams("hello", "world")); 25 | -------------------------------------------------------------------------------- /8-BinarySearch.js: -------------------------------------------------------------------------------- 1 | function binarySearch(arr, target) { 2 | let low = 0; 3 | let high = arr.length - 1; 4 | while (low <= high) { 5 | let mid = Math.floor((low + high) / 2); 6 | if (arr[mid] === target) { 7 | return mid; 8 | } else if (arr[mid] < target) { 9 | low = mid + 1; 10 | } else { 11 | high = mid - 1; 12 | } 13 | } 14 | return -1; 15 | } 16 | const arr = [1, 3, 5, 7, 9, 11, 13]; 17 | const target = 7; 18 | const result = binarySearch(arr, target); 19 | if (result !== -1) { 20 | console.log(`Element found at index ${result}`); 21 | } else { 22 | console.log("Element not found"); 23 | } 24 | -------------------------------------------------------------------------------- /9-RotatingArray.js: -------------------------------------------------------------------------------- 1 | function rotateArray(arr, k) { 2 | k = k % arr.length; 3 | reverseArray(arr, 0, arr.length - 1); 4 | reverseArray(arr, 0, k - 1); 5 | reverseArray(arr, k, arr.length - 1); 6 | return arr; 7 | } 8 | function reverseArray(arr, start, end) { 9 | while (start < end) { 10 | let temp = arr[start]; 11 | arr[start] = arr[end]; 12 | arr[end] = temp; 13 | start++; 14 | end--; 15 | } 16 | } 17 | const array = [1, 2, 3, 4, 5]; 18 | const rotations = 2; 19 | const rotatedArray = rotateArray(array, rotations); 20 | console.log(rotatedArray); 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **30 Days of JavaScript Logic Building** 2 | 3 | ### ** Check out the code for :- 4 | [Day 1: Reverse Number](https://github.com/Anshi1208/AdvanceJS-30DaysChallenge/blob/main/1-ReverseNumber.js). 5 | 6 | 7 | [Day 2: String Palindrome checker](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/2-StringPalindrome.js). 8 | 9 | 10 | [Day 3: Array Chunks](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/3-ArrayChunks.js). 11 | 12 | 13 | 14 | [Day 4: FizzBuzz](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/4-FizzBuzz.js). 15 | 16 | 17 | [Day 5: Longest Common Prefix](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/5-LongestCommonPre.js). 18 | 19 | 20 | [Day 6: Maximum subarray](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/6-MaxSubArray.js). 21 | 22 | 23 | [Day 7: Anagram chekcer](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/7-AnagramCheck.js). 24 | 25 | 26 | [Day 8: Binary Search Implementation](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/8-BinarySearch.js). 27 | 28 | 29 | [Day 9: Rotating array](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/9-RotatingArray.js). 30 | 31 | 32 | [Day 10: Duplicate Array](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/10-DuplicateArray.js). 33 | 34 | 35 | [Day 11: Merge Array](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/11-MergeArray.js). 36 | 37 | 38 | 39 | [Day 12: Flattening Array](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/12-FlatteningArray.js). 40 | 41 | 42 | 43 | [Day 13: Missing Number](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/13-MissingNumber.js). 44 | 45 | 46 | 47 | 48 | [Day 14: Frequency Count](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/14-FrequencyCount.js). 49 | 50 | 51 | [Day 15: Sliding Window](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/15-SlidingWindow.js). 52 | 53 | 54 | 55 | 56 | [Day 16: Two Pointer ](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/16-TwoPointer.js). 57 | 58 | 59 | 60 | [Day 17: Reverse Linked List ](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/17-ReverseLL.js). 61 | 62 | 63 | 64 | [Day 18: Generate Subsets](https://github.com/Anshi1208/JS-LogicBuilding/blob/main/18-GenerateSubsets.js). 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | ### **How to Run** 73 | 74 | 1. Clone the repository: 75 | ```bash 76 | git clone https://github.com/your-username/filename.git 77 | ``` 78 | 2. Navigate to the directory and run the code: 79 | ```bash 80 | cd filename 81 | node [filename].js 82 | ``` --------------------------------------------------------------------------------