Created
September 12, 2021 17:26
-
-
Save capan/5f92ae0e97e627acd99cf33d7cc97783 to your computer and use it in GitHub Desktop.
Hacker Rank Uefa
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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