- I decided to take inputs through CSVs for the student and company data as it would be more convinient for me to test and it is even more realistic as in a real-world scenario, there would a lot of students and their data would likely be stored in a file
- Tried to keep data in dict format for fast O(1) lookup times
- I converted the times into minutes like 9AM was 540 minutes for easier calculation and then re-formatted it during output
- I must admit that I did not extensively test my solution due to time constraints and I also do not think it is the best solution. My guess would be that a backtracking solution would provide the most correct output but I am not comfortable enough with backtracking enough to be able to solve a problem like this so I have not been able to implement it.
- I have sorted my data to maximise the chances of me finding a valid solution. I have sorted the students in descending according to the total strain faced by a student. Strain = total time spent interviewing by a particular student. So the student with the most strain would begin interviewing the earliest in order to try to find a solution.
- I have also sorted the shortlisted companies for a particular student in descending order according to how much a company can handle in terms of interviewing. I have calculated this through ((no of students interviewing for said company)X(duration of interview)X(no of rounds))/(no of panels)
- So by sorting this way, I am able to attempt this problem without backtracking although I suspect it may fail for some cases
- Overall, was a fun question to attempt
- I find that there can be quite some UI design changes that could lead to better user experience. I have attached some photos in the github repository.
- In ss_1.jpg, I feel we can greatly improve the layout by using grid or flexbox and make the layout more consistent
- In ss_2.jpg, I feel the layout is too uneven and asymmetric, aligning them more consistently could create a better visual
- In ss_3.jpg, I feel its a bit too cluttered and maybe a flowchart with arrows, or maybe we could group related information like 'For Recruiters', 'For Students', etc to improve the UX. Also maybe add a hover effect on each card.
- As for performace improvements, the current score on google pagespeed insights in only 67/100 on desktop and 55/100 on mobile with the FCP, LCP on desktop being almost 2 and 3 seconds respectively. So adding lazy loading and also compressing images would help with the response times. Also maybe preloading the fonts
- The same could also be said about PDFs since this website would be handling quite a lot of files, compression for PDFs is crucial too.