Using Sorting Algorithms & Backend Development
How you can use sorting algorithms and backend development in your own project, by the Hectic Six
// Define an array of leaderboard data containing objects representing players and their scores
var leaderboardData = [
// { rank: 1, name: "Chinmay", score: 100 },
// { rank: 2, name: "Raunak", score: 90 },
// { rank: 3, name: "Paaras", score: 80 },
// { rank: 4, name: "Ederick", score: 70 },
// { rank: 5, name: "Tannay", score: 60 },
// { rank: 6, name: "Qais", score: 50 }
];
const url = "http://127.0.0.1:8086/api/leaderboard/";
const post_url = url+"create";
const delete_url = url+"delete/";
const update update_url = url+"update";
const get_options = {
method: 'GET',
mode: 'cors',
cache: 'default',
credentials: 'omit',
headers: {
'Content
}
}
// Function to generate the leaderboard table based on the data
function generateLeaderboard() {
// Get the leaderboard table element from the HTML
var leaderboardTable = document.getElementById("leaderboard");
// Remove all rows from the table except the header
while (leaderboardTable.rows.length > 1) {
leaderboardTable.deleteRow(1);
}
// Iterate over the leaderboard data and create rows for each entry
leaderboardData.forEach(function(entry) {
// Create a new row in the table
var row = leaderboardTable.insertRow();
// Create cells for rank, name, score, and action
var rankCell = row.insertCell(0);
var nameCell = row.insertCell(1);
var scoreCell = row.insertCell(2);
var actionCell = row.insertCell(3);
// Set the content of each cell to the corresponding data in the entry
rankCell.textContent = entry.rank;
nameCell.textContent = entry.name;
scoreCell.textContent = entry.score;
// Create an update button and attach a click event listener to call the updateEntry function
var updateButton = document.createElement("button");
updateButton.textContent = "Update";
updateButton.addEventListener("click", function() {
// Call updateEntry function with the rank of the entry to be updated
updateEntry(entry.rank);
});
actionCell.appendChild(updateButton);
// Create a delete button and attach a click event listener to call the deleteEntry function
var deleteButton = document.createElement("button");
deleteButton.textContent = "Delete";
deleteButton.addEventListener("click", function() {
deleteEntry(entry.rank);
});
actionCell.appendChild(deleteButton);
});
}
// Function to delete an entry from the leaderboard based on its rank
function deleteEntry(rank) {
// Find the index of the entry with the given rank in the leaderboard data
var index = leaderboardData.findIndex(function(entry) {
return entry.rank === rank;
});
// If the entry is found, remove it from the leaderboard data, update ranks, and regenerate the leaderboard
if (index !== -1) {
leaderboardData.splice(index, 1);
updateRanks();
generateLeaderboard();
}
}
// Function to update an entry in the leaderboard based on its rank
function updateEntry(rank) {
// Find the index of the entry with the given rank in the leaderboard data
var index = leaderboardData.findIndex(function(entry) {
return entry.rank === rank;
});
// If the entry is found, prompt the user for the updated score and update the entry
if (index !== -1) {
var updatedScore = prompt("Enter the updated score for " + leaderboardData[index].name + ":");
if (updatedScore !== null && !isNaN(updatedScore)) {
leaderboardData[index].score = parseInt(updatedScore);
leaderboardData.sort(function(a, b) {
return b.score - a.score;
});
updateRanks();
generateLeaderboard();
}
}
}
// Function to update the ranks of all entries in the leaderboard
function updateRanks() {
leaderboardData.forEach(function(entry, index) {
entry.rank = index + 1;
});
}
// Function to add a new entry to the leaderboard based on user input
function addToLeaderboard() {
// Get the name and score inputs from the HTML
var nameInput = document.getElementById("nameInput").value;
var scoreInput = document.getElementById("scoreInput").value;
// Create a new entry object with rank 0, name from the input, and score from the input
var newEntry = {
rank: 0,
name: nameInput,
score: parseInt(scoreInput)
};
// Add the new entry to the leaderboard data, update ranks, and regenerate the leaderboard
leaderboardData.push(newEntry);
leaderboardData.sort(function(a, b) {
return b.score - a.score;
});
updateRanks();
generateLeaderboard();
// Reset the input fields
document.getElementById("nameInput").value = "";
document.getElementById("scoreInput").value = "";
}
// Get the add form element from the HTML
var addForm = document.getElementById("addForm");
// Attach a submit event listener to the form to call the addToLeaderboard function
addForm.addEventListener("submit", function(event) {
event.preventDefault();
addToLeaderboard();
});
// Generate the leaderboard when the page loads
generateLeaderboard();
This code was used to handle a leaderboard for our Projectile Motion & Snake games.
The purpose of the provided code is to generate a leaderboard table in a web page based on the data stored in the leaderboardData
array. The leaderboard displays the rank, name, and score of each player. The code also allows users to add new entries, update existing entries, and delete entries from the leaderboard.
Here is a step-by-step breakdown of how the code works:
-
Data Structure: The
leaderboardData
array contains objects representing players and their scores. Each object has properties such asrank
,name
, andscore
. -
Generate Leaderboard: The
generateLeaderboard()
function is responsible for dynamically creating the leaderboard table based on the data inleaderboardData
. It retrieves theleaderboard
table element from the HTML and clears all existing rows except the header row. Then, it iterates over theleaderboardData
array, creates a new row for each entry, and populates the cells with the corresponding data. It also adds update and delete buttons to each row. -
Delete Entry: The
deleteEntry(rank)
function is called when the user clicks the delete button for a specific entry. It searches for the entry with the givenrank
in theleaderboardData
array usingfindIndex()
. If found, it removes the entry from the array, updates the ranks of the remaining entries, and regenerates the leaderboard table. -
Update Entry: The
updateEntry(rank)
function is triggered when the user clicks the update button for a particular entry. It prompts the user to enter the updated score for the selected entry. If a valid score is provided, it updates thescore
property of the corresponding entry, sorts theleaderboardData
array in descending order based on the scores, updates the ranks, and regenerates the leaderboard. -
Update Ranks: The
updateRanks()
function updates the ranks of all entries in theleaderboardData
array based on their positions in the array. It assigns ranks starting from 1 to the first entry, incrementing by one for each subsequent entry. -
Add Entry: The
addToLeaderboard()
function is called when the user submits the add form. It retrieves the name and score inputs from the HTML, creates a new entry object with a rank of 0 and the provided name and score, adds it to theleaderboardData
array, sorts the array based on scores, updates the ranks, and regenerates the leaderboard. -
Event Listeners: Event listeners are attached to the update and delete buttons in each row, as well as the submit event of the add form, to trigger the respective functions for updating, deleting, and adding entries to the leaderboard.
To incorporate the main concepts from the code into their own projects, web developers can follow these steps:
-
Data Management: Define a data structure to represent the leaderboard entries. This could be an array of objects or data fetched from an API.
-
Dynamic Generation: Implement a function that generates the leaderboard table dynamically based on the data. Iterate over the data, create HTML elements, and populate them with the appropriate values.
-
User Interactions: Add event listeners to the relevant elements, such as update and delete buttons, to handle user interactions. Define functions to handle these events, such as updating, deleting, or adding entries to the leaderboard.
-
API Integration: If applicable, incorporate API calls to retrieve or update leaderboard data. Modify the functions to send requests to the API endpoints and update the data accordingly.
-
Security and Authentication: Depending on the requirements, implement authentication and authorization mechanisms to secure leaderboard operations. Ensure proper validation of user input, handle authentication tokens or
sessions, and enforce access control rules.
By following these steps, web developers can adapt the provided code's main concepts to their own projects and create dynamic leaderboards with features such as updating, deleting, and adding entries. They can also extend the functionality by incorporating APIs, implementing authentication mechanisms, and adapting the code to their specific project requirements.
Hacks
Based on the provided code block, here are four programming challenges a web developer can try to practice these concepts:
-
Retrieve Leaderboard Data from an API:
- Challenge: Modify the code to fetch the leaderboard data from an API endpoint (e.g.,
get_options
andfetch
). Update theleaderboardData
array with the retrieved data and regenerate the leaderboard. - This challenge involves making asynchronous API requests, handling the response data, and updating the leaderboard dynamically.
- Challenge: Modify the code to fetch the leaderboard data from an API endpoint (e.g.,
-
Implement Create Functionality:
- Challenge: Extend the code to include functionality for adding new entries to the leaderboard. Modify the
addToLeaderboard
function to send a POST request to the API endpoint (post_url
) and update the leaderboard data with the response. - This challenge requires understanding how to handle form submissions, make POST requests, and handle the API response to update the leaderboard.
- Challenge: Extend the code to include functionality for adding new entries to the leaderboard. Modify the
-
Implement Update and Delete Functionality:
- Challenge: Complete the code by implementing the update and delete functionality for individual leaderboard entries. Modify the
updateEntry
anddeleteEntry
functions to send PATCH and DELETE requests to the API endpoint (update_url
anddelete_url
) respectively, to update and delete entries on the server. - This challenge involves working with different HTTP methods (PATCH and DELETE) to update and delete specific entries in the leaderboard data stored on the server.
- Challenge: Complete the code by implementing the update and delete functionality for individual leaderboard entries. Modify the
-
Extra Credit Challenge: Secure Leaderboard Operations:
- Challenge: Add authentication and authorization mechanisms to secure the leaderboard operations. Implement user authentication using tokens or session-based authentication. Restrict the update and delete operations to only authorized users.
- This challenge requires implementing authentication mechanisms, handling user sessions or tokens, and integrating authentication checks before allowing leaderboard modifications.