const convertSharp = (s) => {
let result = s.split('');
for (let i = 0; i < result.length; i++) {
if (result[i] == '#') {
result.splice(i, 1);
let charCode = result[i - 1].charCodeAt() + 32;
result[i - 1] = String.fromCharCode(charCode);
}
}
return result;
};
const getSongsDuration = (t1, t2) => {
return (
(+t2.slice(0, 2) * 60 + +t2.slice(-2)) -
(+t1.slice(0, 2) * 60 + +t1.slice(-2))
);
};
const getFullSounds = (d, s) => {
let cS = convertSharp(s);
let result = [];
let [i, j] = [-1, -1];
if (cS.length >= d) {
for (let k = 0; k < d; k++) {
result.push(cS[k]);
}
return result.join('');
}
while (result.length < d) {
if (j == cS.length - 1) {
j = -1;
}
i++;
j++;
result.push(cS[j]);
}
return result.join('');
};
function solution(m, musicinfos) {
var answer = '';
var cM = convertSharp(m).join('');
while (musicinfos.length) {
let [t1, t2, title, sound] = musicinfos.shift().split(',');
let duration = getSongsDuration(t1, t2);
let fullSounds = getFullSounds(duration, sound);
if (fullSounds.includes(cM)) {
if (answer.length == 0) answer = { title, duration };
else if (answer.duration < duration) {
answer = { title, duration };
}
}
}
return answer.length !== 0 ? answer.title : '(None)';
}