# Daily Challenge #295 - Sort Leaderboards

In this challenge, you'll be given a leaderboard in the form of an array, as well as a list of strings. Using the information in the list, sort the leaderboard.

### Example

array:

['John',
'Brian',
'Jim',
'Dave',
'Fred']


list:
['Dave +1', 'Fred +4', 'Brian -1']

The steps for our example would be:

# Dave up 1
['John',
'Brian',
'Dave',
'Jim',
'Fred']
# Fred up 4
['Fred',
'John',
'Brian',
'Dave',
'Jim']
# Brian down 1
['Fred',
'John',
'Dave',
'Brian',
'Jim']


Then, we return the completed leaderboard:

['Fred',
'John',
'Dave',
'Brian',
'Jim']


Strings will never ask you to move a name higher or lower than possible. The strings in the list will always be a name in the leaderboard, followed by a space and a positive or negative number.

### Tests

leaderboardSort(['John', 'Brian', 'Jim', 'Dave', 'Fred'], ['Dave +1', 'Fred +4', 'Brian -1'])
leaderboardSort(['Bob', 'Larry', 'Kevin', 'Jack', 'Max'], ['Max +3', 'Kevin -1', 'Kevin +3'])

Good luck!

This challenge comes from topping on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Posted on by:

### dev.to staff

The hardworking team behind dev.to ❤️

### Discussion

JS

const leaderboardSort = (list, stepList) =>
{
stepList.forEach(stepInfo => {
let [name, step] = stepInfo.split(" ")
step = +step
const nameIndex = list.indexOf(name)
list.splice(nameIndex,1)
list.splice(nameIndex-step,0,name)
})
return list
}


Ruby, does not modify the passed in array but returns a new one instead:

def leaderboard_sort(board, steps)
steps.each_with_object(board.dup) do |s, b|
name, step = s.split
name_idx = b.index(name)
b.delete_at(name_idx)
b.insert(name_idx - step.to_i, name)
end
end


Javascript!

function leaderboardSort(leaderBoard, moveList){
moveList.forEach(element => {
let moveInfo = element.split(' ');
let player = moveInfo[0];
let moveAmmount = moveInfo[1];
let newIndex = currentIndex - moveAmmount;

if(newIndex < currentIndex){
for(let i = currentIndex; i > newIndex; i--){
}
}else{
for(let i = currentIndex; i < newIndex; i++){
//move everything up one
}
}

});