Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/Savy011/fullstackopen-exercises. My Exercise Submissions for FullStack Open fullstackopen.com/en
Something went wrong. Try again.
1.7 kB · 71 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172import { sum } from 'lodash';import { errorhandler } from './utils';
interface ExerciseOutput { periodLength: number; trainingDays: number; target: number; average: number; success: boolean; rating: number; ratingDescription: string;}
const parseArguments = (args: string[]) => { const target = Number(args.pop()); const exerciseHours = args.map(e => { if (!isNaN(Number(e))){ return Number(e); } else { throw new Error('Exercise hours should be numeric values'); } }).filter(x => x !== undefined).slice(0, -1); if (!isNaN(target) && Array(exerciseHours)) { return { exerciseHours: exerciseHours, target: target }; } else { throw new Error('Arguments were not of the expected type'); }};
const calculateExercises = (exHours: number[], target: number): ExerciseOutput => { const periodLength = exHours.length; const average = sum(exHours) / exHours.length; const trainingDays = exHours.filter(e => e !== 0).length; const success = target >= average ? true : false; let rating: number = 0; let ratingDescription: string = '';
if (target > average) { rating = 1; ratingDescription = 'Nice effort, but there\'s room for improvement!'; } else if (target === average) { rating = 2; ratingDescription = 'Impressive work!'; } else if (target < average) { rating = 3; ratingDescription = 'Woah! You did pretty good!'; }
return { periodLength, average: Number(average.toFixed(2)), trainingDays, target, success, rating: rating, ratingDescription: ratingDescription, };};
try { const args = parseArguments(process.argv); console.log(args); console.log(calculateExercises(args.exerciseHours, args.target));} catch (error) { errorhandler(error);}