Skip to content

Commit

Permalink
CodeWars - Delete occurrences of an element if it occurs more than n …
Browse files Browse the repository at this point in the history
…times
  • Loading branch information
creativesuraj authored May 13, 2020
1 parent ee304cc commit 8100249
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions deleteNth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/**
* Enough is enough!
* Alice and Bob were on a holiday. Both of them took many pictures of the places they've been,
* and now they want to show Charlie their entire collection. However, Charlie doesn't like this sessions,
* since the motive usually repeats. He isn't fond of seeing the Eiffel tower 40 times. He tells them that
* he will only sit during the session if they show the same motive at most N times. Luckily, Alice and Bob
* are able to encode the motive as a number. Can you help them to remove numbers such that their list
* contains each number only up to N times, without changing the order?
* Task
* Given a list lst and a number N, create a new list that contains each number of lst at most N times
* without reordering. For example if N = 2, and the input is [1,2,3,1,2,1,2,3], you take [1,2,3,1,2],
* drop the next [1,2] since this would lead to 1 and 2 being in the result 3 times, and then take 3,
* which leads to [1,2,3,1,2,3].
* Example
* deleteNth ([1,1,1,1],2) // return [1,1]
* deleteNth ([20,37,20,21],1) // return [20,37,21]
*/

const _updateHashMap = (hashMap, val) => {
if (hashMap.has(val)) {
let value = hashMap.get(val)
hashMap.set(val, value+1)
} else {
hashMap.set(val, 1)
}
}

function deleteNth(arr,n){
// ...
const hashMap = new Map()
const newArray = []
return arr.filter(a=>{
_updateHashMap(hashMap, a)
if (hashMap.get(a) <= n) {
return a
}
})
return newArray
}

0 comments on commit 8100249

Please sign in to comment.