# DSA fundamentals problem solving-1

Nov 28th, 2023 (edited)
606
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. // Write a function called getSum that takes in two numbers and returns the sum of those two numbers
2. function getSum(num1, num2) {
3.   return num1 + num2
4.   //write function
5. }
6.
7. // console.log(getSum(1, 2)) // 3
8. // getSum(10, 5) // 15
9. // getSum(2, 2) // 4
10. // getSum(10, 5) // 15
11.
12. //=================================================
13.
14. // Write a function called calculator that takes in 2 numbers and an operator and returns the result of the calculation.
15. function calculator(num1, num2, operator) {
16.   //   let result
17.   //   switch (operator) {
18.   //     case '+':
19.   //       result = num1 + num2
20.   //       break
21.   //     case '-':
22.   //       result = num1 - num2
23.   //       break
24.   //     case '*':
25.   //       result = num1 * num2
26.   //       break
27.   //     case '/':
28.   //       result = num1 / num2
29.   //       break
30.   //     default:
31.   //       throw new Error('Not a valid Operator')
32.   //   }
33.
34.   if (operator === '+') {
35.     return num1 + num2
36.   }
37.   if (operator === '-') return num1 - num2
38.   if (operator === '*') return num1 * num2
39.   if (operator === '/') return num1 / num2
40.   throw new Error('Not a valid Operator')
41.
42.   //   return result
43. }
44.
45. console.log(calculator(1, 2, '*')) // 3
46. // calculator(10, 5, '-') // 5
47. // calculator(2, 2, '*') // 4
48. // calculator(10, 5, '/') // 2
49.
50. //=================================================
51.
52. // Write a function called countOccurrences that takes in a string and a character and returns the number of occurrences of that character in the string.
53. // Lowercase and uppercase characters are considered different characters
54. function countOccurrences(str, char) {
55.   //write code here
56.   let count = 0
57.   for (let letter of str) {
58.     letter === char && count++
59.   }
60.   return count
61. }
62.
63. console.log(countOccurrences('hello', 'l')) //2
64. // countOccurrences('hello', 'z') // 0
65.
66. // You may assume that each word consists of only letters and spaces
67. function titleCase(str) {
68.   //write code here
69.   //make all sentence lowecase
70.   //   const lowecaseStr = str.toLowerCase()
71.   //   console.log(lowecaseStr)
72.
73.   //   //devide by space (split)
74.   //   const splitStr = lowecaseStr.split(' ')
75.   //   console.log(splitStr)
76.   //   //make each array elements first letter to uppercase
77.   //   for (let i = 0; i < splitStr.length; i++) {
78.   //     splitStr[i] = splitStr[i][0].toUpperCase() + splitStr[i].slice(1)
79.   //   }
80.   //   console.log(splitStr)
81.   //  return splitStr.join(' ')
82.   return str.replace(/\b\w/g, (match) => match.toUpperCase())
83. }
84.
85. console.log(titleCase("I'm a little tea pot")) // I'm A Little Tea Pot
86. // titleCase('sHoRt AnD sToUt'); // Short And Stout
87. // titleCase('HERE IS MY HANDLE HERE IS MY SPOUT'); // Here Is My Handle Here Is My Spout
88.
89. //=================================================
90.
91. // Write a function called removeDuplicates that takes in an array and returns a new array with duplicates removed.
92. // function removeDuplicates(arr) {
93. // const resultSet = new Set(arr)
94. // console.log(Array.from(resultSet))
95. // return Array.from(resultSet)
96.
97. //   const resultArr = []
98.
99. //   for (let num of arr) {
100. //     if (!resultArr.includes(num)) {
101. //       resultArr.push(num)
102. //     }
103. //   }
104.
105. //   console.log(resultArr)
106. // }
107.
108. // removeDuplicates([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
109. // removeDuplicates([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) // [1]
110. // removeDuplicates([1, 2, 3, 4, 5, true, 1, 'hello' 2, 3, 'hello', true]); // [1, 2, 3, 4, 5, true, 'hello']
111.
112. //=================================================
113.
114. // Write a function called arrayIntersection that takes in two arrays and returns an array containing the intersection of the two input arrays (i.e., the common elements that appear in both arrays).
115.
116. function arrayIntersection(arr1, arr2) {
117.   //   const resultArr = []
118.
119.   //   for (let num of arr1) {
120.   //     console.log(num)
121.   //     if (arr2.includes(num)) {
122.   //       resultArr.push(num)
123.   //     }
124.   //   }
125.
126.   //   console.log(Array.from(new Set(resultArr)))
127.   const set1 = new Set(arr1)
128.   const intersectionArr = []
129.
130.   for (let num of arr2) {
131.     console.log(num)
132.     if (set1.has(num)) {
133.       intersectionArr.push(num)
134.     }
135.   }
136.   return intersectionArr
137. }
138.
139. console.log(arrayIntersection([1, 2, 3, 3, 4, 5], [1, 3, 5, 7, 9])) // should return [1, 3, 5]
140. // arrayIntersection([1, 1, 1, 1, 1], [2, 2, 2, 2, 2]); // should return []
141. // arrayIntersection([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]); // should return [1, 2, 3, 4, 5]
142.
143. //=================================================
144.
145. // Write a function called displayLikes that takes in an array of names and returns a string of who likes the post.
146.
147. // The function should return a string formatted as follows:
148.
149. // If no one likes it, it should return 'no one likes this'
150. // If one person likes it, it should return '{name} likes this'
151. // If two people like it, it should return '{name1} and {name2} like this'
152. // If three people like it, it should return '{name1}, {name2} and {name3} like this'
153. // If more than three people like it, it should return '{name1}, {name2} and {x} others like this'
154.
155. function displayLikes(namesArr) {
156.   // Get the length of the array
157.   const length = namesArr.length
158.
159.   // Return the appropriate string based on the length of the array
160.   if (length === 0) {
161.     return 'no one likes this'
162.   } else if (length === 1) {
163.     return `\${namesArr[0]} likes this`
164.   } else if (length === 2) {
165.     return `\${namesArr[0]} and \${namesArr[1]} like this`
166.   } else if (length === 3) {
167.     return `\${namesArr[0]}, \${namesArr[1]} and \${namesArr[2]} like this`
168.   } else {
169.     return `\${namesArr[0]}, \${namesArr[1]} and \${length - 2} others like this`
170.   }
171. }
172.
173. // displayLikes([]) // 'no one likes this'
174. // displayLikes(['Peter']) // 'Peter likes this'
175. // displayLikes(['Jacob', 'Alex']) // 'Jacob and Alex like this'
176. // displayLikes(['Max', 'John', 'Mark']) // 'Max, John and Mark like this'
177. console.log(displayLikes(['Alex', 'Jacob', 'Mark', 'Max'])) // 'Alex, Jacob and 2 others like this'
178. // displayLikes(['Alex', 'Jacob', 'Mark', 'Max', 'Jill']) // 'Alex, Jacob and 3 others like this'
179.
180. //=================================================
181. // Write a function called findMissingNumber that takes in an array of unique numbers from 1 to n (inclusive), where one number is missing. It should return the missing number.
182.
183. // If an empty array is passed in, it should return 1
184. // If nothing is passed in, it should return undefined
185.
186. function findMissingNumber(arr) {
187.   //write code here
188.   if (!arr || !Array.isArray(arr)) return undefined
189.   if (arr.length === 0) return 1
190.
191.   const n = arr.length + 1
192.
193.   const expectedSum = (n * (n + 1)) / 2
194.   console.log(expectedSum)
195.
196.   //   let total = 0
197.   //   for(let num of arr){
198.   //     total += num
199.   //   }
200.   //   console.log(total)
201.   const totalSum = arr.reduce((total, num) => total + num, 0)
202.
203.   console.log(expectedSum - totalSum)
204.   return expectedSum - totalSum
205.   //(n * (n +1)) / 2
206. }
207.
208. console.log(findMissingNumber([1, 2, 3, 4, 6, 7, 8, 9, 10])) // 5
209. // findMissingNumber([10, 8, 6, 7, 5, 4, 2, 3, 1]); // 9
210. // findMissingNumber([10, 5, 1, 2, 4, 6, 8, 3, 9]); // 7
211.
212. //=================================================
213.
214. // Write a function called findMissingLetter that takes in an array of consecutive (increasing) letters as input and returns the missing letter in the array.
215.
216. function findMissingLetter(arr) {
217.   const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
218.   const startIndex = alphabet.indexOf(arr[0])
219.
220.   for (let i = 0; i < arr.length; i++) {
221.     if (arr[i] !== alphabet[startIndex + i]) {
222.       return alphabet[startIndex + i]
223.     }
224.   }
225.
226.   //write code here
227. }
228.
229. console.log(findMissingLetter(['a', 'b', 'c', 'd', 'f'])) // => "e"
230. // findMissingLetter(['O', 'Q', 'R', 'S']); // => "P"
231. // findMissingLetter(['t', 'u', 'v', 'w', 'x', 'z']); // => "y"
232.
233. //=================================================
234.
235. // Write a function called validateEmail that takes in a string and returns whether the string is a valid email address. For the purposes of this challenge, a valid email address is defined as a string that contains an @ symbol and a . symbol.
236.
237. function validateEmail(email) {
238.   //   const emailRegex = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\$/
239.   //   return emailRegex.test(email)
240.   // Check if the email contains the "@" symbol
241.   //   if (email.indexOf('@') === -1) {
242.   //     return false
243.   //   }
244.   //   // Split the email into the local part and domain
245.   //   const [localPart, domain] = email.split('@')
246.   //   // Check if the local part and domain meet the minimum length requirements
247.   //   if (localPart.length === 0 || domain.length < 3) {
248.   //     return false
249.   //   }
250.   //   // Check if the domain extension consists of at least two characters
251.   //   const domainExtension = domain.split('.')
252.   //   if (domainExtension.length < 2 || domainExtension[1].length < 2) {
253.   //     return false
254.   //   }
255.   //   // If all checks pass, return true
256.   //   return true
257.   //write code here
258. }
259.
260. console.log(validateEmail('john@gmail.com')) // true
261. validateEmail('john@gmail') // false
262.
263. //=================================================
264.
265. // Write a function called diceGameSimulation that simulates this dice game. The function should take one argument:
266.
267. // numSimulations: The number of times to simulate the dice game.
268. // The game rules are if a 7 or 11 are rolled, the player wins and they get a result of win. If a 2, 3 or 12 are rolled they lose and get a result of lose. Anything else and they get a result of roll again.
269.
270. // The function should return an array of objects, where each object represents a simulation result. Each object should contain the following properties:
271.
272. // dice1: The value of the first dice (a random number between 1 and 6).
273. // dice2: The value of the second dice (a random number between 1 and 6).
274. // sum: The sum of the two dice values.
275. // result: The result of the roll, which can be "win", "lose", or "roll again".
276.
277. function rollDice() {
278.   return Math.floor(Math.random() * 6 + 1)
279. }
280. function diceGameSimulation(numOfTry) {
281.   const results = []
282.   //write code here
283.   for (let i = 0; i < numOfTry; i++) {
284.     const dice1 = rollDice()
285.     const dice2 = rollDice()
286.     const sum = dice1 + dice2
287.     let result = ''
288.     if (sum === 7 || sum === 11) {
289.       result = 'win'
290.     } else if (sum === 2 || sum === 3 || sum === 12) {
291.       result = 'lose'
292.     } else {
293.       result = 'Roll Again'
294.     }
295.     results.push({ dice1, dice2, sum, result })
296.   }
297.
298.   console.log(results)
299. }
300.
301. diceGameSimulation(10)
302.
303. /*
304.   { dice1: 1, dice2: 5, sum: 6, result: 'roll again' },
305.   { dice1: 5, dice2: 6, sum: 11, result: 'win' },
306.   { dice1: 1, dice2: 1, sum: 2, result: 'lose' }
307. */
308.
309. // Write a function called formatPhoneNumber that takes in an array of numbers and returns a string representing the phone number formed by concatenating the numbers in the specified format.
310.
311. //=================================================
312.
313. function formatPhoneNumber(numbers) {
314.   //write code here
315.   // Get the first 3 numbers and join them together
316.   const areaCode = numbers.slice(0, 3).join('')
317.   // Get the next 3 numbers and join them together
318.   const prefix = numbers.slice(3, 6).join('')
319.   // Get the last 4 numbers and join them together
320.   const lineNumber = numbers.slice(6).join('')
321.   console.log(`(\${areaCode}) \${prefix}-\${lineNumber}`)
322.   return `(\${areaCode}) \${prefix}-\${lineNumber}`
323.
324. }
325.
326. formatPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]); // => "(123) 456-7890"
327. // formatPhoneNumber([5, 1, 9, 5, 5, 5, 4, 4, 6, 8]); // => "(519) 555-4468"
328. // formatPhoneNumber([3, 4, 5, 5, 0, 1, 2, 5, 2, 7]); // => "(345) 501-2527"
329.
Tags: