-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CodeWars - Delete occurrences of an element if it occurs more than n …
…times
- Loading branch information
1 parent
ee304cc
commit 8100249
Showing
1 changed file
with
41 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |