Skip to content

Instantly share code, notes, and snippets.

@markusait
Last active February 14, 2020 03:18
Show Gist options
  • Save markusait/07156156dd78a3038a99d4fbf2d07a4b to your computer and use it in GitHub Desktop.
Save markusait/07156156dd78a3038a99d4fbf2d07a4b to your computer and use it in GitHub Desktop.
/*
* Complete the 'getEventsOrder' function below.
*
* The function is expected to return a STRING_ARRAY.
* The function accepts following parameters:
* 1. STRING team1
* 2. STRING team2
* 3. STRING_ARRAY events1
* 4. STRING_ARRAY events2
*/
function getEventsOrder(team1, team2, events1, events2) {
const all_events = events1.concat(events2)
let orderedList = []
all_events.forEach((event, index) => {
const eventValues = {}
const teamName = getTeamName(team1, team2, index, events1.length)
eventValues.time = getTime(event)
eventValues.teamName = teamName
eventValues.originalString = event
let i = -1
let next = orderedList[++i]
while(next && next.time < eventValues.time) {
next = orderedList[++i]
}
orderedList.splice(i, 0, eventValues)
});
orderedList = orderedList.map(orderedEvent => {
const {
originalString,
teamName,
} = orderedEvent
return teamName + " " + originalString
})
return orderedList
}
const getTeamName = (t1, t2, i, len) => i < len ? t1 : t2
const isSubstitution = event => event.includes('S')
const isNotNumber = string => isNaN(parseFloat(string))
const getTimeFloat = numString => {
if (numString.includes('+')) {
// 45 or 90
let base = parseFloat(numString.slice(0, 2))
let rest = parseFloat(numString.slice(3))
// 9 -> 9 , 10 -> 11, 11 -> 12 ... 19 -> 20, 20 -> 22, 21 -> 23..
rest = rest + Math.floor(rest / 10)
//e.g. 45.21
return parseFloat(base.toString() + "." + rest.toString())
} else {
return parseFloat(numString)
}
}
const concatNames = (name1, name2) => name1 += (name1 === "" ? name2 : " " + name2)
const getTime = (event) => {
const eventArray = event.split(' ')
let i = -1
let next = eventArray[++i]
while (isNotNumber(next)) {
next = eventArray[++i]
}
let time = getTimeFloat(next)
next = eventArray[++i]
//substitution
if (next === 'S') {
next = eventArray[++i]
while (i < eventArray.length) {
next = eventArray[++i]
}
}
return time
}
console.log(getEventsOrder('abc', 'cba', [ 'mo sa 45+2 Y', 'a 13 G' ], [ 'd 23 S f', 'z 46 G' ]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment