Skip to content

Instantly share code, notes, and snippets.

@mdibello
Last active August 15, 2020 17:40
Show Gist options
  • Select an option

  • Save mdibello/d491f8089b0b5aeb18c4d0462c6b85c9 to your computer and use it in GitHub Desktop.

Select an option

Save mdibello/d491f8089b0b5aeb18c4d0462c6b85c9 to your computer and use it in GitHub Desktop.
NHL Playoff Scoreboard Generator
function generateScoreboard() {
cells = [
[[4,3], [6,3], [10,3], [12,3], [16,3], [18,3], [22,3], [24,3],
[4,11], [6,11], [10,11], [12,11], [16,11], [18,11], [22,11], [24,11]], // 0 pts
[[5,4], [11,4], [17,4], [23,4], [5,10], [11,10], [17, 10], [23, 10]], // 2^1 = 2 pts
[[8,5], [20,5], [8,9], [20,9]], // 2^2 = 4 pts
[[14,6], [14,8]], // 2^3 = 8 pts
[[10,7]], // 2^4 = 16 pts
];
sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
master_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MASTER");
master_data = master_sheet.getDataRange().getValues();
remaining_teams = addRemainingTeams(4, 0);
console.log(remaining_teams);
scoreboard_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SCOREBOARD");
scoreboard_sheet.clear();
scoreboard_sheet.appendRow(['NAME', 'SCORE', 'MAX SCORE']);
scoreboard_sheet.getRange(1, 1, 1, 3).setBackground('black');
scoreboard_sheet.getRange(1, 1, 1, 3).setFontColor('white');
scoreboard_sheet.getRange(1, 1, 1, 3).setFontWeight('bold');
for (var i = 0; i < sheets.length; i++) {
name = sheets[i].getName();
if (name != "MASTER" && name != "SCOREBOARD") {
data = sheets[i].getDataRange().getValues();
score = 0;
max_score = 0;
for (var j = 1; j < cells.length; j++) {
for (var k = 0; k < cells[j].length; k++) {
if (master_data[cells[j][k][0]][cells[j][k][1]] != "") {
correct = false;
for (var m = 0; m < cells[j].length; m++) {
if (master_data[cells[j][k][0]][cells[j][k][1]] == data[cells[j][m][0]][cells[j][m][1]]) {
correct = true;
}
}
if (correct) {
score += Math.pow(2,j);
max_score += Math.pow(2, j);
}
}
else {
if (includes(remaining_teams, data[cells[j][k][0]][cells[j][k][1]])) {
max_score += Math.pow(2, j);
}
}
}
}
scoreboard_sheet.appendRow([name, score, max_score]);
}
}
scoreboard_sheet.getDataRange().sort([
{column: 2, ascending: false},
{column: 3, ascending: false},
{column: 1, ascending: true}
]);
scoreboard_sheet.getRange(2, 1, 1, 3).setBackground('gold');
scoreboard_sheet.getRange(3, 1, 1, 3).setBackground('silver');
scoreboard_sheet.getRange(4, 1, 1, 3).setBackground('#CD7F32');
scoreboard_sheet.setColumnWidth(1, 300);
scoreboard_sheet.setColumnWidth(2, 100);
scoreboard_sheet.setColumnWidth(3, 100);
}
function addRemainingTeams(i, j) {
if (master_data[cells[i][j][0]][cells[i][j][1]] == "") {
return addRemainingTeams(i-1, j*2).concat(addRemainingTeams(i-1, j*2+1));
}
else {
return [master_data[cells[i][j][0]][cells[i][j][1]]];
}
}
function includes(list, item) {
for (var i = 0; i < list.length; i++) {
if (list[i] == item) {
return true;
}
}
return false;
}
function onEdit(e) {
generateScoreboard();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment