Skip to content

Instantly share code, notes, and snippets.

@capan
Created September 12, 2021 17:26
Show Gist options
  • Save capan/5f92ae0e97e627acd99cf33d7cc97783 to your computer and use it in GitHub Desktop.
Save capan/5f92ae0e97e627acd99cf33d7cc97783 to your computer and use it in GitHub Desktop.
Hacker Rank Uefa
const https = require('https');
const url = require('url');
async function getTeams(year, k) {
const teams = {};
const requestMaker = async (options) => new Promise((resolve, reject) => {
let data = '';
const formattedUrl = url.format({
protocol: 'https',
hostname: 'jsonmock.hackerrank.com',
pathname: '/api/football_matches',
query: {
year: options.year,
page: options.page,
competition: 'UEFA Champions League'
}
})
const req = https.get(formattedUrl, res => {
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
const parsedData = JSON.parse(data);
if (res.statusCode == 200) resolve({ status: res.statusCode, data: parsedData })
else reject(new Error("Response status is not 200. Status: ", status))
})
})
req.on('error', error => {
reject(error)
})
req.end();
});
const dataGrouping = (dataArr, teamObj) => {
dataArr.forEach(el => {
if (teamObj[el.team1]) {
teamObj[el.team1] = teamObj[el.team1] + 1
} else {
teamObj[el.team1] = 1
}
if (teamObj[el.team2]) {
teamObj[el.team2] = teamObj[el.team2] + 1
} else {
teamObj[el.team2] = 1
}
})
}
if (year >= 2011 && year <= 2015) {
const { data } = await requestMaker({ year, page: 1 });
const pageSize = data.total_pages;
dataGrouping(data.data, teams);
const promises = [];
for (let i = 2; i <= pageSize; i += 1) {
promises.push(requestMaker({ year, page: i }));
}
try {
const requestResults = await Promise.all(promises)
requestResults.forEach(each => {
dataGrouping(each.data.data, teams);
})
const desiredTeams = Object.keys(teams).filter(i => teams[i] > k)
return desiredTeams
} catch (err) {
console.log('Logic error: ', err)
}
} else {
console.log('Year value can be from 2011 to 2015!')
}
}
getTeams(2011, 12).then(res => {
console.log(res)
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment