DEV Community

dev.to staff
dev.to staff

Posted on

9 1

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!

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (2)

Collapse
 
_bkeren profile image
''

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
}
Collapse
 
caleb_rudder profile image
Caleb Rudder • Edited

Javascript!

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

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

    });
    return leaderBoard;
}

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay