Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solution(S) {
- let total = 0;
- const callArr = S.split('\n');
- let callMap = {};
- for (let i=0; i<=callArr.length-1; i++) {
- const tempArr = callArr[i].split(',')
- if (!callMap[tempArr[1]]) callMap[tempArr[1]] = { 'cost' : 0, 'duration' : 0 }
- callMap[tempArr[1]].cost = callCost(tempArr[0].split(':'))
- callMap[tempArr[1]].duration += secondsCalled(tempArr[0].split(':')) //duration is in seconds
- }
- callMap = longestCall(callMap);
- for (let num in callMap) {
- total += callMap[num].cost;
- }
- return total;
- }
- function callCost(duration) {
- let m = (Number(duration[0])*60) + Number(duration[1]);
- let s = Number(duration[2]);
- if (m >= 5) {
- if (s > 0) m++;
- return m*150;
- } else {
- s += m*60
- return s*3
- }
- }
- function secondsCalled(duration) {
- return (Number(duration[0])*60) + Number(duration[1])*60 + Number(duration[2])
- }
- function longestCall(callMap) {
- let mostCalled = '';
- let mostSeconds = 0;
- for (let num in callMap) {
- if (callMap[num].duration === mostSeconds) {
- const currNumArr = num.split('-');
- const currVal = Number(currNumArr[0]+currNumArr[1]+currNumArr[2]);
- const mostArr = num.split('-');
- const mostVal = Number(mostArr[0]+mostArr[1]+mostArr[2]);
- // What if the numerical values of the phone numbers are equal? No details in spec for that case...
- if (currVal < mostVal) mostCalled = num;
- }
- if (callMap[num].duration > mostSeconds) {
- mostSeconds = callMap[num].duration;
- mostCalled = num;
- }
- }
- delete callMap[mostCalled];
- return callMap;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement