54 lines
1.2 KiB
TypeScript
Raw Normal View History

2025-03-26 17:40:24 +00:00
import { containsOnlyDigits } from '@utils/string';
function recursiveTimeToSeconds(
timeArray: string[],
index: number = 0
): number {
if (index >= timeArray.length) {
return 0;
}
const multipliers = [3600, 60, 1];
return (
Number(timeArray[index]) * multipliers[index] +
recursiveTimeToSeconds(timeArray, index + 1)
);
}
function compute(timeArray: string[], lineNumber: number): string {
if (timeArray[0] == '') {
return '';
}
if (timeArray.length > 3) {
throw new Error(`Time contains more than 3 parts on line ${lineNumber}`);
}
const normalizedArray = [...timeArray, '0', '0'];
normalizedArray.forEach((time, index) => {
if (!containsOnlyDigits(time)) {
throw new Error(
`Time doesn't contain valid ${
['hours', 'minutes', 'seconds'][index]
} on line ${lineNumber}`
);
}
});
return recursiveTimeToSeconds(timeArray).toString();
}
export function convertTimetoSeconds(input: string): string {
const result: string[] = [];
const lines = input.split('\n');
lines.forEach((line, index) => {
const timeArray = line.split(':');
const seconds = compute(timeArray, index + 1);
result.push(seconds);
});
return result.join('\n');
}