Created
May 20, 2020 20:54
-
-
Save sandrabosk/57237d101e7595d24aa5ab56bfaef630 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
// ************************************************************************************ | |
// https://www.codewars.com/kata/554ca54ffa7d91b236000023/javascript | |
// 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] | |
// ************************************************************************************ | |
function deleteNth(arr,allowedTimes){ | |
const obj = {}; | |
return arr.filter(elem => { | |
// if there is already key the same as elem, | |
if(obj[elem]){ | |
// add +1 to the count | |
obj[elem] ++; | |
} else { | |
// otherwise create a key and add it value equal to 1 | |
obj[elem] = 1; | |
} | |
// filter out only elements that satify the condition | |
return obj[elem] <= allowedTimes | |
}); | |
} | |
// deleteNth ([1,1,1,1],2) // return [1,1] | |
deleteNth ([20,37,20,21],1) // return [20,37,21] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment